1. 前言
最近在调试流媒体服务器的bug,准备尝试一些新的方法,测试用FFmpeg将rtsp流转为UDP裸流的时候,发现当rtsp流是主码流,也就是1280*720时,播放端容易花屏,当我将rtsp流切换为子码流,也就是704*576,然后播放端再也没有出现过问题。
2. 问题总结
应该是播放端UDP缓冲区默认值正好介于900KB(1280*720)和396KB(704*576)之间,造成一部分数据丢失,所以播放端下方花屏越来越严重。因为这一区域的数据不断丢失。
3. 解决思路
播放端,应该将UDP缓冲区设置的大一些,一定要大于当前分辨率。
4. 拓展
如果是ffmpeg拉流的时候,也应该注意缓冲区大小,如下,在打开视频流的时候,通过buff_size 设置缓冲区,比如下面的2048000 (2MB),如果太小,播放端照样花屏。
AVDictionary *dic = NULL;
av_dict_set(&dic, "buffer_size", "2048000", 0);
avformat_open_input(&ifmt_ctx, input_filename, NULL, &dic);