我已经阅读了很多关于UDP数据包大小的文章,但是无法得出结论.
许多服务将最大的UDP数据包限制为512字节(如dns)
给定互联网上的最小MTU为576,IPv4标头的大小为20字节,UDP标头为8字节.这留下了548个可用于用户数据的字节
我是否能够使用大小为548的数据包而不会出现数据包碎片?或者是DNS的创建者知道什么,以及为什么他们将其限制为512字节.
我能安全地高于548字节吗?
我需要知道我可以发送到另一台计算机的最大UDP数据包没有碎片.
该大小通常称为MTU(最大传输单元).据推测,在两台计算机之间,将有许多可能具有不同MTU的路由器和调制解调器.
我读到Windows中的TCP实现自动找到路径中的最大MTU.
我也在试验,我发现从我的电脑到服务器的最大MTU是57712字节+标题.上面的任何东西都被丢弃了.我的电脑在局域网上,不是MTU应该在1500字节左右吗?
注意:我知道 ffmpeg 和 libav 是不同的库。这是双方共同的问题。
免责声明:重复的SO 问题标记为已回答但实际上没有给出正确的解决方案。
UDP 缓冲区大小不足会导致多个高分辨率视频流的流中断。在 LibAV/FFMPEG 中,可以通过向其附加一些选项 (buffer_size)来设置 udp url (udp://...) 的 udp 缓冲区大小。
但是,对于 RTSP url,这是不支持的。
这些是我找到的唯一解决方案:
这些实际上都不是解决方案。根据我的发现,应该可以使用 APIAVOptions来查找和设置此值。否则,AVDictionary。
在 libav 或 ffmpeg 的整个文档中很难找到如何设置这些。
更新:
感谢 Libav 开发人员@lu_zero,以下补丁已提交给 Libav 来解决此主题:
这应该提供有关如何实现这些的提示,但这些仍然无法通过官方稳定 API 获得。