

# IVS Web 廣播 SDK 中的錯誤處理 \$1 即時串流
<a name="broadcast-web-error-handling"></a>

本節概述錯誤情況、Web 廣播 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>

當 SDK 遇到無法復原的問題時會報告 StageError，且通常需要應用程式介入和/或網路重新連線才能復原。

每個報告的 `StageError` 都包含代碼 (或 `StageErrorCode`)、訊息 (字串) 和類別 (`StageErrorCategory`)。每個錯誤都與一個基礎操作類別有關。

錯誤的操作類別取決於錯誤與下列哪項相關：舞台 (`JOIN_ERROR`) 連線、將媒體傳送至舞台 (`PUBLISH_ERROR`) 或從舞台 (`SUBSCRIBE_ERROR`) 接收傳入媒體串流。

`StageError` 的代碼屬性會報告特定問題：


| 名稱 | Code | 建議的動作 | 
| --- | --- | --- | 
| TOKEN\$1MALFORMED | 1 | 建立有效權杖，然後重試將舞台執行個體化。 | 
| TOKEN\$1EXPIRED | 2 | 建立未過期的權杖，然後重試將舞台執行個體化。 | 
| TIMEOUT | 3 | 此操作逾時。如果舞台存在且權杖是有效的，則此失敗可能是網路問題。若是如此，請等待裝置的連線復原。 | 
| FAILED (失敗) | 4 | 嘗試操作時遇到嚴重狀況。檢查錯誤詳細資訊。 如果舞台存在且權杖是有效的，則此失敗可能是網路問題。若是如此，請等待裝置的連線復原。 對於與網路穩定性相關的大多數故障，此 SDK 會在內部重試長達 30 秒，然後發出 FAILED 錯誤。 | 
| CANCELED | 5 | 檢查應用程式程式碼，並確保沒有重複的 `join`、`refreshStrategy` 或 `replaceStrategy` 調用，因為這可能會導致在操作完成之前啟動和取消重複的操作。 | 
| STAGE\$1AT\$1CAPACITY | 6 | 此錯誤表示舞台或您的帳戶達到容量上限。如果舞台已達到參與者數量上限，請重新整理策略，當舞台不再處於達到容量上限狀態時，再次嘗試操作。如果您的帳戶已達到並行訂閱或並行發布者配額限制，請透過 [AWS Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/)減少用量或請求增加配額。 | 
| CODEC\$1MISMATCH | 7 | 此舞台不支援編解碼器。檢查瀏覽器和平台的編解碼器支援。若是 IVS 即時串流，瀏覽器必須支援 H.264 影片編解碼器和 Opus 音訊編解碼器。 | 
| TOKEN\$1NOT\$1ALLOWED | 8 | 此權杖沒有該操作的許可。使用正確的許可重新建立權杖，然後再試一次。 | 
| STAGE\$1DELETED | 9 | 無；嘗試加入已刪除的舞台會觸發此錯誤。 | 
| PARTICIPANT\$1DISCONNECTED | 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 可能會失去與舞台伺服器的連線。您可能會在主控台中看到錯誤，因為 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
  }
});
```

### 訂閱
<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
  }
});
```