因此,我正在使用navigator.getDisplayMedia()
让用户选择屏幕来源以开始录制。但这当前不支持音频,因此我正在使用navigator.mediaDevices.getUserMedia({ audio: true });
获取音频流,然后最终将视频轨道添加到其中,然后将此流传递给mediarecorder。
我的是一个视频会议Web应用程序,我设法捕获了所有音频,但是当其他任何用户加入会议室时,我都不会在录音中得到他/她的音频。
有人遇到过类似的问题吗?
navigator.mediaDevices.getUserMedia({audio: true})
给您用户的麦克风,而不是他们系统的音频。
他们的麦克风可能拾取一些系统音频,但不能保证。例如,如果:
在所有浏览器中,默认情况下,您未听到其他与会者的特定原因是echoCancellation。
没有回音消除,当您的麦克风拾起远程扬声器时,他们的声音会立即发送回给他们,他们会听到回音。如果他们的麦克风也不能消除该回声,则您会得到一个回声更大的循环。
如果您知道自己在做什么,可以通过以下方式关闭echoCancellation:
await navigator.mediaDevices.getUserMedia({audio: {echoCancellation: false}});
或之后的事实:
await stream.getAudioTracks()[0].applyConstraints({echoCancellation: false});
改为使用网络音频
如果这是您自己的网络会议应用程序,那么您应该已经拥有所有必要的音轨。您应该至少可以将活动扬声器至少直接馈送到MediaRecorder,或者甚至可以使用网络音频混合音频。
来自屏幕共享的音频为in the spec,但它是可选的,既可以实施,也可以由最终用户自行决定。
到目前为止,我相信Chrome正在努力实施它。