订阅/取消订阅远端的用户
当一个房间中有自已以外的用户发布后,就可以对这些用户发起订阅了。
如何感知这些用户是否发布,是发起订阅操作的第一步
示例代码中的
myRoom
是指实例化并且已经加入房间后的房间 Session 对象,参见 加入房间
实时检测用户发布状态
这个部分在我们之前的的 Demo 中详细介绍过,这里再简单说明下。直接访问房间 Session 对象的 users
可以拿到当前的用户列表,每个用户都会有 published
属性用于标记这个用户是否已经发布。每当有其他用户的发布状态有变动,SDK 都会通过事件
来进行通知。基于以上 2 点,就可以实时检测用户的发布状态。
// 房间当前的用户列表
const users = myRoom.users;
for (const user of users) {
// 每个用户当前是否发布
console.log("user", user.userId, "published?", user.published);
}
myRoom.on("user-publish", user => {
// 房间里有新的用户发布
console.log(user, "publish");
});
myRoom.on("user-unpublish", user => {
// 房间里有新的用户取消发布
console.log(user, "unpublish");
});
关于事件使用的具体细节,可以参考 监听事件 中的说明。关于房间中具体的事件列表,可以参考 StreamModeSession。
发起订阅
当我们确认订阅的目标用户后,就可以发起订阅操作来获取相应的 Stream
对象了。
// 取出每个 TrackInfo 的 trackId 当作参数发起订阅
const stream = await myRoom.subscribe("target-userid");
返回的 stream
就是 Stream
对象列表,它和采集操作返回的 Stream
是同属一个类,所以使用方法相同,直接调用 play
即可播放。
取消订阅
当成功订阅某个用户获取 Stream
之后,就可以对这个用户取消订阅了。
// 传入 trackId,取消订阅,注意参数是一个列表
await myRoom.unsubscribe("target-userid");
取消订阅操作完成后,SDK 会自动释放相应的媒体对象。