我的 Windows 7 PC 上出现了一些奇怪的问题:我尝试设置 VLC 媒体播放器通过 RTP 传输音频,但是我丢失了大量出站 UDP 数据包。
经过一些调试,我发现我的 PC 完全可以正常接收来自另一台 PC 的相同流式数据包(无入站 UDP 丢失),但是当我的 PC 设置为传输流时,UDP 数据包丢失率超过 26%。即使 PC 之间使用直通 CAT5 电缆连接。
从 Wireshark 的测试来看,我的 PC 似乎根本没有发送这些数据包。有什么东西阻止了它们的发送。可能是什么原因造成的?我不知道。
谢谢您的任何提示。
//编辑:我忘了补充,流是单播还是多播并不重要。结果是相同的。
答案1
最后,我找到了解决方案:正如我一开始担心的那样,问题确实出在 Windows 上。出于某种原因,默认情况下 IP 堆栈仅使用 8 kByte 缓冲区。(很搞笑,不是吗?)这对于 VLC 产生的几 kB UDP 突发来说根本不够。
有可能使用注册表项来增加 IP 堆栈发送/接收缓冲区大小。由于某种原因,我的机器完全没有这些键,所以大小是默认大小。
要更改发送/接收缓冲区大小,请更新(或创建)此注册表项。就我而言,设置 64 kB 缓冲区大小可以解决问题。现在没有 UDP 出站丢失。
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
DefaultReceiveWindow = 65536
DefaultSendWindow = 65536
如果您需要创建这两个值,则这两个值都是 DWORD(32 位)。
(我也调整了网络控制器中的缓冲区大小设置,但没有任何结果。)