前言

接手了一个有一些历史的项目,这个项目当中的环信比较老,也有一段时间没有运营了,再次运行起来之后,发现音频拨打通之后没有任何的声音。查来查去,也发了工单,找不到问题的原因。然后重新梳理代码,发现里面有AVAudioSession这么一个玩意儿,经过一番查找学习,最后解决了这个问题。现在记录一下。

正文

首先讲一下问题原因以及解决,原因在于AVAudioSession设置的AVAudioSessionCategory的模式不对。解决方案为,

     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];

那么问题解决了,为什么会出现这个问题,需要讲解一下,或许你在使用环信的时候并没有遇到这个问题,但是当遇到了,希望可以帮助你提供思路。

AVAudioSessionCategory

首先讲一下AVAudioSessionCategory,这个枚举的设置会影响到当前应用的播放与录音相关配置。值得一提的是,改category设置之后,是可以根据使用场景灵活切换的,当只需要某一种模式的时候,是可以通过设置来进行变更的。以下为该category的列举,可以根据实际场景灵活判断:

AVAudioSessionCategoryAmbient

用于非以语音为主的应用,使用这个category的应用随着静音键屏幕关闭静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。**注意:**该Category无法在后台播放声音

AVAudioSessionCategorySoloAmbient

和AVAudioSessionCategoryAmbient相同,但是区别在于会中止其他应用的播放。

AVAudioSessionCategoryPlayback

用于以语音为主的应用,使用这个category的应用不会随着静音键屏幕关闭而静音。可在后台播放声音

AVAudioSessionCategoryRecord

用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。

AVAudioSessionCategoryPlayAndRecord

用于既需要播放声音需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。

AVAudioSessionCategoryOptions

主要用于控制当前应用和其他应用中间的关系,枚举如下:

AVAudioSessionCategoryOptionMixWithOthers

设置这个选项在激活会话时,不会打断其他应用程序的音频播放,在以下的选项中可用AVAudioSessionCategoryPlaybackAVAudioSessionCategoryPlayAndRecordAVAudioSessionCategoryMultiRoute

AVAudioSessionCategoryOptionDuckOthers

这个选项在激活会话时降低其他程序的音频播放声音,在以下的选项中可用AVAudioSessionCategoryPlayAndRecordAVAudioSessionCategoryRecord
主要是体现当前音频的重要性,例如使导航音量凸出于音乐播放的音量,特别关注的音量高于当前视频的音量等操作。

AVAudioSessionCategoryOptionAllowBluetooth

允许可免提蓝牙设备可使用输入通道

AVAudioSessionCategoryOptionDefaultToSpeaker

设置这个选项在没有其他通道的时候默认选择内置扬声器,类似于默认免提功能

AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWIthOthers

