跳到主要内容

基本操作

提示

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

加入房间

加入房间需要调用 joinRTCRoom 接口。调用成功后将返回:

  • RCRTCRoom 房间实例
  • 当前房间内的用户 ID 列表
  • 已发布的远端资源

接口

typescript
 rtcClient.joinRTCRoom(roomId)

参数说明

参数类型必填说明
roomIdstring房间 ID

示例代码

typescript
/**
* 加入普通音视频房间
* @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 room failed:', code)
return
}

const { room, userIds, streams: RCRemoteStreams } = data

注册房间事件监听器

成功加入房间后,可通过房间实例 room 注册事件监听器 registerRoomEventListener,重复注册时,仅最后一次注册有效。

示例代码

typescript
// 注册房间事件监听器,重复注册时,仅最后一次注册有效
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[]) {
}
})

订阅远端资源

加入房间后如需获取其他用户发布的资源,可调用 subscribe 接口进行订阅。

接口

typescript
room.subscribe(streams)

参数说明

参数类型必填说明
streamsRCRemoteStream[]ISubParams[]

示例代码

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

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

获取房间数据

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

获取房间 ID

调用 getRoomId 方法获取房间的 Room ID。

示例代码

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

获取 Session ID

调用 getSessionId 方法获取房间的 Session ID。

提示

重新加入房间时,该 ID 会重置。

示例代码

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

获取远端用户列表

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

示例代码

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

获取远端资源

  • 调用 getRemoteStreams 方法获取房间内所有已发布的远端资源

    示例代码

    typescript
    const streams: RCRTCStream[] = room.getRemoteStreams()
    streams.forEach(stream => {})
  • 调用 getRemoteStreamsByUserId 方法指定用户 ID 获取该用户发布的资源列表

    示例代码

    typescript
    const streams: RCRTCStream[] = room.getRemoteStreamsByUserId('userId')
    streams.forEach(stream => {})

房间是否被销毁

通过 isDestroyed 方法判断房间是否被销毁。

示例代码

typescript
const isDestroyed = room.isDestroyed()

离开房间

调用 leaveRoom 方法离开房间。

示例代码

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