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.設置后台任務
+ (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.設置后台播放
//后台播放音頻設置 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; //讓app支持接受遠程控制事件 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
2.3.記錄后台播放代號
// 后台播放任務Id UIBackgroundTaskIdentifier _bgTaskId; // 設置音頻會話,允許后台播放 _bgTaskId = [SoundTool backgroundPlayerID:_bgTaskId];
作者: 清澈Saup
出處: http://www.cnblogs.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。