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

Twilio音视频SDK客户端通话相关技术问题咨询

解决方案:Twilio Video SDK 常见问题解答

1. 仅通过客户端名称发起/接收客户端间视频通话

Twilio Video本身是基于*Room(房间)*模型的,不像语音SDK那样直接支持客户端到客户端的点对点呼叫,但我们可以通过中间层(比如你的后端或Twilio Functions)模拟出相同的体验,核心思路是用客户端名称作为身份标识,关联到同一个Room:

  • 第一步:确保每个客户端获取Token时,都携带自己的客户端名称(身份),Token生成逻辑要包含这个身份(比如在Twilio控制台或后端代码中指定identity参数)。
  • 第二步:发起呼叫时,调用自定义服务(比如Twilio Functions)创建一个专属Room,同时通过推送通知、WebSocket等方式告知目标客户端这个Room的名称。
  • 第三步:双方分别用自己的Token加入同一个Room,实现通话。

示例代码(前端JS):

// 发起方:创建Room并通知目标客户端
async function callClient(targetClientName) {
  // 调用后端/Twilio Functions创建Room,返回Room名称
  const roomName = await fetch('/create-room', {
    method: 'POST',
    body: JSON.stringify({ target: targetClientName })
  }).then(res => res.json()).data;

  // 加入Room
  const room = await Twilio.Video.connect(yourToken, {
    room: roomName
  });

  // 通知目标客户端加入(这里用WebSocket举例)
  websocket.send(JSON.stringify({
    type: 'video-invite',
    room: roomName,
    from: yourClientName
  }));
}

// 接收方:监听邀请并加入Room
websocket.onmessage = async (event) => {
  const data = JSON.parse(event.data);
  if (data.type === 'video-invite') {
    // 获取自己的Token(如果还没获取)
    const yourToken = await fetch('/get-token', {
      method: 'POST',
      body: JSON.stringify({ identity: yourClientName })
    }).then(res => res.json()).token;

    // 加入指定Room
    const room = await Twilio.Video.connect(yourToken, {
      room: data.room
    });
  }
};

2. 在语音通话与视频通话间切换

这个场景分两种情况,处理方式略有不同:

情况A:同一视频Room内切换(视频↔语音)

如果已经在视频通话中,只需控制本地视频轨道的启用/禁用,就能快速切换到语音模式:

// 视频转语音:关闭本地视频轨道
localVideoTrack.disable();
// 可选:如果要彻底移除视频,取消发布轨道
room.localParticipant.unpublishTrack(localVideoTrack);

// 语音转视频:重新启用并发布视频轨道
localVideoTrack.enable();
room.localParticipant.publishTrack(localVideoTrack);

情况B:跨SDK切换(Twilio Voice ↔ Twilio Video)

如果当前是用Twilio Voice SDK进行纯语音通话,要切换到视频的话:

  • 先断开当前的语音通话:call.disconnect();
  • 按照第一个问题的流程,发起视频呼叫并加入Room
  • 对方同步断开语音通话,加入视频Room

反过来,从视频切换回纯语音,只需断开视频Room,再发起语音呼叫即可。建议在切换时保留客户端身份关联,让流程更连贯。

3. 邀请参与者加入正在进行的视频通话

Twilio Video的Room默认允许新参与者加入(除非设置为私有Room),具体步骤如下:

  • 第一步:当前通话中的参与者(比如主持人)获取当前Room的名称(可以通过room.name获取)。
  • 第二步:主持人发起邀请,指定要加入的客户端名称,后端为该客户端生成带有对应身份和Room权限的Token。
  • 第三步:通过推送、WebSocket等方式通知目标客户端,告知Room名称和Token(或让客户端自行请求Token)。
  • 第四步:目标客户端用Token加入现有Room:
// 目标客户端加入现有Room的代码
async function joinExistingCall(roomName, yourToken) {
  const room = await Twilio.Video.connect(yourToken, {
    room: roomName
  });

  // 处理新加入后的UI逻辑,比如显示其他参与者的视频
  room.participants.forEach(participant => {
    participant.videoTracks.forEach(track => {
      document.getElementById('remote-video').appendChild(track.attach());
    });
  });
}

另外,你也可以通过Twilio的Room API在后端管理参与者,比如调用API获取Room信息、发送邀请通知等,让流程更可控。


内容的提问来源于stack exchange,提问作者Shadab Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:39:05