
対処法リストを全部試して直らなかったので、原因の調査をAIに任せた
Discordの画面共有が、ある日から映らなくなりました。私の画面にはエラー2006(Poor streaming connection)、相手の画面にはエラー2012が出て、ぐるぐる回ったまま黒いまま。ただし、音声は普通に通じます。有線LANで、相手を変えても、スマホの別アカウントからでもだめでした。
リストを全部試すと、リストの外に出られなくなる
「Discord 画面共有 できない」で検索すると、対処法をまとめた記事がいくらでも出てきます。15の解決方法、みたいなやつです。上から順にやりました。
QoS(サービス品質の高いパケット優先度)をOFF
ハードウェアアクセラレーション(H.264 / AV1)をOFF
「最新テクノロジーを使用して画面をキャプチャする」をOFF
完全終了して再起動
キャッシュ削除
アンインストールして再インストール
ブラウザ版で配信
全部だめでした。HDRをOFFにする項目もありましたが、そもそもHDR非対応のモニタでした。
このうち、アンインストールとブラウザ版がだめだった時点で、ひとつだけ確定します。Discordを消してもブラウザで開いても同じなら、それはDiscordの問題ではない。
分かったのはそこまでです。リストの中の項目は全部消えたのに、リストの外に何があるのかはリストに書いてありません。ここで自力が尽きました。
AIに渡したのは、症状ではなく症状の差
そこで、ここまでの経緯をまとめてClaudeに渡して、原因の調査を頼みました。調べるためのコマンドも、そのまま実行してもらっています。
返ってきたのは、対処法の16個目ではありませんでした。最初に置かれた問いは、動いているものと動いていないものの違いは何かです。
音声は通る。映像は通らない。同じアプリの、同じ回線で、同じ相手との通信なのに、片方だけが落ちている。
そこから出てきた仮説がパケットサイズでした。
音声パケットは150〜200バイト程度
映像パケットは1100〜1200バイト程度
サイズで生死が分かれているなら、疑うのはMTU(1回に送れるパケットの最大サイズ。標準は1500)です。
この記事でいちばん書きたいのはここです。私がやっていたのは対処法を1つずつ潰す作業で、原因を絞り込んでいるつもりでした。でも実際には、候補リストの中しか探していない。 症状の非対称に目を向けると、探す場所そのものが決まります。
ここから先は、提案ではなく実行でした。まずMTUを確認します。
Get-NetIPInterface -AddressFamily IPv4 | Select-Object InterfaceAlias, NlMtuイーサネット NlMtu = 800800。標準は1500です。
念のため、分割禁止フラグを立てたpingで実際の上限も測りました。
ping -n 1 -f -l 772 8.8.8.8 通る(パケット全体で800)
ping -n 1 -f -l 972 8.8.8.8 通らない(同1000)ちょうど800でスパッと壁がありました。映像パケットは、1つも外に出ていなかったことになります。
私がやったのは、経緯をまとめて渡すところまでです。「こうかもしれません」で終わらず、そのまま測って白黒がついたのが大きかったと思っています。仮説だけなら、私の手元でまた1つ増えるだけでした。
犯人は過去の自分だった
MTUが800になっている理由をたどると、レジストリに永続設定として書き込まれていました。
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{GUID}
MTU = 800同じキーの中に、指紋が並んでいます。
TcpAckFrequency = 1
NameServer = 1.1.1.1, 1.0.0.1
MTU = 800TcpAckFrequency はWindowsの標準には存在しない項目で、オンラインゲームのラグを減らす系の記事やツールで定番のやつです。しかもMTUの変更とセットで紹介されることが多い。DNSを手動でCloudflareに向けているのも同じ系統です。
つまり、ゲーム回線の最適化をやったときの設定が、そのまま残っていた。正確な時期は覚えていませんが、1年以上前です。ルーターが配った値でないことも確認しました(DHCPの受信オプションを読んで、オプション26=Interface MTU が含まれていないことを確認)。
直すのは1行です。管理者権限で実行します。
netsh interface ipv4 set subinterface "イーサネット" mtu=1500 store=persistent確認はこちら。
netsh interface ipv4 show subinterfaces
ping -n 1 -f -l 1372 8.8.8.8適用した直後に画面共有が復活しました。通話相手に画面共有を見てもらっていたので、映っていると返ってきた時点で確定です。
ちなみに、日本語でも英語でも「Discord 画面共有 できない」の対処法記事にMTUの項目は1つも見つかりませんでした。唯一見つかった同じ原因の報告は、繁体字のフォーラムに1件だけです。別のゲームのためにMTUを576にしていて、1500に戻したら直った、という投稿でした。珍しい事故ではあるけれど、私だけに起きたわけでもないようです。
メモではなく、検査にする
持ち帰れそうなことを並べておきます。
アプリの設定を全部試しても直らないなら、たぶんそのアプリの問題ではない。レイヤーを1つ下げる
「Aは動くのにBだけ動かない」は最高のヒントになる。AとBの違いを言葉にすると、疑う場所が決まる
検索で出てくる対処法リストは「よくある原因」の集合であって、自分の原因が入っている保証はない
最後に4つ目。書きながら、いったんは「設定をいじったらメモを残そう」で締めようとしました。でも、たぶんそれでは防げません。過去の私はメモを残すべきだと知らなかったわけではなく、そのとき直ったので終わりにしただけです。同じ状況になれば、同じことをします。
残すなら、メモではなく検査のほうでした。今回の調査で出てきたコマンドは、そのまま検査として使えます。
Get-NetIPInterface -AddressFamily IPv4 | Select-Object InterfaceAlias, NlMtuこれで1500以外が出たら止まる。それだけで、次に同じ罠を踏んだときにかかる時間が変わります。注意書きは読み返さないと効きませんが、検査は読み返さなくても効きます。