返回

最新 Google WebRTC:如何掌控 WebRTC 的回声消除和自动增益控制

Android

在最新 Google WebRTC 中控制基于 WebRTC 的 AEC 和 AGC

简介

WebRTC 的回声消除(AEC)和自动增益控制(AGC)对于提供高质量的实时音频通信至关重要。在 Google WebRTC 的早期版本中,可以通过 WebRtcAudioUtils 类轻松控制这些功能。然而,在最新版本中,这些方法已不再可用,需要探索其他选项。

通过 MediaConstraints 设置

一种方法是通过在创建音频源时使用 MediaConstraints 来设置 AEC 和 AGC:

MediaConstraints mediaConstraints = new MediaConstraints();
mediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
mediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));

通过 JavaAudioDeviceModule

另一种方法是通过 JavaAudioDeviceModule 启用硬件 AEC 和 AGC:

JavaAudioDeviceModule audioDeviceModule = JavaAudioDeviceModule.builder(applicationContext).setUseHardwareAcousticEchoCanceler(true).setUseHardwareAutomaticGainControl(true).build();
PeerConnectionFactory.Builder peerConnectionFactoryBuilder = PeerConnectionFactory.builder().setAudioDeviceModule(audioDeviceModule);

比较和推荐

通过 MediaConstraintsJavaAudioDeviceModule 设置的 AEC 和 AGC 质量存在差异。通过 WebRtcAudioUtils 设置的基于 WebRTC 的 AEC 和 AGC 通常提供最佳质量,因为它利用了 Google 自己的算法。

结论

在最新版本 Google WebRTC 中控制基于 WebRTC 的 AEC 和 AGC 需要通过其他方法,例如使用 MediaConstraintsJavaAudioDeviceModule。根据需要,可以启用硬件 AEC 和 AGC 以获得额外的增强。虽然基于 WebRTC 的 AEC 和 AGC 仍然无法通过旧的 WebRtcAudioUtils 方法直接控制,但这些替代方案仍然允许开发人员优化音频通信质量。

常见问题解答

  • 为什么基于 WebRTC 的 AEC 和 AGC 的旧方法已不再可用?
    它已从 WebRtcAudioUtils 类移动到不同的包,其访问权限已降低为包私有。
  • MediaConstraintsJavaAudioDeviceModule 设置 AEC 和 AGC 的效果如何?
    基于 WebRTC 的 AEC 和 AGC 通常提供最佳质量,但硬件设置也可以提供额外的增强。
  • 我应该使用哪种方法?
    这取决于特定的应用程序需求和性能要求。
  • 如何在 JavaScript 中设置 AEC 和 AGC?
    在 JavaScript 中无法直接设置基于 WebRTC 的 AEC 和 AGC,但可以通过使用 MediaConstraints 启用硬件设置。
  • 是否有其他方法可以控制 AEC 和 AGC?
    可以考虑使用第三方库或修改 WebRTC 源代码,但这需要额外的技术专业知识。