javascript - 将两个音轨合并为一个音轨

标签 javascript angular audiotrack mediastream

我在将两个音轨合并为一个时遇到了问题,以便将整个合并的音频添加到视频轨道中。

  this.promises = [navigator.mediaDevices.getUserMedia({ audio: true, video: true })];
  if (navigator['getDisplayMedia']) {
    this.promises.push(navigator['getDisplayMedia'](this.streamConstraints));
  }
  else if (navigator.mediaDevices['getDisplayMedia']) {
    this.promises.push(navigator.mediaDevices['getDisplayMedia'](this.streamConstraints));
  }
  else {
    this.promises.push(navigator.mediaDevices.getUserMedia({ video: { mediaSource: 'screen' } as any }));
  }
  Promise.all(this.promises)
    .then((streams) => {
      // so here is the microphone audio and webcam video
      const avTracks = streams[0].getTracks();
      // here is the screen video and audio
      const screenRecordTracks = streams[1].getTracks();
      const firstAudioTrack = new MediaStream(avTracks).getAudioTracks();
      const secondAudioTrack= new MediaStream(screenRecordTracks ).getAudioTracks();

  // so here I want to merge these two audio tracks, and them to add this final track to the first video track like so..
  const wholeRecord = new MediaStream(avTracks).getVideoTracks(); + the merged audio track
我怎样才能将它们合并成一个轨道,有人可以帮我吗?

最佳答案

我可以通过使用 Web Audio API 来做到这一点。我从两个流中获取了音轨,并使用音频上下文将它们合并为一个。

var OutgoingAudioMediaStream = new MediaStream();
OutgoingAudioMediaStream.addTrack(OutgoingStream.getAudioTracks()[0]);

var IncomingAudioMediaStream = new MediaStream();
IncomingAudioMediaStream.addTrack(IncomingStream.getAudioTracks()[0]);

const audioContext = new AudioContext();

audioIn_01 = audioContext.createMediaStreamSource(OutgoingAudioMediaStream);
audioIn_02 = audioContext.createMediaStreamSource(IncomingAudioMediaStream);

dest = audioContext.createMediaStreamDestination();

audioIn_01.connect(dest);
audioIn_02.connect(dest);

var FinalStream = dest.stream;
这工作得很好。

关于javascript - 将两个音轨合并为一个音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64717758/

相关文章:

javascript - 如何在 Angular Controller 中过滤自定义数据

javascript - 事件模式 Bootstrap 后无法更改 td 中的值

javascript - 即时创建具有单独音轨的视频播放列表,今天这可能吗?

android - Android应用程序可以修改设备的音频系统吗?

android - 如何使用新的 MediaCodec getInputBuffer(int index)

Javascript 显示/计算过去 3 个月

javascript - xml, xsl Javascript排序

javascript - 有没有办法以编程方式更改激活的 mat-tab?

Angular 库 - 使用 APP_INITIALIZER 将参数传递给服务

angular - 使用 Angular Material 获取类型错误