RTCEngine 在同一初始化周期内同时加入多个频道。每次 join(...) 返回一个 RTCChannel 句柄;本地摄像头、麦克风和屏幕采集由 Engine 共享,各频道的信令、流媒体会话、成员、远端轨道和统计相互独立。
对象与作用域
:::note
第一条
join 是“默认频道”,不是第一个完成 onJoinSucceed 的频道。默认频道离开后,下一次新建的频道可以占用默认槽。多频道业务应始终保存并使用每次 join 返回的 RTCChannel,不要依赖扁平接口推断目标频道。
:::
接入流程
1. 创建 Engine
多频道只需要一个RTCEngine:
2. 启动共享采集
采集和频道发布相互独立。以下 Track 在 Engine 内共享,只启动一次:RTCResultListener.onSuccess() 后再发布。仅设置本地音频帧监听器不会打开麦克风;需要 PCM 时仍须调用 micTrack.startCapture(...)。
3. 为每个频道创建回调并加入
首次RTCClientEvent 必须通过本次 join(...) 传入,因为加入成功或失败事件可能紧随其后发生。RTCChannel.setRtcClientEvent(...) 只用于入会成功后替换或解绑监听器。
join(...) 返回后才派发 onJoinSucceed(...)。非空句柄只代表请求已被接受;在收到成功回调前调用发布、订阅等频道操作会被 CHANNEL_NOT_START 阻断。
4. 按频道订阅与渲染
远端轨道必须从产生事件的同一个RTCChannel 获取和订阅:
uid / trackId 到频道 B 的句柄上查询或订阅。即使字符串相同,两条频道 Session 中的成员、Track 和媒体状态也互不共享。
共享采集与频道发布
采集、发布和静音是三个不同层次:
因此,频道 A 取消发布不会影响频道 B;但调用
micTrack.stopCapture() 或 cameraTrack.stopCapture() 会关闭共享数据源,所有仍在发布该 Track 的频道都将失去采集数据。
离开与释放
离开单个频道时调用对应句柄,不影响其他频道:releaseSDK() 会兜底释放当前初始化周期中的全部频道和共享资源。需要再次使用时重新调用 initSDK()。
失败与错误处理
join(...)返回null:请求在频道 Session 创建前被拒绝,仍以本次onJoinFailed(...)的状态码为准。- 重复加入同一频道:
onJoinFailed(channel, RtcChannelErrorCode.CHANNEL_ALREADY_EXISTS)(102208),已有频道和监听器不受影响。 - SDK 未初始化或已释放:
join(...)同步抛出SdkNotInitializedException。 - 入会后的异步操作失败:通过各操作的
RTCResultListener.onFail(code)返回。 - Engine 阻断操作或全局错误:通过
RTCEngineEvent.onError(channelId, errorCode, message)返回。 - 频道断开与重连:通过带
channel参数的onDisconnected、onReconnecting、onReconnected区分。
102xxx 分域常量见 错误码。完整频道接口见 RTCChannel。