首页 > 解决方案 > 如何更改 Mac Native WebRTC 上的默认播放设备?

问题描述

我正在使用 WebRTC(本机 Mac 和本机 Windows——不是 JS)并试图更改默认播放和录制设备,但遇到了很多麻烦。这开始让我发疯,因为它应该非常简单。

问题:在 Mac 和 Windows 上进行通话时,本机更改音频播放和录音设备的推荐方法是什么?

这是我尝试过的:

方法一

苹果电脑

我注意到音频设备模块会监听 Co​​re Audio API 通知并正确调整播放和录音设备。这可行,但我不确定这是否是更换设备的推荐方法。

视窗

我找不到设置默认音频播放/录音设备的系统范围的方法。我可以告诉MIGHT工作的唯一方法是获取对音频设备模块的引用并手动调用SetPlayoutDevice/ SetRecordingDevice......这导致下面的方法 2:

方法二

苹果电脑

如果可能,我宁愿使用SetPlayoutDevice( link ) / SetRecordingDevice( link ) 来更改音频输入/输出(因此 Mac 和 Windows 的工作方式相同)。

用于测试真实音频 IO 设备的单元测试表明我们应该能够在调用StartPlayout之后StopPlayout调用SetPlayoutDevice- 但这会使我的应用程序冻结。我在没有调用的情况下尝试了它StopPlayoutStartPlayout但它似乎没有做任何事情。这是有道理的,因为看起来只修改了内部状态,但没有修改任何内容。

问:如何更改 Mac 上的默认音频播放设备和录音设备?

视窗

我还没有机会在 Windows 上尝试这个,但是 Mac 不工作让我觉得我在这里缺少一些东西。

标签: windowsmacoswebrtc

解决方案


我自己回答这个。

VoEHardwareImpl ( https://chromium.googlesource.com/external/webrtc/stable/webrtc/+/refs/heads/master/voice_engine/voe_hardware_impl.cc ) 似乎有一些相关的代码。

对于播放:

  • 停止播放
  • ...设置设备索引...
  • 立体声播放可用
  • 设置立体声播放
  • 初始化播放
  • 开始播放

对于录音:

  • 停止录制
  • ...设置设备索引...
  • 立体声录音可用
  • 设置立体声录音
  • 初始化记录
  • 开始录音

根据您正在进行的提交,您可能需要确保不会陷入僵局。其中一些方法获取锁,因此如果您正在调用需要锁的方法,请确保尚未获取锁。更好的是——如果可能的话,在上面执行此操作或包装 adm。


推荐阅读