iOS AVAudioSession 概况

介绍

在iOS开发中,开发者可以通过AVAudioSession的相关API来处理App内部、App之间以及设备级别的音频行为。比如:比如:App 的声音是否应该受到手机的静音键的控制;当 App 的音频开始播放时,其他音乐播放器的声音是否应停止;用户拔掉耳麦、电话来了、带声音播放的系统通知响起等情况下,App 的声音应该怎么处理等等。

总的来说,使用 AVAudioSession 可以做到:
  • 选择合适的音频输入或输出路径

  • 决定你的 App 的音频如何与其他 App 的音频共存

  • 处理来自其他 App 的中断

  • 根据你的 App 的类别自动做音频相关配置

在 AVAudioSession 中如何支持你做到上述这些呢?
  • 用 Category 来分类音频使用角色。表达音频行为的主要机制是 Audio Session Category,通过设置 Category,来反映你的App是否使用 输入和输出其它音乐是否和你的 Audio一起播放等等。各种 Category 支持 录制播放录制播放等不同行为。当系统知道你的 App 角色时,会为你提供与 App 匹配的硬件访问权限,同时,系统还可以确保设备上的其它音频行为与你的 App 相匹配。

  • 用 Model 来定制 Category 的具体行为,比如:你的 App 使用 Video Recording mode 时,如果选择 Default Model,系统可能会选择不同的内置麦克风来采集音频。

  • 用 Notification 来支持中断处理。发生音频中断通常是因为另一个和你的 App 存在竞争性音频行为的 App 被激活了,而这个 App 设置的 Category 并不支持混合你的音频,此时你的 App 会立即停止音频。合理的避免音频中断,你的 App 应注册监听中断通知 AVAudioSessionInterruptionNotification,以此来做一些保存状态更新用户界面等操作来响应中断。

  • 用 Notification 来支持 Audio Route 更改处理。当手机设备锁屏或解屏、插入或拔下耳机时,音频的输入和输出路径会发生改变的。通过注册监听路由更改通知 AVAudioSessionRouteChangeNotification,来做相应处理以满足用户期望。

用 Category 来支持更高级的功能。你可以通过各种方式调优 Category,从而做到这些:

  • 允许其他 App 的音频与你的音频 mix 在一起播放。
  • 将音频输出路径从听筒改到扬声器。
  • 允许通过蓝牙做音频输入。
  • 当你的音频播放时,指定其他的音频降低音量。
  • 在运行状态下根据硬件行为和用户行为优化你的 App 音频行为。比如,用户插上耳机时将音量降低以免吵到用户。

results matching ""

    No results matching ""