实时音视频 SPARKRTC-加入多频道(跨房):实现过程

时间:2024-01-17 17:18:11

实现过程

  1. 加入房间

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

  2. 创建跨房连接

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

    示例代码如下:

    //创建跨房引擎,room id具有唯一性,不可重复,设置引擎代理
    HWRtcConnection *connection = [rtcEngine createConnection:@”room id”];
    connection.delegate = self;
  3. 调用跨房连接的joinRoom加入跨房房间

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

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

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

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

    示例代码如下:

    //创建HWRtcJoinParam对象
    HWRtcJoinParam  *joinRoomParam = [[HWRtcJoinParam alloc] init];
    joinRoomParam.autoSubscribeAudio = YES;
    joinRoomParam.autoSubscribeVideo = YES;
    joinRoomParam.userId = "userId";
    joinRoomParam.userName = "userName";
    joinRoomParam.authorization = authorization; //authorization:鉴权信息,具体生成方法请参见接入鉴权。与加入房间的authorization相同
    joinRoomParam.ctime = time;//与加入房间的time相同
    joinRoomParam.roomId = "roomId";
    joinRoomParam.userRole = HWRtcRolePlayer;
    joinRoomParam.sfuType = 0;
    joinRoomParam.scenario = 0;
    //通过跨房引擎进入房间
    [connection joinRoom:joinRoomParam];
  4. 收远端用户的视频流

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

    示例代码如下:

    //远端用户加入房间后会收到跨房回调
    - (void)connection:(HWRtcConnection *)connection
          onRemoteUserOnline:(NSString * _Nonnull)userId
              userName:(NSString * _Nonnull)userName
    {
        //创建视频画布对象
        HWRtcVideoCanvas *canvas = [[HWRtcVideoCanvas alloc] init];
        canvas.uid = @”remote userId”;
        canvas.view = [[HWRtcView alloc] initWitFrame:(0,0,100,100)];
        //设置远端窗口并开启收流
        [connection startRemoteStreamView:canvas streamType:HWRtcStreamTypeHD disableAdjustRes:YES];
    }
  5. 退出跨房房间

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

    示例代码如下:

    //退出跨房房间
    [connection leaveRoom];
support.huaweicloud.com/bestpractice-rtc/rtc_08_0059.html