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 |
检查应用程序代码并确保没有重复的 |
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 } });