跳到主要内容

基本操作

以下示例中的 rtcClient 实例是由 RTCLib 初始化时获取。详见 RTC 初始化

加入房间

  1. RTCLib 初始化后,可获取到 RTC 客户端实例。调用 joinRTCRoom 方法加入 RTC 房间。

    以下示例中 rtcClient 表示 RTC 客户端实例。加入房间成功后,会返回 RCRTCRoom 房间实例、房间内其他用户 ID,以及房间内已发布的资源。

    /**
    * 加入普通音视频房间
    * @param roomId 房间 Id
    * @returns data.room 当前加入的房间实例
    * @returns data.userIds 当前房间内的其他用户 id
    * @returns data.streams 当前房间内的其他用户发布的资源
    */
    const { code, data } = await rtcClient.joinRTCRoom('roomId')

    // 若加入失败,则 data 值为 undefined
    if (code !== RCRTCCode.SUCCESS) {
    console.log('join living room failed:', code)
    return
    }

    const { room, userIds, streams: RCRemoteStreams } = data
  2. 获取房间实例后,可以注册房间事件监听器。重复注册时,仅最后一次注册有效。registerRoomEventListener

    // 注册房间事件监听器,重复注册时,仅最后一次注册有效
    room.registerRoomEventListener({
    /**
    * 本端被踢出房间时触发
    * @description 被踢出房间可能是由于服务端超出一定时间未能收到 rtcPing 消息,所以认为己方离线。
    * 另一种可能是己方 rtcPing 失败次数超出上限,故而主动断线
    * @param byServer
    * 当值为 false 时,说明本端 rtcPing 超时
    * 当值为 true 时,说明本端收到被踢出房间通知
    */
    onKickOff (byServer: boolean) {
    // 被踢出房间时,将不能继续发布资源、订阅资源,业务层可去掉远端资源的 UI 展示或重新加入房间
    },
    /**
    * 接收到房间信令时回调,用户可通过房间实例的 `sendMessage(name, content)` 接口发送信令
    * @param name 信令名
    * @param content 信令内容
    * @param senderUserId 发送者 Id
    * @param messageUId 消息唯一标识
    */
    onMessageReceive (name: string, content: any, senderUserId: string, messageUId: string) {
    },
    /**
    * 监听房间属性变更通知
    * @param name
    * @param content
    */
    onRoomAttributeChange (name: string, content: string) {
    },
    /**
    * 发布者禁用/启用音频
    * @param stream RCRemoteStream 类实例
    */
    onAudioMuteChange (stream: RCRemoteStream) {
    },
    /**
    * 发布者禁用/启用视频
    * @param stream RCRemoteStream 类实例对象
    */
    onVideoMuteChange (stream: RCRemoteStream) {
    },
    /**
    * 房间内其他用户新发布资源时触发
    * 如需获取加入房间之前房间内某个用户发布的资源列表,可使用 room.getRemoteStreamsByUserId('userId') 获取
    * @param streams 新发布的资源列表,一组 RCRemoteStream 实例
    */
    onStreamPublish (streams: RCRemoteStream[]) {
    // 按业务需求选择需要订阅资源,通过 room.subscribe 接口进行订阅
    const { code } = await room.subscribe(streams)
    if (code !== RCRTCCode.SUCCESS) {
    console.log('资源订阅失败 ->', code)
    }
    },
    /**
    * 房间用户取消发布资源
    * @param streams 被取消发布的资源列表
    * @description 当资源被取消发布时,SDK 内部会取消对相关资源的订阅,业务层仅需处理 UI 展示
    */
    onStreamUnpublish (streams: RCRemoteStream[]) {
    },
    /**
    * 人员加入
    * @param userIds 加入的人员 id 列表
    */
    onUserJoin (userIds: string[]) {
    },
    /**
    * 人员退出
    * @param userIds
    */
    onUserLeave (userIds: string[]) {
    }
    })
  3. 加入房间后,可能会返回房间内已经存在其他参会者发布的资源。可以通过 subscribe 接口拉取这些资源。

    const { code } = await room.subscribe(streams)

    if (code !== RCRTCCode.SUCCESS) {
    console.log(`资源订阅失败 -> code: ${code}`)
    }

获取房间数据

加入房间成功后可获取房间实例。可通过房间实例获取房间数据。

获取房间 ID

获取房间的 Room ID。getRoomId

// 获取房间 Id
const roomId: string = room.getRoomId()

获取 Session ID

获取房间的 Session ID。重新加入房间时,该 ID 会重置。getSessionId

// 获取房间的 sessionId,重新加入房间时,该 Id 会重置
const sessionId: string = room.getSessionId()

获取远端用户列表

获取房间中已存在的远端用户列表,不包含本端 User ID。getRemoteUserIds

// 获取房间中已存在的远端用户列表,不包含本端 userId
const userIds: string[] = room.getRemoteUserIds()

获取远端资源

获取远端发布的所有资源列表,或者通过指定 User ID 获取该用户在房间内发布的资源。

getRemoteStreams

getRemoteStreamsByUserId

// 获取远端发布的所有资源列表 streams
const remoteStreams: RCRemoteStream[] = room.getRemoteStreams()

// 根据 userId 获取此用户在房间内发布的资源列表
const remoteStreams: RCRemoteStream[] = room.getRemoteStreamsByUserId('some-user-id')

房间是否被销毁

isDestroyed

const isDestroyed = room.isDestroyed()

离开房间

leaveRoom

// room 为加房间返回的 data.room 实例
await rtcClient.leaveRoom(room)