ffmpeg RTSP推流的巨坑
折腾了两天,现在终于从坑里爬出来了,留个笔记。
众所周知,ffmpeg是个非常牛B lity的东西,很多需要拉流或者推流的时候,这都是不二选择。并且这货还有其他很多功能,比如剥离视频中的图像与音轨,比如转换视频、音频的格式。当下一个正在进行中的项目,需要通过ONVIF协议,把机器人的摄像头H.265画面回传到控制中心,这就有了这次掉坑里的经历。
注意,重点来了: ffmpeg 有个 rtsp_transport 参数,通过设定这个参数值为 tcp ,使得ffmpeg强制使用tcp协议传输RTSP流(RTSP流模式使用UDP方式传输)。
错误示范:
ffmpeg -rtsp_transport tcp -i rtsp://camera-ip-address/channel/stream?param=value&other=something -f rtsp rtsp://media-server/app/stream_id?token=xxx
如果这样来跑ffmpeg,这货死活就是要走UDP。而数据中心的WAF刚好又关闭了所有的UDP端口......郁闷的我都想提流程申请开通UDP了。
GOOGLE翻了N多文章,发现了一个细节,stackoverflow上很多高分回答中,rtsp_transport这个参数的位置都在后面。如下正确示范:
ffmpeg -i rtsp://camera-ip/channel/stream?param=value -f rtsp -rtsp_transport tcp rtsp://media-server/app/stream-id?token=xxx
............刚吃完饭的我,顺手就抄个作业,MMP,世界真美好。ffmpeg现在终于老老实实的用TCP传输了。今天可以按时睡觉。
评论已关闭