トラブルシューティング¶
突然切断された¶
sora ログに PONG-TIMEOUT-ERROR | reason=<<"WebSocket">> が出力されている場合¶
Sora からデフォルトの設定で 5 秒間隔で送っている {"type": "ping"} に対して、
クライアントが {"type": "pong"} を 60 秒間返してこない場合に発生します。
また、これらの時間設定は sora.conf の設定 websocket_signaling_ping_interval と websocket_signaling_pong_timeout で変更できます。
これは Sora がクライアントが疎通不能だと判断して切断した、正常な終了です。 まずはクライアントのネットワーク状況を確認してみてください。
WebSocket が詰まることを回避する方法としては、 DataChannel 経由のシグナリング の利用を検討してください。
sora ログに tcp_closed という文字列が含まれている場合¶
この場合、通信に TURN-TCP が採用されており、OS 側で TCP の切断を検知し、接続を終了しています。
connection ログの turn_transport_type で tcp になっているかどうかを確認してみてください。
OS による TCP の切断に関しては Sora 側で対処できる事は基本的にはありません。
Intel GPU を利用した端末で VP9 で配信または視聴した際に視聴している映像が乱れる¶
Windows で Intel の GPU (内蔵 GPU を含みます) を利用している場合に、VP9 のハードウェアアクセラレーターが正常に動作しないことがあります。
この問題は Intel 特有のチップセットでのみ発生することが確認されています。これは Chrome または Intel のドライバーの不具合である可能性が高いため、 Sora 側の対応で解決することはできません。そのため、他のコーデックを利用する事で回避してください。
ただし Chrome 側で VP9 のハードウェアアクセレーターの利用を停止することで回避することもできます。
ハードウェアアクセラレーターを停止する方法¶
VP9 のハードウェアアクセラレーターを停止する場合、 映像が乱れる原因がエンコーダーかデコーダーかがわからないため、まずはデコーダーを停止してみてください。
ハードウェアアクセラレーターのデコーダーを停止すると libvpx を利用したソフトウェアデコードに切り替わります。多くの場合はこれで解決する可能性が高いです。
ただし、状況が改善しない場合はハードウェアアクセラレーターのエンコーダー側も停止してみてください。 エンコーダー側の停止で解決した場合、エンコーダーが壊れている映像を送信している可能性が高くなります。
Chrome のハードウェアアクセラレーターを停止するには、
chrome://flags/#disable-accelerated-video-decode と chrome://flags/#disable-accelerated-video-encode を 停止中 に変更することで、
ハードウェアアクセラレーターの利用を停止できます。
重要
chrome://flags の設定変更後はブラウザの再起動が必要になります。
有効(デフォルト)¶
ハードウェアアクセラレーターが 有効 になっている状態です。
chrome://gpu にてハードウェアアクセラレーターが有効になっているか確認できます。
Video Decode: Hardware accelerated と Video Encode: Hardware accelerated のように表示されていればハードウェアアクセレーターが有効になっています。
停止中¶
ハードウェアアクアクセラレーターが 停止中 になっている状態です。
停止中 に設定変更した場合 chrome://gpu にてハードウェアアクセラレーターが停止しているかを確認することができます。
Video Decode: Software only. Hardware acceleration disabled と Video Encode: Software only. Hardware acceleration disabled のように表示されていればハードウェアアクセラレーターが停止しています。
この状態では libvpx を利用したソフトウェアエンコード/デコードが利用されます。
問題が発生した場合の Intel のハードウェアアクセラレーターが利用されているかどうかの確認方法¶
Intel の GPU または内蔵 GPU を利用している端末で配信側と視聴側の両方を確認してください。
配信側の確認方法¶
chrome://webrtc-internals の kind が video の outbound-rtp を見ていただき、
[codec] と encoderImplementation を確認してみてください。
ここで VP9 と ExternalEncoder となっている場合、
VP9 のエンコードにハードウェアアクセラレーターが利用されていることが確認できます。
ソフトウェアエンコーダーが利用されている場合は encoderImplementation には libvpx と表示されます。
視聴側の確認方法¶
chrome://webrtc-internals の kind が video の inbound-rtp を見ていただき、
[codec] と decoderImplementation を確認してみてください。
ここで VP9 と ExternalDecoder となっている場合、
VP9 のデコードにハードウェアアクセラレーターが利用されていることが確認できます。
ソフトウェアエンコーダーが利用されている場合は decoderImplementation には libvpx と表示されます。