1. 程式人生 > 程式設計 >iOS視訊中斷後臺音樂播放的處理方法

iOS視訊中斷後臺音樂播放的處理方法

問題(App Store 使用者評論反饋):

  • 後臺音樂播放器播放時啟動App音樂播放器暫停,只能手動恢復
  • 手機靜音模式下視訊播放沒有聲音

解決方案:

在播放音訊時讓其他程式靜音,或者在其他程式的音訊之上播放音訊。

AVAudioSession 類由 AVFoundation 框架引入。每個 iOS 應用都有一個音訊會話。這個會話可以被 AVAudioSession 類的 sharedInstance 類方法訪問,如下:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];

在獲得一個 AVAudioSession 類的例項後,你就能通過呼叫音訊會話物件的 setCategory:error: 例項方法,來從 iOS 應用可用的不同類別中作出選擇。

下面列出了可供使用的音訊會話類別:

AVAudioSessionCategoryAmbient

這個類別不會停止其他應用的聲音,相反,它允許你的音訊播放於其他應用的聲音之 上,比如 iPod。你的應用的主 UI 執行緒會工作正常。呼叫 AVAPlayer 的 prepareToPlay 和 play 方法都將返回 YES。

AVAudioSessionCategorySoloAmbient

這個非常像 AVAudioSessionCategoryAmbient 類別,除了會停止其他程式的音訊回放,比如 iPod 程式。當裝置被設定為靜音模式,你的音訊回放將會停止。

AVAudioSessionCategoryRecord

這會停止其他應用的聲音(比如 iPod)並讓你的應用也不能初始化音訊回放(比如 AVAudioPlayer )。在這種模式下,你只能進行錄音。使用這個類別,呼叫 AVAudioPlayer 的 prepareToPlay 會返回 YES,但是呼叫 play 方法將返回 NO。主 UI 介面會照常工作。這時,即使你的裝置螢幕被使用者鎖定了,應用的錄音仍會繼續。

AVAudioSessionCategoryPlayback

這個類別會禁止其他應用的音訊回放(比如 iPod 應用的音訊回放)。你可以使用 AVAudioPlayer 的 prepareToPlay 和 play 方法,在你的應用中播放聲音。主 UI 介面會照常工作。這時,即使螢幕被鎖定或者裝置為靜音模式,音訊回放都會繼續。

AVAudioSessionCategoryPlayAndRecord

這個類別允許你的應用中同時進行聲音的播放和錄製。當你的聲音錄製或播放開始後,其他應用的聲音播放將會停止。主 UI 介面會照常工作。這時,即使螢幕被鎖定或者裝置為 靜音模式,音訊回放和錄製都會繼續。

AVAudioSessionCategoryAudioProcessing

這個類別用於應用中進行音訊處理的情形,而不是音訊回放或錄製。設定了這種模式,你在應用中就不能播放和錄製任何聲音。呼叫 AVAPlayer 的 prepareToPlay 和 play 方法都將 返回 NO。其他應用的音訊回放,比如 iPod,也會在此模式下停止。

解決方案:當我們自己開發的應用播放時,暫停其他應用的播放,當我們的應用播放完畢時,繼續其他應用的播放,核心程式碼如下:

具體實現

後臺音樂播放暫停與繼續

// 繼續播放後臺背景音樂,取消啟用當前應用的audio session
+ (void)resumeBackgroundSoundWithError:(NSError **)error {
  [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:error];
}
 
//暫停後臺背景音樂的播放,啟用當前應用的audio
+ (void)pauseBackgroundSoundWithError:(NSError **)error {
  
  AVAudioSession *session = [AVAudioSession sharedInstance];
  [session setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionAllowBluetooth error:error];
  [session setActive:YES error:error];
}
 
+ (void)pauseBackgroundSoundWithCategoryRecord {
  AVAudioSession *session = [AVAudioSession sharedInstance];
  [session setCategory:AVAudioSessionCategoryRecord error:nil];
  [session setActive:YES error:nil];
}

注:

  • Category 的選擇,取決於在啟用應用的 audio session 時,下一步要錄音還是播放,如果錄音的話,一定要設定 category 為 AVAudioSessionCategoryRecord
  • 如果是播放,那就設定 AVAudioSessionCategoryPlayback
  • 如果準備要錄音,而設定成了 AVAudioSessionCategoryPlayback ,可能會得到一個意想不到的的結果 Unexpected error or warning

總結

到此這篇關於iOS視訊中斷後臺音樂播放的處理方法的文章就介紹到這了,更多相關iOS視訊中斷後臺音樂播放內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!