作者: 清澈Saup
1. 前言
AVAudioSession是一個單例,無需實例化即可直接使用。AVAudioSession在各種音頻環境中起著非常重要的作用
針對不同的音頻應用場景,需要設置不同的音頻會話分類
1.1 ?AVAudioSession的類別
AVAudioSessionCategoryAmbient
–混音播放,例如雨聲、汽車引擎等,可與其他音樂一起播放
AVAudioSessionCategorySoloAmbient
–後台播放,其他音樂將被停止
AVAudioSessionCategoryPlayback
–獨占音樂播放
AVAudioSessionCategoryRecord
–錄制音頻
AVAudioSessionCategoryPlayAndRecord
–播放和錄制音頻
AVAudioSessionCategoryAudioProcessing
–使用硬件解碼器處理音頻,該音頻會話使用期間,不能播放或錄音
圖解:
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];