跳转到主要内容
会议 SDK 抛出的错误是 SMeetingError,继承 Error,额外带这些字段: toString() 输出 "{code}: {detail}"。
自 1.1.0 起错误码按 SMeeting 统一错误码表调整(208 + 统一码表低 3 位,与 Swift 等端同号),报错文案改为英文。 1.0.0 的旧码与新码的对照见更新日志。detail 是给开发者和日志看的,给终端用户的提示请按 code / baseCode 自行映射,不要直接展示 detail。

错误码是怎么拼出来的

  • SDK 内部错误:低 3 位语义码加平台前缀拼成 6 位数。 HarmonyOS 的会议前缀是 208,所以内部错误码形如 208001、208011、208356。
  • 业务后端透传的错误码:≥ 1000 时原样保留,文案语言随 SMeetingEngine.setLanguage 返回中文或英文。
  • HTTP 状态码不会拼进错误码(1.1.0 起):HTTP 非 200 一律为 208007,状态在 httpStatus; 后端返回 < 1000 的异常码(如 -1)也报 208007。1.0.0 会出 208404、208200、207999 这类码。
注意会议与 RTC 用两套前缀:RTC 是 108、会议是 208 (各端都是这个规则,首位 1 表示 RTC、2 表示会议业务)。 所以看到 208xxx 就知道是会议层的错,108xxx 是底层 RTC 的错。调用会议接口时两种都可能收到 —— 会议层的操作最终会落到 RTC 层。

错误清单

unauthorized(208004)是会控接口最常见的错误。所有 admin* 方法都要求 主持人或联席主持人身份 —— UI 上应该按 Role 提前隐藏 / 禁用按钮, 而不是等调用失败再提示。

推荐的处理方式

JSON.stringify(new Error()) 的结果是 {}。ArkTS 里直接把错误对象序列化进日志会得到空对象。排障时请显式取 code / detail。

入会失败还有一条独立通路

enterRoom() 抛错只覆盖”请求阶段就失败”。入会请求成功、但后续被服务端拒绝 (比如会议已锁定、被移入等候室)走的是事件:
所以入会的错误处理要同时写 try/catch 和 onRoomJoinFailed,只写一边会漏。

底层 RTC 错误

会议 SDK 内部用的是 SRTC,所以媒体相关的失败可能抛出 SRTCError(108xxx)。 采集 / 权限错误原样透传、不由会议层重新包装,常见的有 cameraPermissionDenied(108231)、 micPermissionDenied(108251)、screenShareDenied(108039)、deviceNotFound(108021)、 captureError(108018),以及 codecNotSupported、transportNotReady。 1.1.0 起 smeeting 直接转出 SRTCError / SRTCErrorKind,只依赖 smeeting 的业务代码也能 instanceof SRTCError。 完整清单见 SRTC 错误码。
H264 不支持时不报错,而是静默退回 VP8。@ohos/webrtc 的 H264 / H265 纯硬编、没有软编兜底。设备不支持时 SDK 会退回默认编码, 不抛异常 —— 表现是本机有画面但与其它端互通不上。自测要核对实际协商到的编码,别以”看到画面”为准。方法见 SRTC 的通话质量。

相关阅读