由于项目需求,需要分别在厂站和集中服务器上开发nginx服务器,通过ffmpeg实现对直播数据流的推流和转推。这里展示了本人测试过程中的截图,没有给出具体的文字说明。
nginx转发rtmp直播流
参考这篇博文
编译安装
cd nginx-1.20.2
sudo ./configure --prefix=/usr/local/nginx --with-stream
sudo make
sudo make install
备份&覆盖&重新链接配置文件
检查:
配置nginx
sudo vim /usr/local/nginx/conf/nginx.conf
events {...}
# tcp反向代理
stream {
server {
listen 1935;
proxy_connect_timeout 10s;
proxy_timeout 15s;
proxy_pass 10.10.10.10:1935;
}
}
http {...}
通过nginx-rtmp server进行视频流转发
1.接收流
在需要接收流的节点上进行类似以下的配置
application live{
live on;
}
只要有这一项,就可以通过在浏览器等位置输入下面这个url来点播了
rtmp://127.0.0.1:1935/live
可以使用vlc播放视频流
2.转推流
a.直接转推:
#在application live上收到流后直接用push命令转推给下一个节点
application live{
live on;
push rtmp://10.10.3.2/live;
}
但是总是报buffer错误:
这说明推流没问题,但是没连上服务器,检查端口是打开状态
尝试关闭防火墙:
再向目的ip地址192.168.239.131推流就可以了
再次尝试转推:
拉到了转推出去的地址
b.ffmpeg处理一下之后转推:
这里的转推是live收到流后先用ffmpeg处理完 发给另一个application sendout
然后在sendout里push出去给下一个节点
application live{
live on;
exec ffmpeg -re -i rtmp://localhost:1935/live/mystream -vcodec flv -acodec copy -s 32x32 -f flv rtmp://localhost:1935/sendout/mystream;
}
application sendout{
live on;
push rtmp://10.10.3.2/live;
}
推流到本地ip上可行:
其他测试截图
本地拉流测试:
转发ip拉流测试:
出现上述问题的原因:离10.200.102.201的服务器位置太远
回到服务器环境下的测试:
关于nginx rtmp转推push和relay的解析可以参考这篇博文