

# IVS Web Broadcast SDK でのエラー処理 \| Real-Time Streaming
<a name="broadcast-web-error-handling"></a>

このセクションでは、エラー状態の概要、Web Broadcast SDK がエラー状態をアプリケーションに報告する方法、およびエラー発生時にアプリケーションが実行する処理について説明します。エラーは SDK によって `StageEvents.ERROR` イベントのリスナーに報告されます。

```
stage.on(StageEvents.ERROR, (error: StageError) => {
    // log or handle errors here
    console.log(`${error.code}, ${error.category}, ${error.message}`);
});
```

## ステージエラー
<a name="web-error-handling-stage-errors"></a>

StageError は、SDK が復旧できない問題に遭遇したときに報告され、通常、アプリケーションの介入やネットワークの再接続が必要になります。

報告されたそれぞれの `StageError` には、コード (または `StageErrorCode`)、メッセージ (文字列)、カテゴリ (`StageErrorCategory`) があります。それぞれが基盤となるオペレーションカテゴリに関連しています。

エラーのオペレーションカテゴリは、ステージへの接続 (`JOIN_ERROR`)、ステージへのメディアの送信 (`PUBLISH_ERROR`)、またはステージからの受信メディアストリームの受信 (`SUBSCRIBE_ERROR`) のどちらに関連しているかに基づいて決定されます。

`StageError` のコードプロパティは、特定の問題をレポートします。


| 名前 | コード | [Recommended Action] (推奨されるアクション) | 
| --- | --- | --- | 
| TOKEN\_MALFORMED | 1 | 有効なトークンを作成し、ステージのインスタンス化を再試行してください。 | 
| TOKEN\_EXPIRED | 2 | 有効期限が切れていないトークンを作成し、ステージのインスタンス化を再試行します。 | 
| タイムアウト | 3 | オペレーションがタイムアウトしました。ステージが存在し、トークンが有効である場合、この障害はネットワークの問題である可能性があります。この場合は、デバイスの接続が回復するまでお待ちください。 | 
| FAILED | 4 | オペレーションの試行中に致命的な状態が発生しました。エラーの詳細を確認してください。<br />ステージが存在し、トークンが有効である場合、この障害はネットワークの問題である可能性があります。この場合は、デバイスの接続が回復するまでお待ちください。<br />ネットワークの安定性に関連するほとんどの障害の場合、SDK は FAILED エラーを出力する前に最大 30 秒間内部で再試行します。 | 
| CANCELED | 5 | アプリケーションコードをチェックし、繰り返し `join`、`refreshStrategy`、または `replaceStrategy` 呼び出しがないことを確認します。これにより、完了前に繰り返しオペレーションが開始され、キャンセルされる可能性があります。 | 
| STAGE\_AT\_CAPACITY | 6 | このエラーは、ステージまたはアカウントのキャパシティに達していることを示します。ステージが参加者の制限に達した場合は、戦略を更新して、ステージのキャパシティが解放されたときにオペレーションを再試行してください。アカウントが同時サブスクリプションまたは同時パブリッシャーのクォータに達した場合は、[AWS Service Quotas コンソール](https://console.aws.amazon.com/servicequotas/)を使用して使用量を減らすか、クォータの引き上げをリクエストしてください。 | 
| CODEC\_MISMATCH | 7 | コーデックはステージではサポートされていません。コーデックのサポートについては、ブラウザとプラットフォームを確認してください。IVS Real-Time Streaming の場合、ブラウザはビデオ用の H.264 コーデックとオーディオ用の Opus コーデックをサポートしている必要があります。 | 
| TOKEN\_NOT\_ALLOWED | 8 | トークンにはオペレーションに対するアクセス許可がありません。トークンを正しいアクセス許可で再作成し、再試行してください。 | 
| STAGE\_DELETED | 9 | なし。削除されたステージに参加しようとすると、このエラーがトリガーされます。 | 
| PARTICIPANT\_DISCONNECTED | 10 | なし。切断された参加者のトークンを使用して参加しようとすると、このエラーがトリガーされます。 | 

### StageError の処理の例
<a name="web-error-handling-stage-errors-example"></a>

StageError コードを使用して、エラーが期限切れのトークンによるものかどうかを判断します。

```
stage.on(StageEvents.ERROR, (error: StageError) => {
    if (error.code === StageError.TOKEN_EXPIRED) {
        // recreate the token and stage instance and re-join
    }
});
```

### 既に参加している場合のネットワークエラー
<a name="web-error-handling-stage-errors-network"></a>

デバイスのネットワーク接続が切断されると、SDK と Stages サーバーとの接続が失われる可能性があります。SDK がバックエンドサービスにアクセスできなくなるため、コンソールにエラーが表示される場合があります。https://broadcast.stats.live-video.net への POST は失敗します。

配信中/サブスクライブ中の場合は、配信/サブスクライブの試行に関連するエラーがコンソールに表示されます。

SDK は、エクスポネンシャルバックオフストラテジーを使用して内部で再接続を試みます。

**アクション**: デバイスの接続が回復するまでお待ちください。

## エラー状態
<a name="web-error-handling-errored-states"></a>

これらの状態は、アプリケーションのログ記録に使用し、特定の参加者のステージへの接続の問題を通知するメッセージをユーザーに表示することをお勧めします。

### 配信
<a name="errored-states-publish"></a>

SDK は配信が失敗したときに `ERRORED` を報告します。

```
stage.on(StageEvents.STAGE_PARTICIPANT_PUBLISH_STATE_CHANGED, (participantInfo, state) => {
  if (state === StageParticipantPublishState.ERRORED) {
      // Log and/or display message to user
  }
});
```

### Subscribe
<a name="errored-states-subscribe"></a>

SDK はサブスクライブが失敗したときに `ERRORED` を報告します。これは、ネットワークの状態が原因で発生する可能性がありますが、ステージがサブスクライバーのキャパシティに達した場合にも発生することがあります。

```
stage.on(StageEvents.STAGE_PARTICIPANT_SUBSCRIBE_STATE_CHANGED, (participantInfo, state) => {
  if (state === StageParticipantSubscribeState.ERRORED) {
    // Log and/or display message to user
  }
});
```