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