Set RTSP/UDP buffer size in FFmpeg/LibAV
注意:我知道ffmpeg和libav是不同的库。这是双方共同的问题。
免责声明:重复的SO问题被标记为已回答,但实际上并未给出适当的解决方案。
UDP缓冲区大小不足会导致几个高分辨率视频流的流中断。在LibAV / FFMPEG中,可以通过向其附加一些选项(buffer_size)来设置udp url(udp:// ...)的udp缓冲区大小。
但是,对于RTSP网址,不支持此功能。
这些是我找到的唯一解决方案:
- 重建ffmpeg / libav,更改udp.c源文件中的UDP_MAX_PKT_SIZE。
- 通过转换一些私有结构,使用讨厌的骇客来查找和修改所需的值。
- 使用不同的解码库(上述相关SO问题的建议解决方案)。
这些都不是解决方案。从我发现的结果来看,应该可以使用API??的
在libav或ffmpeg的整个文档中都很难找到如何设置这些设置。
更新:
由于Libav开发人员@lu_zero,已向Libav提交了以下补丁:
- 添加buffer_size选项
- 将urloptions映射到AVOptions
应该提供有关如何实现这些功能的提示,但仍无法通过官方的稳定API获得这些提示。
仅供参考,最新的ffmpeg2.8.5已具有此选项。
我用它来设置buffer_size
1 | av_dict_set(&options,"buffer_size","655360", 0); |
我得到了以下输出:
[udp @ 0xb4945090]尝试将接收缓冲区设置为655360,但最终只设置为327680
经过一些搜索后,我运行
1 | echo 2097152 > /proc/sys/net/core/rmem_max |
修复警告
由于此提交足以传递
我已经测试过,并且可以正常工作。