基本操作
加入房间
-
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 -
获取房间实例后,可以注册房间事件监听器。重复注册时,仅最后一次注册有效。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[]) {
}
}) -
加入房间后,可能会返回房间内已经存在其他参会者发布的资源。可以通过
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 获取该用户在房间内发布的资源。
// 获取远端发布的所有资源列表 streams
const remoteStreams: RCRemoteStream[] = room.getRemoteStreams()
// 根据 userId 获取此用户在房间内发布的资源列表
const remoteStreams: RCRemoteStream[] = room.getRemoteStreamsByUserId('some-user-id')
房间是否被销毁
const isDestroyed = room.isDestroyed()
离开房间
// room 为加房间返回的 data.room 实例
await rtcClient.leaveRoom(room)