【发布时间】:2015-05-18 11:41:30
【问题描述】:
注意:我知道 ffmpeg 和 libav 是 different libraries。这是双方共同的问题。
免责声明:重复的SO question 标记为已回答,但实际上没有给出正确的解决方案。
UDP 缓冲区大小不足会导致多个高分辨率视频流的流中断。在 LibAV/FFMPEG 中,可以通过附加一些 options (buffer_size) 来设置 udp url (udp://...) 的 udp 缓冲区大小。
但是,对于 RTSP 网址,这是 not supported。
这些是我找到的唯一解决方案:
- 重建 ffmpeg/libav 更改 udp.c 源文件中的 UDP_MAX_PKT_SIZE。
- 使用nasty hack 来查找和修改所需的值,方法是强制转换一些私有结构。
- 使用不同的解码库(针对上述相关 SO question 提出的解决方案)。
这些都不是真正的解决方案。根据我的发现,应该可以使用 API 的 AVOptions 来查找和设置此值。或者,AVDictionary。
在 libav 或 ffmpeg 的文档中很难找到如何设置这些。
更新:
感谢 Libav 开发者@lu_zero,以下补丁已提交给 Libav 以解决此问题:
这应该提供有关如何实现这些的提示,但这些仍然不能通过官方稳定的 API 获得。
【问题讨论】:
-
我猜你可以增加默认的操作系统 UDP 缓冲区限制。 Improving UDP Peformance
-
不适用于 Windows,它可能适用于其他平台.. 但仍应通过 API 设置。
-
对于 Windows,请参阅question
-
谢谢。但是我不想只为 Windows 解决它。此外,我知道应该只能在我的应用程序中这样做。只是API不清楚。
标签: ffmpeg udp rtsp buffer-overflow libav