摘要:nginx源码编译添加rtmp模块实现视频推流服务器
环境:deepin linux 15.10.1(基于debian9)
安装依赖库
执行命令前,最好执行一次sudo apt update更新下仓库
sudo apt install autoconf automake
sudo apt install libpcre3 libpcre3-dev
sudo apt install openssl
sudo apt install libssl-dev
下载nginx和nginx-rtmp-module源码
进入到一个目录(可以自己新建),然后clone nginx和rtmp模块的源码,地址可在github上面查找对应的仓库,然后进行clone操作(需要安装git)
git clone https://github.com/nginx/nginx.git --depth=1
// clone nginx源码,指定克隆深度depth为1即表示只克隆最近一次commit(clone时间大幅缩短)
git clone https://github.com/arut/nginx-rtmp-module.git --depth=1
// clone nginx-rtmp-module源码
进入到nginx源码目录,有一个auto文件夹,里面有一个名为configure的文件.通过命令参数调用该文件,生成MakeFile
cd nginx
// 进入到nginx源码目录
./auto/configure --prefix=/opt/nginx --with-http_ssl_module --with-http_v2_module --with-http_flv_module --with-http_mp4_module --add-module=../nginx-rtmp-module/
ls -al
// 查看当前目录(nginx)下的文件,会有一个产生的MakeFile文件
编译和安装
当前目录还是位于上一步的nginx目录
make
// 编译
sudo make install
// 安装
查看结果
ls -l /opt/nginx/
// 查看opt目录下nginx目录的内容
sudo /opt/nginx/sbin/nginx
// 启动nginx服务,默认只能用root启动,所以加sudo
sudo chmod u+s /opt/nginx/sbin/nginx
// 为nginx文件加上setuid标志.(setuid只对文件有效).设置后可以通过普通用户就可以启动
关于chmod扩展:如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置:
setuid: 设置使文件在执行阶段具有文件所有者的权限
setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件,该权限只对目录有效.
具体使用如下
chmod u+s temp — 为temp文件加上setuid标志. (setuid 只对文件有效)
chmod g+s tempdir — 为tempdir目录加上setgid标志 (setgid 只对目录有效)
chmod o+t temp — 为temp文件加上sticky标志 (sticky只对文件有效) *
浏览器打开localhost,正常就能打开nginx默认的首页面
nginx 推流配置
sudo vim /opt/nginx/conf/nginx.conf
rtmp {
server {
listen 1935;
application rtmplive_demo {
live on;
max_connections 1024;
}
application hlsvideo {
live on;
hls on;
hls_path /home/bz/Desktop/video/hlsvideo; # 推流存放文件夹,自定义
hls_fragment 1s;
}
}
}
location ^~ /hlsvideo {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /home/bz/Desktop/video; # 此处不能写/home/bz/Desktop/video/hlsvideo,因为路径中带了一层hlsvideo了,如果写上hlsvideo会导致读取m3u8文件404
add_header Cache-Control no-cache;
}
sudo /opt/nginx/sbin/nginx -t
// 测试配置文件是否ok
sudo /opt/nginx/sbin/nginx -s reload
测试rtmp推流
ffmpeg -re -i ./龙珠超.布罗利.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.100.31:1935/rtmplive_demo/longzhuchao
注:rtmp://192.168.100.31:1935/rtmplive_demo/longzhuchao rtmp流地址,其中rtmplive_demo必须和nginx.conf中
application中的rtmplive_demo名称必须一致,否则导致推流不成功
打开VLC Media Player测试
在工具栏”媒体->打开网络串流”然后输入rtmp://192.168.100.31:1935/rtmplive_demo/longzhuchao点击确定即可进行直播预览转换后的rtmp视频流.效果如图
测试HLS推流
ffmpeg -re -i ./龙珠超.布罗利.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.100.31:1935/hlsvideo/longzhuchao
注:rtmp://192.168.100.31:1935/hlsvideo/longzhuchao,其中hlsvideo必须和nginx.conf中
application中hlsvideo名称必须一致,否则导致推流不成功
打开VLC Media Player测试
HLS测试地址是http协议的.访问路径是nginx中http节点下server节点配置的.此处是http://192.168.100.31/hlsvideo/longzhuchao.m3u8
在工具栏”媒体->打开网络串流”然后输入http://192.168.100.31/hlsvideo/longzhuchao.m3u8点击确定即可进行直播预览转换后的rtmp视频流.效果如图