【问题标题】:WebRTC - How to change the audio track for a existing streamWebRTC - 如何更改现有流的音轨
【发布时间】:2026-01-11 22:20:05
【问题描述】:

我建立了一个带有音频和视频的 webRTC 连接。

在呼叫方方面,我想更改音频输入

例如用户从下拉列表中更改audioinput

替换现有流的音轨的工作流程是什么?

我可以添加另一个音轨并让其中一个比另一个更活跃吗?如何?

看起来我可能需要再次调用 getUserMedia 传递约束 (?),据我了解,这是创建一个新的 mediaStream 实例而不修改现有实例。

【问题讨论】:

  • 在活动的peerconnection中修改MediaStream,peerconnection对象会触发onnegotiationneeded事件。处理该事件并重新交换 SDP。
  • 谢谢。您能否将其详细说明为下面的答案(要调用的函数序列)。我认为这将创建一个具有不同 ID 的新 MediaStream 对吗?因此,这不会改变现有 MediaStream 的音轨(保持相同的 ID),而是重新协商与包含相同视频 + 不同音轨的新 MediaStream 的连接。

标签: javascript webrtc


【解决方案1】:

对我们来说,它看起来像这样:

const replaceTrack = async (peerConnection, oldSender, track, stream) => {
  peerConnection.removeTrack(oldSender);

  const newSender = peerConnection.addTrack(track, stream);

  const localSdp = await peerConnection.createOffer({ offerToReceiveAudio: 1 });
  await peerConnection.setLocalDescription(reply);

  const response = await sendOffer(peerConnection.localDescription);

  const description = new RTCSessionDescription(response);
  peerConnection.setRemoteDescription(description);

  return newSender;
}

【讨论】:

    最近更新 更多