如何在 getUserMedia 上设置谷歌实验音频媒体约束

How to set google experimental audio media constraints on getUserMedia

提问人:wanderingcode 提问时间:11/16/2023 更新时间:11/16/2023 访问量:19

问:

使用 Google Meet 时,需要设置几个未发布的音频限制。查看 webrtc-internals 显示音频约束如下:

{deviceId: {exact: ["default"]}, advanced: [{googEchoCancellation: {exact: true}}, {googExperimentalEchoCancellation: {exact: true}}, {autoGainControl: {exact: true}}, {noiseSuppression: {exact: true}}, {googHighpassFilter: {exact: true}}, {googAudioMirroring: {exact: true}}]}

我目前在使用 Google Meet 时遇到了 Chrome 中的标准回声消除问题。因此,我想运行一些启用 googEchoCancellation 和 googExperimentalEchoCancellation 的测试,但是当我在 getUserMedia 中设置这些约束时,它们不会被应用。相反,查看 webrtc-internals 显示我的约束如下:

{deviceId: {exact: ["default"]}, advanced: [{}, {}, {autoGainControl: {exact: true}}, {noiseSuppression: {exact: true}}, {}, {}]}

当我尝试设置 goog* 特定约束时,Chrome 会忽略它们,但 Meet 能够设置它们。

我可以看到这些限制存在于 Chrome 的源代码中: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/mediastream/media_constraints.cc

但是我不知道如何设置它们。

所以我的问题是 Google Meet 如何设置这些额外的音频限制?

我尝试将getUserMedia中的约束设置为:

let gum = await navigator.mediaDevices.getUserMedia({deviceId: {exact: ["default"]}, advanced: [{googEchoCancellation: {exact: true}}, {googExperimentalEchoCancellation: {exact: true}}, {autoGainControl: {exact: true}}, {noiseSuppression: {exact: true}}, {googHighpassFilter: {exact: true}}, {googAudioMirroring: {exact: true}}]})

我还尝试将它们直接应用于音轨:

let tracks = await gum.getAudioTracks() await tracks[0].applyConstraints({advanced: [{googEchoCancellation: {exact: true}}, {googExperimentalEchoCancellation: {exact: true}}, {autoGainControl: {exact: true}}, {noiseSuppression: {exact: true}}, {googHighpassFilter: {exact: true}}, {googAudioMirroring: {exact: true}}]})

这两种方法都没有设置 googEchoCancellation 或 googExperimentalEchoCancellation。

WebRTC 约束 getUserMedia 回声消除

评论


答: 暂无答案