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