
Windows 7 PC で奇妙な問題が発生しています。VLC メディア プレーヤーを設定して、RTP 経由でオーディオをストリーミングしようとしましたが、大量の送信 UDP パケットが失われています。
デバッグを少し行った後、私の PC は別の PC から同じストリーミング パケットをまったく問題なく受信できる (受信 UDP 損失なし) のに、PC がストリームを送信するように設定されている場合は、26% を超える UDP パケット損失が発生することがわかりました。PC が CAT5 のストレート ケーブルを使用して接続されている場合でも同じです。
Wireshark で調べてみると、私の PC はこれらのパケットをまったく送信していないようです。何かがパケットの送信を妨げています。原因は何でしょうか? まったくわかりません。
ヒントがあればよろしくお願いします。
//編集: 追加するのを忘れましたが、ストリームがユニキャストかマルチキャストかは関係ありません。結果は同じです。
答え1
ついに解決策を見つけました。最初から心配していた通り、問題は確かに Windows にありました。何らかの理由で、デフォルトでは IP スタックは 8 KB のバッファーしか使用しません。(笑えますよね?) これは、VLC が生成する数 KB の UDP バーストには不十分です。
レジストリ キーを使用して、IP スタックの送受信バッファ サイズを増やすことができます。何らかの理由で、私のマシンにはこれらのキーがまったく存在しなかったため、サイズはデフォルトのものになっていました。
送受信バッファ サイズを変更するには、このレジストリ キーを更新 (または作成) します。私の場合は、64 KB のバッファ サイズを設定すると問題が解決しました。UDP 送信の損失はなくなりました。
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
DefaultReceiveWindow = 65536
DefaultSendWindow = 65536
両方の値は DWORD (32 ビット) です (作成する必要がある場合)。
(ネットワーク コントローラーのバッファー サイズ設定もいじってみましたが、何も変わりませんでした。)