iOS9新加入的功能,当你的app偶尔的使用音频播放时打断其他应用,使其静音,并自动使用麦克风以及使用完毕后自动恢复其他应用的播放(可以在以下的选项中可用AVAudioSessionCategoryPlaybackAVAudioSessionCategoryPlayAndRecordAVAudioSessionCategoryMultiRoute
如果设置了这个选项,在关闭这个session时需要:

[myAudioSession setActive: NO with Options: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error: <#Your error object, or nil for testing#>];

这句代码是为了确保执行当前session之前被打断的正在播放的 audio app能都收到resume消息,从而恢复到正常播放的状态。

由旧版本环信对接之后没有声音,探索AVAudioSession的Category和Option相关推荐

  1. 【IM集成攻略】手把手教你环信对接离线推送,再搞不定把你头打掉

    前提条件 1.macOS系统,安装了xcode,并且配置好了cocoapods第三方管理工具 2.有苹果开发者账号 3.有环信开发者账号 (注册地址:https://console.easemob.c ...

  2. 老版本的环信,实现消息撤回功能。

    最近公司很久之前的一个集成过环信聊天功能的app,要增加消息撤回的功能,由于这个app是很久之前的..所以,那个时候的easeUi里面并没有这个功能,于是就参照有这个功能的sdk,把代码搬了过来.. ...

  3. 环信即时通信jdk,java版本服务器端的集成

    最近用到了环信即时通信云服务,在服务器集成的时候遇到了一些麻烦在这里记录一下: 首先,通过查看环信的开发者文档,地址在这里:http://docs.easemob.com/doku.php?id=st ...

  4. 【环信IM集成指南】Android 端常见问题整理

    1.如何修改系统通知中的头像和用户名 系统通知是在主module中自己写的,demo中是AgreeMsgDelegate,InviteMsgDelegate,OtherMsgDelegate中去修改头 ...

  5. 【环信IM集成指南】Web端常见问题整理

    1. 掉线之后,会有回调或通知吗? sdk有提供连接状态的回调监听 初始化 [IM开发文档] 2. 怎么转发多条聊天记录? 挑选你要转发的消息内容然后以自定义消息 或者ext扩展字段携带过去实现 3. ...

  6. Linux sdk工作的前景,环信Linux SDK测试版简直逆天 高端大气上档次

    万物互联时代,物联网创新方兴未艾.今日环信即时通讯云宣布环信LinuxSDK测试版正式发布,作为环信生态圈重要的布局,环信LinuxSDK测试版使用C++开发,原生支持Linux操作系统,适用于基于L ...

  7. android-使用环信SDK开发即时通信功能及源码下载

    最近项目中集成即时聊天功能,挑来拣去,最终选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁,说明文档清晰易懂.文档有android.ios.和后台服务器端,还是非常全的. 环信官网:htt ...

  8. 聊天服务器 单机性能,环信即时聊天服务器

    环信即时聊天服务器 内容精选 换一换 本章节通过示例项目"小蝌蚪即时交互游戏"介绍如何使用DevCloud开发基于PHP语言的H5应用.项目名称:小蝌蚪即时交互游戏.项目简介:小蝌 ...

  9. 环信android手机推送苹果收不到消息,环信iOS端离线推送收不到怎么办?(客服)...

    离线推送收不到,按照下面步骤一步一步进行排查: 0.如果你的app之前可以收到离线推送,突然收不到了,那么先到苹果开发者中心查看推送证书是否过期.如果过期了,需要重新制作证书,然后到环信管理后台将旧的 ...

最新文章

  1. 生鲜配送小程序源码_生鲜果蔬配送小程序开发源码
  2. 下拉菜单实现树状结构_二叉索引树(树状数组)的原理
  3. C++构造及析构执行顺序
  4. 深度学习之 SSD(Single Shot MultiBox Detector)
  5. python 中del 的用法
  6. java weblogic多数据源,039 在weblogic下部署jndi的多数据源
  7. 哲学家问题(java)的三个解法
  8. 研究大华3G设备接入自主视频开发平台
  9. synchronized 异常_Java:synchronized的深度解析
  10. matlab 中的元组(cell)
  11. Angular JS 学习笔记(二)
  12. 【HDU - 4342】History repeat itself(数学)
  13. chrome frame解决IE9一下不兼容问题
  14. jq ui-selectable中click单击事件,dblclick双击事件无效
  15. 网页版迅雷离线下载过程分析
  16. WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程
  17. 图表示学习之时序的事件和节点动态
  18. 服务器使用固态硬盘的优缺点
  19. 吐血分享:QQ群霸屏技术教程2017(维护篇)
  20. 低代码的价值,短期被高估,长期被低估

热门文章

  1. 安装spconv踩的坑
  2. Hexo-Next 博客搭建
  3. yii2一个简单的登录功能怎么搞?
  4. 爬虫学习,尝试爬取小说网站
  5. 你的压力狗狗懂,通过闻味就知道!英国学者做实验论证,专门收集人做数学题时的气味...
  6. 航空摄影测量中yaw,pitch,roll
  7. php视频播放链提取,从PHP获取Vimeo的直接链接视频
  8. 微信三方登录相关(Swift)
  9. 云平台设计思路——表单篇
  10. Tesseract-ocr识别中文并训练字库操作指南