目前受大众广泛使用的视频流拉转推工具应该是FFMPEG,TSINGEE青犀视频也有自己的拉转推平台,分别为EasyRTMPLive和EasyRTSPLive,两者都可以拉RTSP流转RTMP流。
这几天遇到一个客户反馈说用FFMPEG进行拉IPC的流然后推给EasyDSS流媒体服务器的时候,发现播放画面不完整,有花屏的情况。
带着这个情况,我们做了如下实验:
1、FFMPEG拉RTSP流推RTMP的命令如下:
ffmpeg -re -i rtsp://admin:a1234567@192.168.77.223:554/Streaming/Channels/102 -vcodec copy -acodec copy -f flv -y rtmp://demo.easydss.com:10035/hls/Seven-02?sign=BsBncNCMg
2、进入EasyDSS看下播放效果,确实有花屏的情况
根据上诉的现象我们分析花屏可能的情况如下:
1、播放端读取缓冲区不够,有时候遇到高清码流,一帧就好几兆,所以缓冲区要足够长,这块可能是播放器的问题;
2、推流端可能丢帧推流,导致播放端关键帧不够。
为证实我们的预判,我们用EasyRTSPLive再做一个实验,EasyRTSPLive是基于LIVE555改造的一个拉转推工具,配置很简单,拿到程序包解压后有个ini配置文件,直接配置RTSP源和RTMP目的地址,然后就可以启动程序。
然后我们在EasyDSS流媒体服务器上再看看播放效果,明显没有花屏。
下面我们对比下,两种方式播放的效果对比如下:
此问题只需在ffmpeg源码udp.c中#define UDP_MAX_PKT_SIZE 65536,修改扩大10倍就可以解决这个问题。