欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

srs ffmpeg拉取rtsp流,推送rtmp流到srs,vlc播放花屏、srs网页播放器播放跳秒/跳帧的问题。

程序员文章站 2022-07-07 12:27:10
...

现象如下。
srs ffmpeg拉取rtsp流,推送rtmp流到srs,vlc播放花屏、srs网页播放器播放跳秒/跳帧的问题。
折腾了好几天,不容易。
最开始ffmpeg推流花屏、公司自己做的国标推流器也会花屏,初步把问题定位到srs里面。但是检查几遍srs_app_rtmp_conn.cpp 吞吐message 包是否丢包,没有问题。尝试修改 conf文件里面srs各种配置依然没有问题。中途也尝试过只开启一路视频流、一路视频流不用1080p,用720p,甚至更小分辨率,也会出现花屏现象。当时整个人已经懵了。
折腾几天后,想到会不会是两个推流器都有问题?然后网上查阅资料,尝试修改ffmpeg udp buffer大小无果。
最后顺着排查ffmpeg的思路,检查srs objs 下的ffmpeg推流日志,发现ffmpeg拉取rstp丢包,柳暗花明。网上一查,原来是ffmpeg默认是使用udp的方式拉取rtsp流,udp方式会丢包。

废话不多说。
解决方法:ffmpeg推流使用tcp方式推流:
/root/ffmpegTest/ffmpeg-4.1/ffmpeg -rtsp_transport tcp -i rtsp://admin:aaa@qq.com:554/h264/ch1/main/av_stream -vcodec copy -acodec copy -f flv -y rtmp://192.168.0.210:1935/live?vhost=ruiyan/ruiyan_234
srs代码如下更改:
srs_app_ffmpeg.cpp 265行 左右, params.push_back("-i")前加入指定tcp的代码。

    params.push_back("-rtsp_transport");
    params.push_back("tcp");

    params.push_back("-i");
    params.push_back(input);