注意 :我知道ffmpeg和libav是different libraries。这是两者共同的问题。
免责声明 :SO question的副本标记为已回答,但实际上没有给出正确的解决方案。
UDP缓冲区大小不足会导致几个高分辨率视频流出现故障。在LibAV / FFMPEG中,可以通过向其添加一些options (buffer_size)来为udp urls(udp:// ...)设置udp缓冲区大小。
但是,对于RTSP网址,这是not supported。
这些是我找到的唯一解决方案:
这些都不是解决方案。根据我的发现,应该可以使用API的AVOptions
来查找和设置此值。或者,AVDictionary。
很难找到如何在libav或ffmpeg的文档中设置这些内容。
更新
以下补丁已提交给Libav处理此主题,感谢Libav开发人员 @lu_zero :
哪些应提供如何实现这些的提示,但仍然无法通过官方稳定API提供。
答案 0 :(得分:2)
自this提交后,只需将buffer_size
作为选项传递即可,并通过udp
协议转发到rtp
协议。
我测试过,它按预期工作。
答案 1 :(得分:2)
仅供参考,最新的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
修正警告