實時音影片Web接入——異常處理

不同於一般的Web應用開發,實時音影片對網路品質的要求更高,過往對Web應用開發的經驗在實時音影片場景下是不夠的。下面我總結一些實際業務場景可能會遇到的問題,以及相應的處理方法。

接入API文檔中,可以將錯誤類型大致分為2類,回調和通知。

回調錯誤符合常規的Web開發習慣,理解上也沒有難度,這裡我主要介紹通知類型的錯誤。

α. 怎麼辦

1. 處理流程

2. 程式碼示例

// 下面程式碼的 client 是 client實例  // https://www.qcloudtrtc.com/trtc-web-sdk/docs/api/Client.html    // 異常監聽  client.on('error', error => {    // 業務側數據上報    let errorCode = error.getCode()    let errorCodeHex = `0x${errorCode.toString(16)}`    console.error('[trtc] client error observed: ' + error)    switch (errorCode) {      case 0x4001:        retryOrReload('websocket 初始化失敗', errorCodeHex)        break      case 0x4002:        retryOrReload('websocket 信令通道異常', errorCodeHex)        break      case 0x4003:      case 0x4005:        retryOrReload('音影片數據傳輸通道錯誤', errorCodeHex)        break      case 0x4004:        retryOrReload('進房失敗', errorCodeHex)        break      case 0x4041:        retryOrReload('媒體傳輸服務超時', errorCodeHex)        break      case 0x4042:        retryOrReload('遠端流訂閱超時', errorCodeHex)        break      case 0xffff:        retryOrReload('未知錯誤', errorCodeHex)        break      default:        retryOrReload(`錯誤程式碼 ${errorCode}(0x${errorCode.toString(16)})`, errorCodeHex)        break    }  })    // 重連邏輯  // 建議有一個重連的上限,例如 3 次,這裡只做重連操作  const retryMaxTimes = 3    function retryOrReload(msg, code) {      // 經過了若干次嘗試仍然無法重連成功      if ( retryTimes > retryMaxTimes) {          alert( `網路狀態異常(${code}),請您檢查網路連接刷新頁面嘗試重連。`)          return      }      // 重連邏輯,離開,再加入房間      client        .leave()        .then(() => {          client.join({... }).catch(e => {            retryOrReload(msg)          })        })        .catch(e => {          retryOrReload(msg)        })  }  

上面回答了怎麼辦問題。如果想了解背後的邏輯,可以往下看。

β. 為什麼

1. 錯誤的類型這麼多,為什麼最後只給用戶彈出一個網路狀態異常的提示?

用戶不是開發者,不必也無需了解這些背後的原因,你只需要告訴他結論,以及怎麼辦,就夠了。

2. 其他問題

可以評論留言