接入已有参与者的Twilio视频房间 如何订阅现有用户的音视频轨道
解决方案
报错根因
Twilio 2.0版本JavaScript SDK不会默认暴露未订阅的远端track,你遍历拿到的RemoteTrackPublication对象在未完成订阅前,track属性为undefined,这是触发报错的核心原因。
正确实现逻辑
- 加入房间成功后,同时处理房间内已存在的参与者和后续新加入的参与者,统一调用封装的处理函数
- 对每个远端参与者的track publication,优先判断是否已订阅,未订阅则监听订阅完成事件后再执行挂载操作
- 如果你在
connect初始化时配置了automaticSubscription: false关闭了自动订阅,需要主动调用publication.subscribe()触发订阅
代码示例
// 加入房间成功回调 Twilio.Video.connect(token, { name: 'room-name' }).then(room => { // 处理房间内已存在的所有远端参与者 room.participants.forEach(handleRemoteParticipant); // 监听后续新加入的参与者 room.on('participantConnected', handleRemoteParticipant); }); // 远端参与者统一处理函数 function handleRemoteParticipant(participant) { // 遍历参与者所有已发布的track publication participant.tracks.forEach(publication => { if (publication.isSubscribed) { // 已订阅直接挂载 publication.track.attach(); } else { // 监听订阅完成事件后挂载 publication.on('subscribed', track => { track.attach(); }); // 若关闭了自动订阅,需额外加这行主动触发订阅 // publication.subscribe(); } }); // 可选:监听参与者后续新发布的track participant.on('trackPublished', publication => { publication.on('subscribed', track => { track.attach(); }); }); }
兼容性说明
对端使用旧版Android SDK的场景不需要额外适配,上述逻辑可直接兼容。
内容的提问来源于stack exchange,提问作者simondefreeze
相关产品推荐
相关产品推荐

