Skip to main content
Android SRTC SDK 支持一个 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(...) 只用于入会成功后替换或解绑监听器。
SDK 保证 join(...) 返回后才派发 onJoinSucceed(...)。非空句柄只代表请求已被接受;在收到成功回调前调用发布、订阅等频道操作会被 CHANNEL_NOT_START 阻断。

4. 按频道订阅与渲染

远端轨道必须从产生事件的同一个 RTCChannel 获取和订阅:
不要拿频道 A 的 uid / trackId 到频道 B 的句柄上查询或订阅。即使字符串相同,两条频道 Session 中的成员、Track 和媒体状态也互不共享。

共享采集与频道发布

采集、发布和静音是三个不同层次: 因此,频道 A 取消发布不会影响频道 B;但调用 micTrack.stopCapture()cameraTrack.stopCapture() 会关闭共享数据源,所有仍在发布该 Track 的频道都将失去采集数据。

离开与释放

离开单个频道时调用对应句柄,不影响其他频道:
全部结束时,先逐频道停止发布和离会,再关闭共享采集,最后释放 Engine:
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 参数的 onDisconnectedonReconnectingonReconnected 区分。
错误码归属和 102xxx 分域常量见 错误码。完整频道接口见 RTCChannel