同一个用户可以同时加入多个房间,并同时在多个房间内推流、拉流、发送实时消息和接收消息回调。
本功能可以隔离多个房间的消息及回调,实现更灵活的连麦业务。ZEGO 推荐用于跨房间连麦和在线教育的超级小班场景。
主播 A 与主播 B 进行跨房间连麦,主播 A 可以通知房间 A 中所有观众登录主播 B 的房间进行拉流,主播 B 同样可以通知房间 B 中所有观众登录主播 A 的房间进行拉流。
老师进入大班房间推流,学生都登录大班房间拉流,同时登录小组房间与同组学生讨论和连麦。助教老师登录小组房间维持课堂秩序或解答学生问题。
在实现多房间功能之前,请确保:
以同一用户加入两个房间为例,整体实现流程如下:
具体功能的实现如下:
必须在初始化 SDK 之前,将房间模式 ZegoRoomMode 设置为多房间模式 “ZegoRoomModeMultiRoom”。
// 设置房间模式为多房间模式
SetRoomMode(ZegoRoomMode::ZegoRoomModeMultiRoom);
如果在没有开通多房间功能的情况下设置多房间模式,登录房间会失败报错,返回错误码为“62001016”。
调用 SetRoomConfig 接口设置允许观众创建房间以及用户状态更新回调,在房间创建之前设置有效,多房间模式下必须带上房间 ID。
bool audienceCreateRoom = true;
bool userStateUpdate = false;
SetRoomConfig(audienceCreateRoom, userStateUpdate, "roomid");
调用 SetRoomMaxUserCount 接口设置房间最大在线人数,在房间创建之前设置有效,多房间模式下必须传入房间 ID。
SetRoomMaxUserCount(100, "roomid");
调用 SetToken 接口设置房间的鉴权 Token,Token 的生成规则请参考 用户权限控制。
在 Token 快要过期的前 30s,会收到 OnTokenWillExpired 回调通知。重新生成 Token 后再调用 SetToken 接口设置。
std::string token = "create token";
SetToken(token.c_str(), "roomid");
在登录房间前,注册房间相关的接口。
// 当前对象实现 IRoomCallback 类
SetRoomCallback(this);
房间相关的所有回调接口都会带上房间 ID 参数,用于区分是哪个房间的回调。相关回调如下:
// 参数 pszRoomID 表示房间 ID
void OnLoginRoom(int errorCode, const char *pszRoomID, const ZegoStreamInfo *pStreamInfo, unsigned int streamCount);
// 参数 pszRoomID 表示房间 ID
void OnKickOut(int reason, const char *pszRoomID, const char* pszCustomReason="");
// 参数 pszRoomID 表示房间 ID
void OnDisconnect(int errorCode, const char *pszRoomID);
// 参数 pszRoomID 表示房间 ID
void OnTempBroken(int errorCode, const char *pszRoomID);
// 参数 pszRoomID 表示房间 ID
void OnReconnect(int errorCode, const char *pszRoomID);
传入房间 ID 等参数,调用 LoginRoom 接口登录房间。
LoginRoom("roomid", 1, "room_title");
传入房间 ID 等参数,调用 StartPublishingWithParams 接口在指定房间内推流。
ZegoPublishStreamParams params;
params.streamID = "streamid";
params.streamTitle = "title";
params.publishFlag = ZegoPublishFlag::ZEGO_JOIN_PUBLISH;
params.publishParams = "";
params.channelIndex = PublishChannelIndex::PUBLISH_CHN_MAIN;
params.roomID = "roomid";
StartPublishingWithParams(params);
多房间模式下,不支持 StartPublishing 和 StartPublishing2 接口,请使用 StartPublishingWithParams,必须指定关联的房间 ID。
传入房间 ID 等参数,调用 StartPlayingStreamWithParams 接口在指定房间内拉流。
ZegoPlayStreamParams params;
params.streamID = "streamid";
params.displayView = view; // display view
params.extraInfo = nullptr; // extra info
params.roomID = "roomid";
StartPlayingStreamWithParams(params);
多房间模式下,不支持 StartPlayingStream 和 StartPlayingStream2 接口,请使用 StartPlayingStreamWithParams,必须指定关联的房间 ID。
调用 SendRoomMessageEx 接口发送广播消息,房间其他用户通过 OnRecvRoomMessage 回调接收消息,可通过房间 ID 来区分是哪个房间发送的。
// 发送
SendRoomMessageEx(ZegoMessageType::Text, ZegoMessageCategory::Chat, "message", "roomid");
// 房间其他人收到消息,通过房间 ID 来区分是哪个房间发送的
void OnRecvRoomMessage(ROOM::ZegoRoomMessage *pMessageInfo, unsigned int messageCount, const char *pszRoomID);
弹幕消息,主要用于大并发的场景,发送一些非必须到达的消息。
调用 SendBigRoomMessage 接口发送弹幕消息,房间其他用户通过 OnRecvBigRoomMessage 回调接收消息,可通过房间 ID 来区分是哪个房间发送的。
// 发送
SendBigRoomMessage(ZegoMessageType::Text, ZegoMessageCategory::Chat, "message", "roomid");
// 房间其他人收到消息,通过房间 ID 来区分是哪个房间发送的
void OnRecvBigRoomMessage(ROOM::ZegoBigRoomMessage *pMessageInfo, unsigned int messageCount, const char *pszRoomID);
自定义信令,指定房间里的用户(可以指定多个),发送特定的消息。
调用 SendCustomCommand 接口发送自定义信令,房间其他用户通过 OnRecvCustomCommand 回调接收消息,可通过房间 ID 来区分是哪个房间发送的。
// 发送
std::vector<ROOM::ZegoUser> users;
...
SendCustomCommand(users.data(), user.size(), "message", "roomid");
// 接收
void OnRecvCustomCommand(const char *pszUserId, const char *pszUserName, const char *pszContent, const char *pszRoomID);
调用 SetRoomExtraInfo 接口发送房间附加信息,房间其他用户通过 OnRoomExtraInfoUpdated 回调接收消息,可通过房间 ID 来区分是哪个房间发送的。
// 发送,一个房间内只允许 1 个 key
SetRoomExtraInfo("key", "value", "roomid");
// 接收,通过 SetRoomExtraInfoCallback(IRoomExtraInfoCallback* pCB) 注册回调
void OnRoomExtraInfoUpdated(const char *pszRoomID, const ROOM::ZegoRoomExtraInfo *pExtraInfoList, unsigned int extraInfoListCount);
发送实时消息的大小和频率限制可参考 限制说明。
传入房间 ID ,调用 LogoutRoom 接口退出房间。
LogoutRoom("roomid");
方法 | 描述 |
---|---|
SetRoomMode | 设置房间模式 |
LoginRoom | 登录房间 |
LogoutRoom | 退出房间 |
SetRoomCallback | 设置直播房间相关信息通知的回调 |
SetRoomConfig | 设置房间配置信息 |
SetToken | 设置房间的鉴权 token |
SetRoomMaxUserCount | 设置房间最大在线人数 |
SendCustomCommand | 发送自定义信令 |
SetIMCallback | 设置 IM 信息通知的回调对象 |
SendRoomMessageEx | 发送房间消息 |
SendBigRoomMessage | 发送不可靠信道消息 |
StartPlayingStreamWithParams | 播放多媒体流 |
StartPublishingWithParams | 开始直播 |
SetRoomExtraInfoCallback | 设置 RoomExtraInfo 通知的回调 |
SetRoomExtraInfo | 更新房间属性 登录房间成功后使用 |
在没有开通多房间功能的情况下设置了多房间模式,登录房间会失败,返回错误码 62001016。
同时登录的房间数超过最大房间个数后会返回错误码 52005022。目前默认最多同时加入 5 个房间,如有更多需求,请联系 ZEGO 技术支持提供扩展能力。
联系我们
文档反馈