4

所以我navigator.getDisplayMedia()用来让用户选择屏幕的来源开始录制。但这目前不支持音频,所以我navigator.mediaDevices.getUserMedia({ audio: true });用来获取音频流,然后最终将视频轨道添加到它,然后将此流传递给 mediarecorder。

我的是一个视频会议网络应用程序,我设法捕获所有类型的音频,但是当任何其他用户加入房间时,我没有在录音中获得他/她的音频。

有没有人遇到过类似的问题?

4

1 回答 1

1

getUserMedia 为您提供麦克风

navigator.mediaDevices.getUserMedia({audio: true})为您提供用户的麦克风,而不是来自他们系统的音频。

他们的麦克风可能会拾取一些系统音频,但不能保证。例如,如果:

  1. 他们的音量被调低
  2. 他们正在使用耳机

您没有听到其他参与者的具体原因是echoCancellation在所有浏览器中默认处于启用状态。

如果没有回声消除,当您的麦克风拾取远程扬声器时,他们的声音会立即发送回他们,他们会听到回声。如果他们的麦克风也没有消除那个回声,你会得到一个带有更多回声的循环。

如果您知道自己在做什么,可以使用以下命令关闭 echoCancellation:

await navigator.mediaDevices.getUserMedia({audio: {echoCancellation: false}});

或事后:

await stream.getAudioTracks()[0].applyConstraints({echoCancellation: false});

改用网络音频

如果这是您自己的网络会议应用程序,那么您应该已经拥有所有必要的音轨。您至少应该能够将活动扬声器直接馈送到 MediaRecorder,或者甚至可以使用网络音频混合音频。

屏幕共享音频即将到来

来自屏幕共享的音频在规范中,但它是可选的,既可以实施,也可以由最终用户自行决定。

到目前为止,我相信 Chrome 正在努力实现它。

于 2019-11-24T20:33:24.480 回答