当别家音乐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后台播放音频时候相关推荐

  1. iOS从零开始学习直播之音频2.后台播放和在线播放

    本篇主要讲音频的后台播放和在线播放. 后台播放   上一篇写的工程运行之后程序退至后台,发现运行不了,歌停止了,这显然不行,音乐后台播放是标配啊.今天就来讲一下后台播放. 1.在plist文件里,告诉 ...

  2. AVAudioPlayer 本地音频设置第三弹:后台播放音频

    AVAudioPlayer 本地音频设置第三弹:后台播放音频 设备/引擎:Mac(11.6)/cocos 开发工具:Xcode(13.0) 开发语言:Objective-c/c++ 开发需求:满足后台 ...

  3. iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)...

    iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报  分类: cocoa SDK(139)  ...

  4. iOS音频的后台播放总结

    在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...

  5. iOS音频的后台播放 锁屏

    初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...

  6. 与众不同 windows phone (15) - Media(媒体)之后台播放音频

    原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页] [源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音 ...

  7. Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...

  8. 音视频系列四 ffmpeg配合opensl es播放音频

    文章目录 一 解码成PCM 二 opensl es创建引擎,混音器 创建引擎 创建混音器 创建播放器,注册回调函数 一 解码成PCM 流程其实和视频差不多,参考播放视频的代码,稍作增改 先定义后面需要 ...

  9. 电脑突然无法播放html音频,电脑无法播放音频怎么办

    在平时的日常生活里,有时候我们的电脑会遇到无法播放音频的问题,该如何解决电脑无法播放音频这个难题呢?下面是学习啦小编收集的关于电脑无法播放音频的解决步骤,希望对你有所帮助. 电脑无法播放音频的解决步骤 ...

最新文章

  1. Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images
  2. 如何使cmd的输入和输出重定向到管道中(用这种方法可以将指令写入cmd并抓取输出)
  3. 谈谈CListCtrl如何调整行高
  4. ios无痕埋点_移动端无痕埋点实践详解(二)
  5. wust2013届推免生复试机试代码
  6. taro 小程序转h5之后报错_记录微信小程序转Taro中遇到的问题
  7. [转]如果说中国程序员技术偏低,原因可能在这里
  8. 汇编指令入门级整理 | 原力计划
  9. 1039. 到底买不买(20)-PAT乙级真题
  10. 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法...
  11. android viewpager监听,viewPager的OnPageChangeListener监听器的方法调用顺序
  12. mysql pxc缺点_MYSQL高可用之PXC
  13. python MySQLdb 一个连接connection多个cursor
  14. package installer has been stopped怎么解决
  15. Fragment跳转Fragment以及闭坑指南、方法isadded()
  16. 如何从 Ubuntu 20.04 LTS 升级到 Ubuntu 22.04 “Jammy Jellyfish”|Linux 中国
  17. 字节跳动校招——运维工程师-系统架构岗位面经分享
  18. C++ isdigit() 的基本用法
  19. 怎么将微信小程序项目转为uniapp项目
  20. Pyecharts 生成Echarts图标的类库

热门文章

  1. 全志T507平台增加V4L2 sensor直接操作I2C的API
  2. 读《把时间当作朋友》
  3. 以太坊应用开发24步
  4. Ubuntu 经验 :设置EFI分区
  5. MFC 对话框背景贴图
  6. JavaScript基础 --- 对象的认识
  7. 金山毒霸出现漏洞 多款著名软件被误杀
  8. TYVJ 1391 走廊泼水节
  9. 抖音视频发布软件助手功能都有哪些?是什么软件?
  10. c语言编译流程简单整理以及简单makefile编写