IVS Web 广播 SDK 中的错误处理 | 实时直播功能 - Amazon IVS

IVS Web 广播 SDK 中的错误处理 | 实时直播功能

本节概述错误条件、Web 广播 SDK 如何向应用程序报告错误条件,以及在遇到这些错误时应用程序应采取的措施。SDK 会向 StageEvents.ERROR 事件的侦听器报告错误:

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

暂存区错误

当 SDK 遇到无法恢复的问题时会报告 StageError,通常需要应用程序干预和/或网络重新连接才能恢复。

每个报告的 StageError 都有一个代码(或 StageErrorCode)、消息(字符串)和类别(StageErrorCategory)。每个都与一个底层操作类别相关。

错误的操作类别根据其是否与暂存区的连接(JOIN_ERROR)、向暂存区发送媒体(PUBLISH_ERROR)或接收来自暂存区的传入媒体流(SUBSCRIBE_ERROR)有关来确定。

StageError 的代码属性报告特定问题:

名称 代码 Recommended Action(建议的操作)

TOKEN_MALFORMED

1

创建一个有效的令牌,然后重试实例化暂存区。

TOKEN_EXPIRED

2

创建一个未过期的令牌,然后重试实例化暂存区。

TIMEOUT

3

操作已超时。如果暂存区存在且该令牌有效,则此失败很可能是网络问题。在这种情况下,等待设备连接恢复。

FAILED

4

尝试操作时遇到致命情况。查看错误详细信息。

如果暂存区存在且该令牌有效,则此失败很可能是网络问题。在这种情况下,等待设备连接恢复。

CANCELED

5

检查应用程序代码并确保没有重复的 joinrefreshStrategyreplaceStrategy 调用,这些调用可能导致在完成之前开始和取消重复的操作。

STAGE_AT_CAPACITY

6

当暂存区不再满容量时,请刷新策略,再次尝试该操作。

CODEC_MISMATCH

7

暂存区不支持该编解码器。检查浏览器和平台是否支持编解码器。对于 IVS 实时直播功能,浏览器必须支持视频的 H.264 编解码器和音频的 Opus 编解码器。

TOKEN_NOT_ALLOWED

8

令牌没有执行该操作的权限。使用正确的权限重新创建令牌,然后重试。

处理 StageError 示例

使用 StageError 代码确定错误是否由于令牌过期导致:

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

已加入时出现网络错误

如果设备的网络连接中断,SDK 可能会失去与暂存区服务器的连接。您可能会在控制台中看到错误,因为 SDK 无法再访问后端服务。向 https://broadcast.stats.live-video.net 执行 POST 操作会失败。

如果您正在发布和/或订阅,您将在控制台中看到与尝试发布/订阅相关的错误。

在内部,SDK 将尝试使用指数回退策略重新连接。

操作:等待设备连接恢复。

出错的状态

建议您使用这些状态进行应用程序日志记录,并向用户显示消息,提醒他们注意特定参与者与暂存区的连接问题。

Publish

当发布失败时,SDK 会报告 ERRORED

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

订阅

SDK 会在订阅失败时报告 ERRORED。这可能是由于网络条件或订阅者的某个阶段已满负荷而发生的情况。

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