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 播发音频,当中断发生时,音频播放会静音,当中断结束后,音频播放会恢复。你的应用则无法影响音频中断时的行为。
中断的生命周期
音频中断发生的过程大致如下图所示:

- 1)你的应用正在运行,在播放音频。
- 2)来了一个电话。系统激活电话应用的 Audio Session。
- 3)系统关闭你的 Audio Session。这时,你的应用里的音频播放被停止了。
- 4)系统调用你应用的中断监听回调方法,通知你:你的 Audio Session 已经被关闭了。
- 5)你的回调方法做出合适的处理,比如:更新用户界面,保持当前状态信息和上下文以便于恢复播放时用。
- 6)当用户解除中断,比如挂掉了电话,系统会调用你的回调方法,通知你:中断结束了。
- 7)你的回调方法做出合适的处理,比如:更新用户界面,重新激活 Audio Session,恢复播放。
- 8)如果在 6 中用户没有解除中断,比如接听了电话,系统会将你的应有挂起,当通话结束后,中断结束的消息会通知给你。
需要注意的是,有一个中断开始消息不一定会有一个中断结束消息,这就意味着你在中断结束的回调里的处理逻辑可能会没有被执行到。所以你的应用需要关注当切到前台运行状态时或者用户点击了播放按钮时,是不是需要重新激活你的 Audio Session,因为有可能这时候你的 Audio Session 还因为一次有开始通知没结束通知的中断给关闭着呢。
AVAudioSession(4):响应音频中断事件的更多相关文章
- 【转】iOS 音频-AVAudioSession
1. AVAudioSession 概述 最近一年一直在做IPC Camera的iOS客户端开发.和音频打交道,必须要弄清楚 AVAudioSession. 先看下苹果的官方图: Audio Se ...
- iOS音频掌柜-- AVAudioSession
音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实 ...
- iOS - AVAudioSession详解
音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实 ...
- 【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮
概述 在安卓开发中免不了需要播放一点音乐了,音频了.但是这时候有别的应用正在播放,这时候就会出现重音的现象,完全影响用户体验,我们的项目就遇上了这样的尴尬,然后查找了一些文档,记录一下: 管理音频焦点 ...
- iOS- 关于AVAudioSession的使用——后台播放音乐
1.前言 •AVAudioSession是一个单例,无需实例化即可直接使用.AVAudioSession在各种音频环境中起着非常重要的作用 •针对不同的音频应用场景,需要设置不同的音频会话分类 1 ...
- AVFoundation 框架初探究(一)
夜深时动笔 前面一篇文章写了视频播放的几种基本的方式,算是给这个系列开了一个头,这里面最想说和探究的就是AVFoundation框架,很想把这个框架不敢说是完全理解,但至少想把它弄明白它里面到底有什么 ...
- AVAudioSesion和AVAudioPlayer的基本使用
iOS基础篇-AVPLayer和AVAudioSession 2018.02.27 16:17 字数 215 阅读 1516评论 0喜欢 4 作用 AVPLayer:可以用来播放在线及本地音视频 AV ...
- EZ-USB FX2(68013)固件研究
原始资料来自网络 整理日: 2015年2月12日 1. Welcome 算是给所有正在学习USB,还徘徊着不得其门而入的朋友一个入门的契机吧,我也深知入门的痛苦,有些人入门就是抱着那什么USB协议,包 ...
- OC-AVAudioSession的知识小记
参考文章:https://www.cnblogs.com/junhuawang/p/7920989.html 音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺 ...
随机推荐
- cocos lua 加密方案
cocos2d使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以直接用luac法编译出来的bytecode脚本无法在cocos2d中使用. 目前所指的解决方案有2 ...
- 7624:山区建小学(划分dp)
7624:山区建小学 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄 ...
- C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')
转:http://blog.sina.com.cn/s/blog_9ffcd5dc01014nw9.html 前面的几天一直都在复习着被实习落下的C++基础知识.今天在复习着上次创建的窗口程序时,出现 ...
- ubuntu安装Docker并部署selenium-grid
目录 一.docker安装 Ubuntu 1.检查内核版本大于3.10 2.更新apt源 3.安装docker 4.(建议)更新成国内源 5.启动.重启docker (可选)检查docker运行情况 ...
- LeetCode 笔记系列八 Longest Valid Parentheses [lich你又想多了]
题目:Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...
- 170419、Centos7下完美安装并配置mysql5.6
首先跟各位说声抱歉,原计划说每天一篇博文,最近由于实在太忙,封闭式开发一个项目,没有时间写博文,望大家见谅!!! 由于公司要搭建分布式服务,我把最近我所用到或者学习的技术或者遇到的问题跟大家分享一下! ...
- Oracle Schema Objects——Tables——TableStorage
Oracle Schema Objects Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a table ...
- Logstash之时区问题的建议和修改---filter---and duplicate resolution.
2. logstash es duplicate https://logstash.jira.com/browse/LOGSTASH-1875 https://logstash.jira.com/br ...
- HTTP代理服务器基本知识
http://www.cnblogs.com/TankXiao/archive/2012/12/12/2794160.html https://blog.csdn.net/xiaoxiaorenky/ ...
- 剑指Offer——数组中只出现一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 分析: 数组中一共有偶数个数.两个数字只出现过一次. 相同数异或在一起等于0,那么将所有数异或 ...