音频流未添加到 html canvas

audio stream not being added to html canvas

我有一个在 p5 中创建的 html canvas,我想向它添加一个音轨,以便我可以使用 webrtc 连接流式传输它。我目前可以流式传输视觉效果,但不能流式传输音频。

我正在将音频流添加到我的 canvas,如下所示:

let canvasSource = document.getElementById('canvas-viz');

navigator.mediaDevices.getUserMedia({
      audio: true
    }).then(audioStream => {
      audioStream.getAudioTracks().forEach(
        track => { 
          canvasSource.captureStream().addTrack(track) 
        })
      console.log("canv source: ",canvasSource.captureStream().getAudioTracks()); // prints  []
    })

所以我的主要问题是,当我调用 canvasSource.captureStream().getAudioTracks() 时,我得到 []。所以似乎 addTrack 没有正常工作。我尝试在开发工具中调用 canvasSource.captureStream().getAudioTracks(),以防发生一些异步的傻事,然后再调用 []。我还在开发工具中尝试了以下内容:

audioTracks = audioStream.getAudioTracks();
canvasSource.captureStream().addTrack(audioTracks[0]);

但这也不起作用,在查看 getAudioTracks() 时返回 []。调用 audioStream.getAudioTracks() 时,我的麦克风输入流得到一个大小为 1 的数组。

我正在按照以下所示的方法进行操作:

我正在 Chrome 开发这个。出于我的目的,目前,它不需要在 Firefox 中交叉兼容。

canvasSource.captureStream() returns 每次调用 new MediaStream。您已将音轨添加到无法再访问的 MediaStream。
将 canvas MediaStream 存储在可在那里访问的变量中,并将曲目添加到该 MediaStream。

Kaiido 的解决方案应该有效。作为替代方案,我所做的只是用其他两个流中的曲目创建一个新的 MediaStream...

new MediaStream([
  canvasVideoTrack,
  audioTrack
]);