ios AVAudioSession 音视频

之前觉得ios 嘛,音视频既然和硬件有一定关系的话,那么就苹果怎么规定就怎么写喽,但是一切都是从小事情做起的,如果那天去面试直接这样子说,那么对“技术”的不屑一顾自然也会被面试官不屑一顾,那么就跟随我一起来探秘下苹果给我们的接口


iOS给出的解决方案是"AVAudioSession" 


Session默认行为

1.可以进行播放,但是不能进行录制。

2.当用户将手机上的静音拨片拨到“静音”状态时,此时如果正在播放音频,那么播放内容会被静音。

3.当用户按了手机的锁屏键或者手机自动锁屏了,此时如果正在播放音频,那么播放会静音并被暂停。

4.如果你的App在开始播放的时候,此时QQ音乐等其他App正在播放,那么其他播放器会被静音并暂停。

默认的行为相当于设置了Category为“AVAudioSessionCategorySoloAmbient”,硬件只有一个,那么有必要限控制访问的个数。

虽然系统会在App启动的时候,激活这个唯一的AVAudioSession,但是最好还是在自己ViewController的 viewDidLoad 里面再次进行激活:
- (BOOL)setActive:(BOOL)active 
        error:(NSError * _Nullable *)outError;
如何要让自己的Session解除激活后恢复其他App Session的激活状态呢?
-(BOOL)setActive:(BOOL)active
  • withOptions:(AVAudioSessionSetActiveOptions)options
    error:(NSError * _Nullable *)outError;
这里的options传入 AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation  即可。 当然,也可以通过 otherAudioPlaying 变量来提前判断当前是否有其他App在播放音频。

七大Category

类别当按“静音”或者锁屏是是否静音是否引起不支持混音的App中断是否支持录音和播放
AVAudioSessionCategoryAmbient只支持播放
AVAudioSessionCategoryAudioProcessing-都不支持
AVAudioSessionCategoryMultiRoute既可以录音也可以播放
AVAudioSessionCategoryPlayAndRecord默认不引起既可以录音也可以播放
AVAudioSessionCategoryPlayback默认引起只用于播放
AVAudioSessionCategoryRecord只用于录音
AVAudioSessionCategorySoloAmbient只用于播放

//听筒模式-( void)setAudioSession{ AVAudioSession *audioSession=[ AVAudioSession sharedInstance]; //设置为播放和录音状态,以便可以在录制完之后播放录音 [audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; [audioSession setActive: YES error: nil];
}

//扬声器模式-( void)setAudioWaiFangSession{ AVAudioSession *audioSession=[ AVAudioSession sharedInstance]; //设置为播放 [audioSession setCategory: AVAudioSessionCategoryPlayback error: nil]; [audioSession setActive: YES error: nil];

}

UIDeviceProximityStateDidChangeNotification用来监听手机是否贴近面部,即耳朵。


通知接收之后,可以根据[[UIDevice currentDevice] proximityState]

来得到为当前的接近状态,如果为 YES 则为接近(触发),否则为离开(未触发),需要的时候可以直接拿来用。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值