在 FFmpeg/LibAV 中设置 RTSP/UDP 缓冲区大小

Set RTSP/UDP buffer size in FFmpeg/LibAV

注意:我知道 ffmpeg 和 libav 是 different libraries。这是两者共同的问题。

免责声明:重复 SO question 标记为已回答但实际上没有给出正确的解决方案。


UDP 缓冲区大小不足会导致多个高分辨率视频流中断。在 LibAV/FFMPEG 中,可以通过向其附加一些 options (buffer_size) 来设置 udp url (udp://...) 的 udp 缓冲区大小。

但是,对于 RTSP 网址,这是 not supported

这些是我找到的唯一解决方案:

None这些实际上是一个解决方案。根据我的发现,应该可以使用 API 的 AVOptions to find and set this value. Or else, the AVDictionary

很难在 libav 或 ffmpeg 的文档中找到如何设置它们。

更新:

以下补丁已提交给 Libav 以解决此主题,感谢 Libav 开发人员 @lu_zero :

应该提供有关如何实现这些的提示,但这些还不能通过官方稳定版 API 获得。

自从 this 提交后,将 buffer_size 作为选项传递就足够了,它通过 rtp 协议转发到 udp 协议。

我测试过,它按预期工作。

仅供参考,最新的ffmpeg2.8.5已经有这个选项了。 我用它来设置 buffer_size

av_dict_set(&options, "buffer_size", "655360", 0);

我得到了这个输出:

[udp @ 0xb4945090] 试图将接收缓冲区的大小设置为 655360,但最终只设置为 327680 经过一番搜索,我 运行

echo 2097152 > /proc/sys/net/core/rmem_max

修复警告