使用 VLC 进行 RTP 流式传输 - 我的电脑上出现大量传输 UDP 数据包丢失 - 为什么?

使用 VLC 进行 RTP 流式传输 - 我的电脑上出现大量传输 UDP 数据包丢失 - 为什么?

我的 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 位)。

(我也调整了网络控制器中的缓冲区大小设置,但没有任何结果。)

相关内容