windows - 如何更改 Mac Native WebRTC 上的默认播放设备?
问题描述
我正在使用 WebRTC(本机 Mac 和本机 Windows——不是 JS)并试图更改默认播放和录制设备,但遇到了很多麻烦。这开始让我发疯,因为它应该非常简单。
问题:在 Mac 和 Windows 上进行通话时,本机更改音频播放和录音设备的推荐方法是什么?
这是我尝试过的:
方法一
苹果电脑
我注意到音频设备模块会监听 Core Audio API 通知并正确调整播放和录音设备。这可行,但我不确定这是否是更换设备的推荐方法。
视窗
我找不到设置默认音频播放/录音设备的系统范围的方法。我可以告诉MIGHT工作的唯一方法是获取对音频设备模块的引用并手动调用SetPlayoutDevice
/ SetRecordingDevice
......这导致下面的方法 2:
方法二
苹果电脑
如果可能,我宁愿使用SetPlayoutDevice
( link ) / SetRecordingDevice
( link ) 来更改音频输入/输出(因此 Mac 和 Windows 的工作方式相同)。
用于测试真实音频 IO 设备的单元测试表明我们应该能够在调用StartPlayout
之后StopPlayout
调用SetPlayoutDevice
- 但这会使我的应用程序冻结。我在没有调用的情况下尝试了它StopPlayout
,StartPlayout
但它似乎没有做任何事情。这是有道理的,因为看起来只修改了内部状态,但没有修改任何内容。
问:如何更改 Mac 上的默认音频播放设备和录音设备?
视窗
我还没有机会在 Windows 上尝试这个,但是 Mac 不工作让我觉得我在这里缺少一些东西。
解决方案
我自己回答这个。
VoEHardwareImpl ( https://chromium.googlesource.com/external/webrtc/stable/webrtc/+/refs/heads/master/voice_engine/voe_hardware_impl.cc ) 似乎有一些相关的代码。
对于播放:
- 停止播放
- ...设置设备索引...
- 立体声播放可用
- 设置立体声播放
- 初始化播放
- 开始播放
对于录音:
- 停止录制
- ...设置设备索引...
- 立体声录音可用
- 设置立体声录音
- 初始化记录
- 开始录音
根据您正在进行的提交,您可能需要确保不会陷入僵局。其中一些方法获取锁,因此如果您正在调用需要锁的方法,请确保尚未获取锁。更好的是——如果可能的话,在上面执行此操作或包装 adm。
推荐阅读
- java - (Spring Batch)为什么表'batch_job_instance'已经存在?
- fortran - 我们如何在fortran 95中计算一个大数
- java - 将图像从 java 插件传递到我的统一应用程序的一些麻烦
- python-3.x - django使用字符串反向查找
- r - 如何将函数应用于名称包含特定字符串 R 的列中的行
- delphi - Delphi - 将 TStringList 传递给 IdHTTP.Get 方法,类似于 .Post 方法
- powershell - 仅在必要时连接 SPOService
- uefi - UEFI shell 文件系统顺序
- java - Java 接口方法未被覆盖
- php - 在 Laravel 查询生成器中删除不同表中链接的多个记录的最佳方法