如何更改现有流的音轨

WebRTC - How to change the audio track for a existing stream

本文关键字:音轨 何更改      更新时间:2023-09-26

我已经建立了音频和视频的webbrtc连接。

在调用方,我想更改音频输入

用户通过下拉列表修改audioinput

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

我可以添加另一个音轨并使一个在另一个上活动吗?如何?

看起来我可能需要再次调用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;
}

现在有一个更简单的API用于此操作:RTCRtpSender.replaceTrack().

可以是这样的:

const currentSenders = peerConnection.getSenders();
const currentAudioSender = currentSenders.find((s) => s.track.kind === 'audio');
currentAudioSender.replaceTrack(newAudioTrack);