1. 程式人生 > >使用 AVAudioSession 實現後臺播放音樂

使用 AVAudioSession 實現後臺播放音樂

1. 前言  

  • AVAudioSession是一個單例,無需例項化即可直接使用。AVAudioSession在各種音訊環境中起著非常重要的作用

  • 針對不同的音訊應用場景,需要設定不同的音訊會話分類

1.1 ?AVAudioSession的類別  

  • AVAudioSessionCategoryAmbient

    –混音播放,例如雨聲、汽車引擎等,可與其他音樂一起播放

  • AVAudioSessionCategorySoloAmbient

    –後臺播放,其他音樂將被停止

  • AVAudioSessionCategoryPlayback

    –獨佔音樂播放

  • AVAudioSessionCategoryRecord

    –錄製音訊

  • AVAudioSessionCategoryPlayAndRecord

    –播放和錄製音訊

  • AVAudioSessionCategoryAudioProcessing

    –使用硬體解碼器處理音訊,該音訊會話使用期間,不能播放或錄音

圖解:

1.jpg

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];