Javascript WebRTC-如何更改现有流的音频曲目

Javascript WebRTC-如何更改现有流的音频曲目,javascript,webrtc,Javascript,Webrtc,我与音频和视频建立了webRTC连接 在呼叫端,我想更改音频输入 e、 g.用户从下拉列表中更改音频输入 替换现有流的音频曲目的工作流程是什么 我是否可以添加另一个音频曲目,并使其中一个处于活动状态?怎么做 看起来我可能需要再次调用getUserMedia传递约束(?),据我所知,这将创建一个新的mediaStream实例,而不是修改现有实例 对我们来说,它看起来像这样: const replaceTrack = async (peerConnection, oldSender, track,

我与音频和视频建立了webRTC连接

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

e、 g.用户从下拉列表中更改
音频输入

替换现有流的音频曲目的工作流程是什么

我是否可以添加另一个音频曲目,并使其中一个处于活动状态?怎么做


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

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

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;
}

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