AVAudioSession(4):响应音频中断事件

本文转自:AVAudioSession(4):响应音频中断事件 | www.samirchen.com

本文内容主要来源于 Responding to Interruptions

当一个音频中断到来时,会关闭你的 Audio Session,这通常就意味着停止或暂停你的音频播放。产生中断通常是因为另一个和你的应用存在竞争性音频行为的应用此时被激活,而这个应用设置的 Category 不支持 mix 你的音频。正确的处理音频中断事件能够让你的应用提供给用户更好的体验。

当用户电话响起的时候,你的应用还会因中断而被挂起。当电话结束,你的应用才会被继续运行。这时你的 Audio Session 需要被重新激活。

音频中断处理技术

你可以通过监听音频中断相关的通知 AVAudioSessionInterruptionNotification 来处理中断事件。

当音频中断发生时,你应该做的事情大致如下:

  • 中断开始后
    • 1)保持状态和上下文;
    • 2)更新用户界面。
  • 中断结束后
    • 1)恢复状态和上下文;
    • 2)在应用准备好时激活 Audio Session;
    • 3)更新用户界面。

根据使用的音频技术不同,相应的处理中断的技术也会有所差别,大致如下:

  • AV Foundation framework:AVAudioPlayer 类和 AVAudioRecorder 类提供了中断开始和结束的 Delegate 回调方法来供你处理中断。你可以实现这些回调方法来在对应的时候更新你的用户界面,以及在中断结束后恢复播放。使用这两个类播放或录制音频,当发生中断时,系统会自动暂停播放或录制,在中断结束时,当你恢复播放或录制时,系统会自动激活你的 Audio Session。如果你想要在应用退出/启动时,记录/恢复播放位置,那么在发生中断时,你也要记得记录一下播放位置。

  • Audio Queue Services, I/O audio unit:这些技术需要你的应用自己来处理中断,你需要负责记录播放或录制的位置,以便在中断结束恢复 Audio Session 时用到。

  • OpenAL:当使用 OpenAL 播放时,你需要注册对应的通知事件来监听中断。并且你还需要自己管理 OpenAL 的上下文。

  • System Sound Services:使用 System Sound Services 播发音频,当中断发生时,音频播放会静音,当中断结束后,音频播放会恢复。你的应用则无法影响音频中断时的行为。

中断的生命周期

音频中断发生的过程大致如下图所示:

image

  • 1)你的应用正在运行,在播放音频。
  • 2)来了一个电话。系统激活电话应用的 Audio Session。
  • 3)系统关闭你的 Audio Session。这时,你的应用里的音频播放被停止了。
  • 4)系统调用你应用的中断监听回调方法,通知你:你的 Audio Session 已经被关闭了。
  • 5)你的回调方法做出合适的处理,比如:更新用户界面,保持当前状态信息和上下文以便于恢复播放时用。
  • 6)当用户解除中断,比如挂掉了电话,系统会调用你的回调方法,通知你:中断结束了。
  • 7)你的回调方法做出合适的处理,比如:更新用户界面,重新激活 Audio Session,恢复播放。
  • 8)如果在 6 中用户没有解除中断,比如接听了电话,系统会将你的应有挂起,当通话结束后,中断结束的消息会通知给你。

需要注意的是,有一个中断开始消息不一定会有一个中断结束消息,这就意味着你在中断结束的回调里的处理逻辑可能会没有被执行到。所以你的应用需要关注当切到前台运行状态时或者用户点击了播放按钮时,是不是需要重新激活你的 Audio Session,因为有可能这时候你的 Audio Session 还因为一次有开始通知没结束通知的中断给关闭着呢。

转载于:https://www.cnblogs.com/samirchen/p/7072734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AVAudioSession是iOS中用于管理应用程序的音频会话的类。它允许应用程序控制和配置音频功能,如音频输入、输出、音频路由、音频处理等。AVAudioSession的目的是提供一个统一的接口,以便应用程序可以与设备的音频系统进行交互,无论是播放音乐、录制语音还是进行VoIP通话。 AVAudioSession有几个重要的概念和属性: 1. Category(分类):用于描述应用程序对音频的使用情况,如播放音乐、录制音频、播放通话等。不同的分类具有不同的优先级和行为。应用程序可以根据需要选择适当的分类,并在需要时进行切换。 2. Mode(模式):用于描述音频会话的详细行为。不同的模式针对不同的应用场景进行了优化,如游戏、音乐播放、通话等。应用程序可以根据需要设置适当的模式。 3. Route(路由):描述音频信号的路径,如扬声器、听筒、耳机等。应用程序可以查询当前的音频路由,并根据需要进行调整。 4. Options(选项):用于配置音频会话的其他参数,如混音、静音、中断处理等。 AVAudioSession还提供了一些其他的功能和方法,如设置音频输入、输出的硬件设备、监测耳机插拔事件、处理音频会话的中断和恢复等。 总之,AVAudioSession是一个强大的音频管理类,允许应用程序轻松控制和配置音频功能,并为各种应用场景提供了灵活的接口。通过使用AVAudioSession,开发者可以实现各种复杂的音频操作,提供优质的音频体验给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值