You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

接入已有参与者的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:36:03