原文地址:http://www.cnblogs.com/qingche/p/4366335.html
1.前言
•AVAudioSession是一个单例,无需实例化即可直接使用。AVAudioSession在各种音频环境中起着非常重要的作用
•针对不同的音频应用场景,需要设置不同的音频会话分类
1.1AVAudioSession的类别
•AVAudioSessionCategoryAmbient
–混音播放,例如雨声、汽车引擎等,可与其他音乐一起播放
•AVAudioSessionCategorySoloAmbient
–后台播放,其他音乐将被停止
•AVAudioSessionCategoryPlayback
–独占音乐播放
•AVAudioSessionCategoryRecord
–录制音频
•AVAudioSessionCategoryPlayAndRecord
–播放和录制音频
•AVAudioSessionCategoryAudioProcessing
–使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音
图解:
类别 | 输入 | 输出 | 与iPOD混合 | 遵从静音 |
AVAudioSessionCategoryAmbient | No | Yes | Yes | Yes |
AVAudioSessionCategorySoloAmbient | No | Yes | No | Yes |
AVAudioSessionCategoryPlayback | No | Yes | No | No |
AVAudioSessionCategoryRecord | Yes | No | No | No |
AVAudioSessionCategoryPlayAndRecord | Yes | Yes | No | No |
2.后台播放音乐
2.1.设置后台任务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
+ (UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId
{
// 1. 设置并激活音频会话类别
AVAudioSession *session = [AVAudioSession sharedInstance];
[session AVAudioSessionCategoryPlayback error:nil];
[session setActive:YES error:nil];
// 2. 允许应用程序接收远程控制
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
// 3. 设置后台任务ID
UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
if
(newTaskId != UIBackgroundTaskInvalid && backTaskId != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:backTaskId];
}
return
newTaskId;
}
|
2.2.设置后台播放
1
2
3
4
5
6
7
|
//后台播放音频设置
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
//让app支持接受远程控制事件
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
|
2.3.记录后台播放代号
1
2
3
4
5
|
// 后台播放任务Id
UIBackgroundTaskIdentifier _bgTaskId;
// 设置音频会话,允许后台播放
_bgTaskId = [SoundTool backgroundPlayerID:_bgTaskId];
|