linux系统下nginx rtmp模块流媒体服务器
1、准备以下源码包
nginx-1.14.0.tar.gz
nginx-rtmp-module-master.zip
openssl-1.0.2o.tar.gz
pcre-8.42.tar.gz
zlib-1.2.11.tar.gz
2、全部解压至/usr/local/src/目录下
nginx-1.14.0
nginx-rtmp-module-master
openssl-1.0.2o
pcre-8.42
zlib-1.2.11
3、cd /usr/local/src/nginx-1.14.0/目录下
执行:
./configure --prefix=/usr/local/nginx --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.2o --with-pcre=/usr/local/src/pcre-8.42
make && make install
4、nginx安装完成后,启动nginx
执行 /usr/local/nginx/sbin/nginx
5、配置nginx-rtmp
创建目录mkdir -p /opt/video/hls && chmod 777 -R /opt/video 用于存放媒体文件,因为是测试所以直接给的777权限
执行 vim /usr/local/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
添加rtmp配置
rtmp { #RTMP服务
server {
listen 1935; #//服务端口
chunk_size 4096; #//数据传输块的大小
application live{
live on;
hls on; #这个参数把直播服务器改造成实时回放服务器。
wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。
hls_path /opt/video/hls; #切片视频文件存放位置。
hls_fragment 10s; #每个视频切片的时长。
hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。
hls_continuous on; #连续模式。
hls_cleanup on; #对多余的切片进行删除。
hls_nested on; #嵌套模式。
}
}
}
在http 添加
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/src/nginx-rtmp-module-master/;
}
location /live { #这里也是需要添加的字段。
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /opt/video/hls; #第五步创建的目录
expires -1;
add_header Cache-Control no-cache;
}
}
然后wq保存,重启nginx , /usr/local/nginx/sbin/nginx -s reload
访问http://172.16.1.155/stat 会有输出内容
6、下载obs软件安装,进行推流操作
点击设置->流->自定义流媒体服务器:
url:rtmp://172.16.1.155/live
流名称:test #这个名字是随便定义的会自动拼在live/test
保存。
在来源里添加一个来源,视频或窗口捕获都可以,
然后点击开始录制,再点击开始推流 #顺序不要整反
查看/opt/video/hls/目录下是否已产生文件,正常会产生test目录,test目录下会有0.ts,1.ts...... 以及index.m3u8
再次访问http://172.16.1.155/stat 会有输出内容,并有流量变化
7、随便安装一个可以进行网络流播放的播放器,我使用的是EVPlayer
播放网络流地址为:http://172.16.1.155/live/test/index.m3u8
记住最后使用的是http了,不是rtmp。