AVAudioSession 输出选择

Posted

技术标签:

【中文标题】AVAudioSession 输出选择【英文标题】:AVAudioSession output selection 【发布时间】:2015-05-02 06:54:15 【问题描述】:

如果 iPhone 连接了多个输入和输出配件,我希望用户能够手动选择输入和输出源。我可以通过查询 [[AVAudiosession sharedInstance] availableInputs] 然后在 iOS 7 中使用 setPreferredInput:error 方法手动选择输入,但我找不到任何类似的输出。我该如何做到这一点?我正在使用 PlayAndRecord 类别。

【问题讨论】:

【参考方案1】:

Apple 不希望开发人员以编程方式更改输出路径/音量。也许 MPVolumeView 是您的选择。

添加一个 MPVolumeView,然后将它的 showsRouteButton 设置为 YES。

The Apple Documentation 说,“当有多个音频输出路由可用时,路由按钮默认可见。”

像这样:

编辑: 虽然 Apple 不希望开发者以编程方式更改输出路由,但有时我们仍然可以在 iPhone 未连接耳机/耳机时强行更改输出路由:

AVAudioSession* session = [AVAudioSession sharedInstance];
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
[session setActive:YES error:nil];

这仅在 iPhone 未连接耳机/耳机时生效。

【讨论】:

【参考方案2】:

您可以通过调用output​Data​Sources 获取可用的输出,并使用set​Output​Data​Source 更改它。

【讨论】:

"此功能仅在某些 USB 配件上受支持。"这听起来不太有希望。 不正确的答案 - 这是为了在您已经设置音频路由之后在输出之间切换单个外围设备,例如具有前置和后置扬声器的设备。

以上是关于AVAudioSession 输出选择的主要内容,如果未能解决你的问题,请参考以下文章

Swift:设置 AVAudioSession 输出音量

Audio Device Strategy 音频设备输出输入 选择 基于7.0 代码

Audio Device Strategy 音频设备输出输入 选择 基于7.0 代码

AVAudioSession 未检测到连接的蓝牙设备

iOS音频掌柜-- AVAudioSession

OC-AVAudioSession的知识小记