# トラブルシューティング

## 突然切断された

### sora ログに `PONG-TIMEOUT-ERROR | reason=<<"WebSocket">>` が出力されている場合

Sora からデフォルトの設定で 5 秒間隔で送っている `{"type": "ping"}` に対して、
クライアントが `{"type": "pong"}` を 60 秒間返してこない場合に発生します。
また、これらの時間設定は  `sora.conf` の設定 [websocket_signaling_ping_interval](SORA_CONF.html#27aae2) と [websocket_signaling_pong_timeout](SORA_CONF.html#140464) で変更できます。

これは Sora がクライアントが疎通不能だと判断して切断した、正常な終了です。
まずはクライアントのネットワーク状況を確認してみてください。

WebSocket が詰まることを回避する方法としては、 [DataChannel 経由のシグナリング](DATA_CHANNEL_SIGNALING.html) の利用を検討してください。

### 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 の設定変更後はブラウザの再起動が必要になります。

### 有効(デフォルト)

ハードウェアアクセラレーターが **有効** になっている状態です。

![image](https://i.gyazo.com/45f650d456a2215b19aaf8f47e159d02.png)

`chrome://gpu` にてハードウェアアクセラレーターが有効になっているか確認できます。
`Video Decode: Hardware accelerated` と `Video Encode: Hardware accelerated` のように表示されていればハードウェアアクセレーターが有効になっています。

![image](https://i.gyazo.com/ef94a4ef1bfffccc82f193a8d6294883.png)

### 停止中

ハードウェアアクセラレーターが **停止中** になっている状態です。

![image](https://i.gyazo.com/708aca89e11a6f988ba13b8d1a641c6b.png)

`停止中` に設定変更した場合 `chrome://gpu` にてハードウェアアクセラレーターが停止しているかを確認することができます。

`Video Decode: Software only. Hardware acceleration disabled` と `Video Encode: Software only. Hardware acceleration disabled` のように表示されていればハードウェアアクセラレーターが停止しています。

![image](https://i.gyazo.com/bf78bfb5bc3f12e51e8670811a0f8bdd.png)

この状態では `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` と表示されます。
