メインコンテンツへスキップ
見出し画像

対処法リストを全部試して直らなかったので、原因の調査を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 = 800

    800。標準は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 = 800

    TcpAckFrequency は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. アプリの設定を全部試しても直らないなら、たぶんそのアプリの問題ではない。レイヤーを1つ下げる

    2. 「Aは動くのにBだけ動かない」は最高のヒントになる。AとBの違いを言葉にすると、疑う場所が決まる

    3. 検索で出てくる対処法リストは「よくある原因」の集合であって、自分の原因が入っている保証はない

    最後に4つ目。書きながら、いったんは「設定をいじったらメモを残そう」で締めようとしました。でも、たぶんそれでは防げません。過去の私はメモを残すべきだと知らなかったわけではなく、そのとき直ったので終わりにしただけです。同じ状況になれば、同じことをします。

    残すなら、メモではなく検査のほうでした。今回の調査で出てきたコマンドは、そのまま検査として使えます。

    Get-NetIPInterface -AddressFamily IPv4 | Select-Object InterfaceAlias, NlMtu

    これで1500以外が出たら止まる。それだけで、次に同じ罠を踏んだときにかかる時間が変わります。注意書きは読み返さないと効きませんが、検査は読み返さなくても効きます。

     
     
    本業はITエンジニア。AIと組んでゲームや道具を作りながら、考えたことを書いています。 🎮 AI駆動開発のゲーム制作記(devlog) 🧘 AIと働くための設計と思想 📚 失敗談スパイス 「AIで何を作ったか」より、「AIに何を任せて、何を任せなかったか」を書きます。

    あなたへのおすすめ