发布和订阅
本部分介绍能够实现向房间发布媒体流或取消发布,订阅媒体流或停止订阅等操作。
发布本地 Track
发布 Track 前,需要对 Track 进行配置和创建,详情请见音视频采集。
创建好 Track 后即可将该 Track 通过 publish 方法向房间内进行发布。
await mClient.publish(tracks);
发布 Track 成功后,远端用户在监听 user-published 后会收到如下事件通知:
mClient.on('user-published', function(userID, track){
console.log('user-published', userID, track)
});
取消发布本地 Track
调用 unpublish 取消发布本地媒体流。
await mClient.unpublish(tracks);
取消发布成功后,远端用户在监听 user-unpublished 后会收到如下事件通知:
mClient.on('user-unpublished', function(userID, track) {
console.log('user-unpublished', userID, track);
});
订阅远端 Track
当收到远端用户发布的信息后,可以调用 subscribe 方法订阅该 track。
mClient.on('user-published', async function(userID, track) {
const subscribedTrack = await mClient.subscribe(track)
});
与本地 track 相同,成功订阅远端 track 后,即可通过 play 方法播放。
取消订阅远端 Track
调用 unsubscribe 方法取消订阅远端 track。
await mClient.unsubscribe(tracks);
自动订阅逻辑
/**
* 用生成的roomToken加入房间
*/
async function joinRoom(roomToken) {
// 创建QNRTCClient对象
const client = QNRTC.createClient();
// 需要先监听对应事件再加入房间
autoSubscribe(client);
// 传入RoomToken,加入房间
await client.join(roomToken);
console.log("joinRoom success!");
}
/**
* 订阅远端用户发布的音视频轨道
*/
async function subscribe(client, tracks) {
// 传入远端用户发布的音视频轨道执行订阅操作。
// 订阅成功后异步返回订阅成功的远端音视频轨道
const remoteTracks = await client.subscribe(tracks);
// 选择页面上的一个元素作为父元素,播放远端的音视频轨
const remoteElement = document.getElementById("remotetracks");
// 遍历返回的远端 Track,调用 play 方法完成在页面上的播放
for (const remoteTrack of [...remoteTracks.videoTracks, ...remoteTracks.audioTracks]) {
remoteTrack.play(remoteElement);
}
}
// 这里的参数 client 是指刚刚初始化的 QNRTCClient 对象, 同上
function autoSubscribe(client) {
// 添加事件监听,当房间中出现新的 Track 时就会触发,参数是 trackInfo 列表
client.on("user-published", (userId,tracks) => {
console.log("user-published!", userId,tracks);
subscribe(client, tracks)
.then(() => console.log("subscribe success!"))
.catch(e => console.error("subscribe error", e));
});
}
文档反馈
(如有产品使用问题,请 提交工单)