更新时间:2024-01-17 GMT+08:00
分享

加入多频道(跨房)

功能描述

跨房间连麦,指主播的媒体流可以同时转发进多个(目前最多支持四个)房间频道,实现主播跨频道与其他主播实时互动的场景。房间中的所有主播可以看见彼此,房间中的观众可以看到所有主播。

注意事项

  • 同一时间最多只能创建4个连接对象,每个连接对象对应的房间ID必须互不相同。
  • 如果使用connection对象加入房间,则加入房间的房间ID不能和已创建连接对象对应的房间ID相同。
  • 同一时间只能以一个JOINER角色加入某一个房间。如果本端在其他房间里的角色是HWRtcRoleJoiner,则需要调用该房间的ChangeUserRole方法将本端在该房间的角色切换为HWRtcRolePlayer后才能以HWRtcRoleJoiner跨入其他房间。如果本端用户是以HWRtcRolePlayer角色加入此跨房房间,则需要调用跨房连接的ChangeUserRole方法将本端的角色切换为HWRtcRoleJoiner后才能发送音频流和视频流。

接口调用流程

实现过程

  1. 加入房间

    参考接口调用流程中加入房间的时序图步骤加入主房间。

  2. 创建跨房连接

    当收到远端用户加入房间后会触发IHRTCConnectionEventHandler:onRemoteUserOnline跨房回调,在该回调内用对应远端用户的跨房连接调用startRemoteStreamView方法设置远端窗口并开启收流。

    示例代码如下:

    //创建跨房引擎,room id具有唯一性,不可重复,设置跨房引擎回调
    //跨房引擎回调类HwRtcConnectionEventHandler需要继承IHRTCConnectionEventHandler,并重载其回调方法
    HwRtcConnectionEventHandler* eventHandler = new HwRtcConnectionEventHandler();
    IHRTCConnection* connection = m_pRtcEngine->createConnection(roomId, (IHRTCConnectionEventHandler*)eventHandler)
  3. 调用跨房连接的joinRoom加入跨房房间

    调用跨房连接的joinRoom接口加入房间,其中HRTCJoinParam的authorization鉴权签名字符串需要填入正确的计算值,计算方法请参考接入鉴权

    如果本端需要发送音频或者视频流给跨房房间里的远端用户,则用户的role参数需要设为HRTC_ROLE_TYPE_JOINER,否则可以设为HRTC_ROLE_TYPE_PLAYER,只收流不发流。

    注意:不能同时以JOINER角色加入多个房间。

    加入跨房房间成功后会收到跨房回调指针的onJoinRoomSuccess通知,加入房间失败会收到跨房回调指针的onJoinRoomFailure通知。

    示例代码如下:

    //创建HRTCJoinParam对象
    HRTCJoinParam joinRoomParam;
    memset(&joinRoomParam, 0, sizeof(HRTCJoinParam));
    joinRoomParam.autoSubscribeAudio = true;
    joinRoomParam.autoSubscribeVideo = true;
    joinRoomParam.userId = "userId";
    joinRoomParam.userName = "userName";
    joinRoomParam.authorization = authorization; //authorization:鉴权信息,具体生成方法请参见接入鉴权。与加入房间的authorization相同
    joinRoomParam.ctime = time;//与加入房间的time相同
    joinRoomParam.roomId = "roomId";
    joinRoomParam.userRole = HRTC_ROLE_TYPE_PLAYER;
    joinRoomParam.sfuType = HRTC_SFU_TYPE_PUBLIC_NETWORK;
    joinRoomParam.scenario = HRTC_REMOTE_AUDIO_SUBSCRIBED;
    //通过跨房引擎进入房间
    connection->joinRoom(joinRoomParam);
  4. 收远端用户的视频流

    收到远端用户加入房间后会收到跨房回调onRemoteUserOnline,可以调用该远端用户对应的跨房连接的startRemoteStreamView设置远端窗口并开启收流。

    示例代码如下:

    //远端用户加入房间后会收到跨房回调
    void HwRtcConnectionEventHandler::onRemoteUserOnline(IHRTCConnection* conn, const char* userId, const char* userName) {
        //设置远端窗口并开启收流, viewHandle为显示远端用户视频的窗口句柄
        connection->startRemoteStreamView(userId, viewHandle, HRTC_STREAM_TYPE_HD, true);
    }
  5. 退出跨房房间

    跨房结束后,调用跨房连接的leaveRoom接口跨房房间。

    示例代码如下:

    //退出跨房房间
    connection->leaveRoom();

相关文档