创建 Live 带看实例
带看配置选项,包含以下属性:
// 基础用法
const live = new Live({
url: 'wss://example.com/live',
getTicket: async () => {
const response = await fetch('/api/get-ticket')
return response.json().ticket
},
getVoiceSign: async (params) => {
const response = await fetch('/api/get-voice-sign', {
method: 'POST',
body: JSON.stringify(params)
})
return response.json()
},
useBuiltInRTC: true
})
// 使用自定义 RTC
const customRTC = new MyCustomRTC()
const live = new Live({
rtc: customRTC,
url: 'wss://example.com/live',
getTicket: async () => 'ticket'
})
获取当前 live 实例使用的 RTC 实例
RTC 协议实例,用于语音通信
获取当前 live 实例使用的 jsBridge 实例
JSBridge 协议实例,用于与原生 App 通信
获取带看的配置选项(只读)
冻结的配置选项对象
获取当前所有帧数据的快照
当前帧数据的部分快照对象
获取当前WebSocket连接的URL。(注意:这个是WebSocket连接的完整连接,附带一些query参数)。
WebSocket 连接 URL,如果未设置则返回 undefined
处理帧数据变化(内部方法) 当本地或远程帧数据发生变化时,会触发此方法进行同步
Yjs Map 事件对象
自定义广播消息
向指定用户发送自定义消息,并等待响应。如果设置了超时时间, 超时后会拒绝 Promise。
广播请求的数据对象
目标用户ID,可以是单个字符串或字符串数组,空数组表示广播给所有人
超时时间(毫秒),0 表示不超时
Promise
// 发送自定义消息并等待响应
try {
const response = await live.broadcast(
{ type: 'ping', data: 'hello' },
['user-id-1', 'user-id-2'],
5000 // 5秒超时
)
console.log('收到响应:', response)
} catch (error) {
console.error('广播失败或超时:', error)
}
// 广播给所有人
const response = await live.broadcast(
{ type: 'announcement', message: '大家好' },
[],
0 // 不超时
)
// 监听广播消息
live.on('broadcast', (data, frontRequestId) => {
console.log('收到广播:', data)
// 可以在这里响应广播
})
连接带看房间
建立 WebSocket 连接并加入带看房间。如果配置中已提供 url 和 getTicket, 可以在创建实例后自动连接,也可以手动调用此方法。
连接选项,包含以下属性:
连接结果,成功返回 true,失败返回 Error
// 在创建实例时已配置 url 和 getTicket
const live = new Live({
url: 'wss://example.com/live',
getTicket: async () => 'ticket'
})
// 手动连接
const result = await live.connect()
if (result === true) {
console.log('连接成功')
} else {
console.error('连接失败:', result.message)
}
// 在连接时提供配置
await live.connect({
url: 'wss://example.com/live',
getTicket: async () => {
const res = await fetch('/api/ticket')
return res.json().ticket
},
rtcMicStatus: MicroStatus.OPEN
})
// 强制重连
await live.connect({ force: true })
触发事件
预设的监听事件名称
事件类型
Rest...data: Parameters<EventType<KeyframesSnapshot>[K]>触发事件的数据
canceled 是否被触发取消
控制其他用户的麦克风状态
开启或关闭指定用户的麦克风。只有拥有 control_other_micro 权限的用户才能操作。
麦克风状态(MicroStatus.OPEN 或 MicroStatus.CLOSE)
目标用户ID,可以是单个字符串或字符串数组
Promise
根据键值获取对应的帧数据
帧数据的键值
对应键的帧数据,如果不存在则返回 undefined
判断是否注册了事件
事件类型
解除事件
如果 name 不传的话解除对应所有事件 如果 name, callback 不传的话解除所有name的所有事件
预设的监听事件名称
Optionalname: K事件类型
Optionalcallback: ((...args: Parameters<EventType<KeyframesSnapshot>[K]>) => ReturnType<EventType<KeyframesSnapshot>[K]>)事件回调函数
Rest...args: Parameters<EventType<KeyframesSnapshot>[K]>注册事件
预设的监听事件名称
事件类型
事件回调函数
Rest...args: Parameters<EventType<KeyframesSnapshot>[K]>Optionalonce: boolean是否只执行一次
解除事件
注册事件(是否只执行一次)
预设的监听事件名称
事件类型
事件回调函数
Rest...args: Parameters<EventType<KeyframesSnapshot>[K]>解除事件
发送帧数据(需要能够被序列化)
将帧数据同步到其他用户。帧数据必须是可序列化的 JSON 对象。 只有在连接状态为 OPEN 时才能发送。
帧数据键值
帧数据本体,必须可序列化
发送结果,成功返回 true,连接未打开返回 false,其他错误返回 Error
设置自己的用户信息
更新当前用户在房间中的信息,如昵称、头像等。
用户信息的部分更新对象
Promise
更新带看状态
发送内置消息来更新用户或房间的状态。只有在连接状态为 OPEN 时才能发送。
事件类型(用户变化或房间变化)
操作类型(如用户信息、麦克风状态、房间关闭等)
状态数据对象
OptionaltoUserIds: string | string[]目标用户ID(可选,不传则广播给所有人)
是否发送成功,连接未打开或发送失败返回 false
// 更新用户信息
await live.updateStatus(
BuiltinEventType.UserChange,
BuiltinActionType.UserInfo,
{ nickname: '新昵称', avatar: 'https://example.com/avatar.jpg' }
)
// 关闭房间(仅管理员可用)
await live.updateStatus(
BuiltinEventType.RoomChange,
BuiltinActionType.RoomClose,
{}
)
// 向特定用户发送状态更新
await live.updateStatus(
BuiltinEventType.UserChange,
BuiltinActionType.UserMicroStatus,
{ status: MicroStatus.CLOSE },
['user-id-1', 'user-id-2']
)
Live 带看实例类
这是带看功能的核心类,负责管理 WebSocket 连接、帧数据同步、RTC 语音通信等功能。 通过 Yjs 实现帧数据的协同编辑和同步。
Example