当自己视频APP,遇到别人音频APP后台播放音频时候
当别家音乐APP播放音乐,打开自家视频APP(虽然没有播放视频),但音乐app的音频却暂停了(如果是钉钉语音会议这种情况,会自动退出语音会议)。
查了资料:这是音频打断处理问题,举个例子:
第一种情况:比如闹铃打断的情况。先是AVAudioSessionInterruptionTypeBegan,闹铃结束调AVAudioSessionInterruptionTypeEnd,通知中的option是 AVAudioSessionInterruptionOptionShouldResume 可恢复。电话的中断也类似。
第二种情况:其他音乐APP正在播放,视频APP到前台也会收到系统的音频中断通知,但音乐app它是一直播放的。系统不可能等到它播放完再调xxxxend通知,所以会立即调用end,但通知中的option字段是0.
目前来看还是视频APP做一些操作,导致立即发送了AVAudioSessionInterruptionTypeEnd通知。果然,查阅代码后发现,视频APP有调用
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
这个意思就是不让其他音乐APP播放。所以视频APP会立即收到AVAudioSessionInterruptionTypeEnd通知。
这时候就要根据视频APP的状态和AVAudioSessionInterruptionOptionKey的值来处理逻辑了:
代码示例:
/*** 处理音频打断*/
-(void)AVAudioSessionInterruptionNotification:(NSNotification *)notif{NSDictionary *interruptionDictionary = [notif userInfo];AVAudioSessionInterruptionType type =[interruptionDictionary [AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];AVAudioSessionInterruptionOptions option = [interruptionDictionary [AVAudioSessionInterruptionOptionKey] unsignedIntegerValue];switch (type) {case AVAudioSessionInterruptionTypeBegan:if(如果当前不需要播放视频){//需要释放音频控制权[[AVAudioSession sharedInstance] setActive:NOwithOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivationerror:nil];}break;case AVAudioSessionInterruptionTypeEnded:if (option == AVAudioSessionInterruptionOptionShouldResume){if (正在播放视频){//继续播放视频//设置setactive[[AVAudioSession sharedInstance] setActive:YES error:nil];}}break;default:break;}
}
注:
- AVAudioSessionCategoryAmbient : 只用于播放音乐时,并且可以和QQ音乐同时播放,比如玩游戏的时候还想听QQ音乐的歌,那么把游戏播放背景音就设置成这种类别。同时,当用户锁屏或者静音时也会随着静音,这种类别基本使用所有App的背景场景。
- AVAudioSessionCategorySoloAmbient: 也是只用于播放,但是和"AVAudioSessionCategoryAmbient"不同的是,用了它就别想听QQ音乐了,比如不希望QQ音乐干扰的App,类似节奏大师。同样当用户锁屏或者静音时也会随着静音,锁屏了就玩不了节奏大师了。
- AVAudioSessionCategoryPlayback: 如果锁屏了还想听声音怎么办?用这个类别,比如App本身就是播放器,同时当App播放时,其他类似QQ音乐就不能播放了。所以这种类别一般用于播放器类App
- AVAudioSessionCategoryRecord: 有了播放器,肯定要录音机,比如微信语音的录制,就要用到这个类别,既然要安静的录音,肯定不希望有QQ音乐了,所以其他播放声音会中断。想想微信语音的场景,就知道什么时候用他了。
- AVAudioSessionCategoryPlayAndRecord: 如果既想播放又想录制该用什么模式呢?比如VoIP,打电话这种场景,PlayAndRecord就是专门为这样的场景设计的 。
- AVAudioSessionCategoryMultiRoute: 想象一个DJ用的App,手机连着HDMI到扬声器播放当前的音乐,然后耳机里面播放下一曲,这种常人不理解的场景,这个类别可以支持多个设备输入输出。
- AVAudioSessionCategoryAudioProcessing: 主要用于音频格式处理,一般可以配合AudioUnit进行使用
了解了这七大类别,我们就可以根据自己的需要进行对应类别的设置了
参考:http://www.voycn.com/article/yinshipinkaifa-avaudiosessionzaikaifazhongdeyingyong
https://www.jianshu.com/p/1ce64fd142fa
http://www.voycn.com/article/yinshipinkaifa-avaudiosessionzaikaifazhongdeyingyong
https://www.jianshu.com/p/3e0a399380df
当自己视频APP,遇到别人音频APP后台播放音频时候相关推荐
- iOS从零开始学习直播之音频2.后台播放和在线播放
本篇主要讲音频的后台播放和在线播放. 后台播放 上一篇写的工程运行之后程序退至后台,发现运行不了,歌停止了,这显然不行,音乐后台播放是标配啊.今天就来讲一下后台播放. 1.在plist文件里,告诉 ...
- AVAudioPlayer 本地音频设置第三弹:后台播放音频
AVAudioPlayer 本地音频设置第三弹:后台播放音频 设备/引擎:Mac(11.6)/cocos 开发工具:Xcode(13.0) 开发语言:Objective-c/c++ 开发需求:满足后台 ...
- iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)...
iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报 分类: cocoa SDK(139) ...
- iOS音频的后台播放总结
在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...
- iOS音频的后台播放 锁屏
初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...
- 与众不同 windows phone (15) - Media(媒体)之后台播放音频
原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页] [源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音 ...
- Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...
- 音视频系列四 ffmpeg配合opensl es播放音频
文章目录 一 解码成PCM 二 opensl es创建引擎,混音器 创建引擎 创建混音器 创建播放器,注册回调函数 一 解码成PCM 流程其实和视频差不多,参考播放视频的代码,稍作增改 先定义后面需要 ...
- 电脑突然无法播放html音频,电脑无法播放音频怎么办
在平时的日常生活里,有时候我们的电脑会遇到无法播放音频的问题,该如何解决电脑无法播放音频这个难题呢?下面是学习啦小编收集的关于电脑无法播放音频的解决步骤,希望对你有所帮助. 电脑无法播放音频的解决步骤 ...
最新文章
- Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images
- 如何使cmd的输入和输出重定向到管道中(用这种方法可以将指令写入cmd并抓取输出)
- 谈谈CListCtrl如何调整行高
- ios无痕埋点_移动端无痕埋点实践详解(二)
- wust2013届推免生复试机试代码
- taro 小程序转h5之后报错_记录微信小程序转Taro中遇到的问题
- [转]如果说中国程序员技术偏低,原因可能在这里
- 汇编指令入门级整理 | 原力计划
- 1039. 到底买不买(20)-PAT乙级真题
- 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法...
- android viewpager监听,viewPager的OnPageChangeListener监听器的方法调用顺序
- mysql pxc缺点_MYSQL高可用之PXC
- python MySQLdb 一个连接connection多个cursor
- package installer has been stopped怎么解决
- Fragment跳转Fragment以及闭坑指南、方法isadded()
- 如何从 Ubuntu 20.04 LTS 升级到 Ubuntu 22.04 “Jammy Jellyfish”|Linux 中国
- 字节跳动校招——运维工程师-系统架构岗位面经分享
- C++ isdigit() 的基本用法
- 怎么将微信小程序项目转为uniapp项目
- Pyecharts 生成Echarts图标的类库