如果项目中遇到播放音频没有声音的情况下,可以查看当前的category是哪种,对应的解决问题
AVAudioSeesion的category属性确定了音频播放的方式
1、是进行录音还是播放?
2、当系统静音键按下时该如何表现?
3、是从扬声器还是从听筒里面播放声音?
4、插拔耳机后如何表现?
5、来电话/闹钟响了后如何表现?
6、其他音频App启动后如何表现?
...
@property(readonly) NSString *category;
category有七种类型
每个App启动时都会设置成上面说的默认状态,即其他App会被中断同时相应“静音”键的播放模式。通过下表可以细分每个类别的支持情况:
类别 | 当按“静音”或者锁屏是是否静音 | 是否引起不支持混音的App中断 | 是否支持录音和播放 |
---|---|---|---|
AVAudioSessionCategoryAmbient | 是 | 否 | 只支持播放 |
AVAudioSessionCategoryAudioProcessing | - | 都不支持 | 只支持播放 |
AVAudioSessionCategoryMultiRoute | 否 | 是 | 既可以录音也可以播放 |
AVAudioSessionCategoryPlayAndRecord | 否 | 默认不引起 | 既可以录音也可以播放 |
AVAudioSessionCategoryPlayback | 否 | 默认引起 | 只用于播放 |
AVAudioSessionCategoryRecord | 否 | 是 | 只用于录音 |
AVAudioSessionCategorySoloAmbient | 是 | 是 | 只用于播放 |
可以看到,其实默认的就是“AVAudioSessionCategorySoloAmbient”类别。从表中我们可以总结如下:
- 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进行使用
网友评论