2024/09/19 14:52:02
加入多频道
声网 SDK 支持用户同时加入多个频道,同一时间可以在多个频道中接收和发布音视频流。
技术原理
SDK 提供 RtcConnection 对象 和 IRtcEngineEx 类实现多频道功能。IRtcEngineEx 提供适用于指定 RtcConnection 对象的方法。
RtcConnection 对象包含用于识别连接的如下信息:
- 频道名称
 - 本地用户的用户 ID
 
你可以创建多个 RtcConnection 对象,并为每个对象设置不同的频道名称和用户 ID。
如果要加入多个频道,多次调用 IRtcEngineEx 类中的 joinChannelEx 并设置不同的 RtcConnection 对象。加入多频道时请注意:
- 每个 
RtcConnection对象的用户 ID 是唯一的,且不为0。 - 可以为 
joinChannelEx中的RtcConnection对象配置发布和订阅选项。 - 每个 
RtcConnection可以独立发布多路音频流和一路视频流。 - 你可以通过每个具体回调中的 
connection参数得知该回调对应哪个频道的事件。 
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
实现方法
为实现多频道功能,你需要对每个频道进行如下设置:
- 
调用
joinChannelEx,定义RtcConnection并使用随机的用户 ID 加入频道。JavaScriptlet token2 = "token2";
const channelId2 = "channel2";
let uid2 = 321;
// 加入多频道
rtcEngine.joinChannelEx(
token2,
// RtcConnection
{
channelId: channelId2,
localUid: uid2,
},
// ChannelMediaOptions
{
clientRoleType: ClientRoleType.ClientRoleBroadcaster,
publishMicrophoneTrack: false,
publishCameraTrack: false,
autoSubscribeAudio: false,
autoSubscribeVideo: false,
publishSecondaryCameraTrack: true,
}
); - 
监听
onUserJoined回调并设置远端视频。JavaScriptconst EventHandles = {
// 监听远端用户加入频道事件
onUserJoined: ({ channelId, localUid }, remoteUid, elapsed) => {
console.log('远端用户 ' + remoteUid + ' 已加入');
// 远端用户加入频道后,设置远端视频窗口
rtcEngine.setupRemoteVideoEx(
{
sourceType: VideoSourceType.VideoSourceRemote,
uid: remoteUid,
view: remoteVideoContainer,
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
},
{
channelId: channelId2,
localUid: uid2,
},
);
},
// 其他事件回调
};
// 注册事件回调
rtcEngine.registerEventHandler(EventHandles); 
参考信息
API 参考
示例项目
声网提供了加入多频道的示例项目供你参考。你可以前往下载或查看其中的源代码。