很多開發(fā)者以為AVPlayer不能在后臺播放視頻:應用退到后臺享幽,但能播放視頻的聲音(ps:不是通過切換相同的音頻來實現(xiàn))值桩,我在開發(fā)SDK的過程中也遇到這個需求奔坟,所幸解決了這個問題。下面我就來講講實現(xiàn)的過程咳秉。
一 iOS和tvOS應用程序需要您啟用某些后臺操作的某些功能。 播放應用程序所需的常見功能是播放背景音頻向挖。 啟用此功能后何之,當用戶切換到其他應用或鎖定iOS設備時咽筋,您的應用的音頻可以繼續(xù)。 此功能也需要在iOS中啟用高級播放功能蒜危,如AirPlay流媒體和畫中畫播放功能睹耐。啟用背景音頻有兩種方法:
1.在info.plist文件中添加Required background modes 如下圖所示
2.工程Capabilities
二 AVPlayer的處理
如果AVPlayer的當前項目在設備的顯示屏上顯示視頻 占拍,則當應用程序發(fā)送到后臺時捎迫, AVPlayer播放將自動暫停窄绒。 有兩種方法可以防止這種暫停:
1.禁用播放器項目中的視頻軌道崔兴。這種方法僅適用本地文件,不可用于網(wǎng)絡視頻位谋。
讓playerItem = <#你的播放器項目#>
讓tracks = playerItem.tracks
for trackItemTrack in tracks {
//查找視頻軌道并禁用軌道
playerItemTrack.assetTrack.hasMediaCharacteristic(AVMediaCharacteristicVisual){
playerItemTrack.isEnabled = false
}
}
2.從相關的AVPlayer刪除AVPlayer(將AVPlayerLayer player屬性設置為nil)掏父。這種方法不僅適用于本地視頻赊淑,還適用于網(wǎng)絡視頻,重點推薦陶缺。
重要提示:這些更改必須在應用程序實際切換到后臺之前生效。 否則AVPlayer將被暫停掺出。 應用程序委托的applicationDidEnterBackground方法方便此目的蛛砰。 如果禁用任何視頻軌道黍衙,則當應用程序轉換到前臺或視頻無法恢復播放時,必須重新啟用這些視頻軌道琅翻。 同樣,您必須將任何AVPlayerLayer重新連接到AVPlayer 聂抢。 應用程序委托applicationDidBecomeActive方法方便此目的琳疏。
//已經(jīng)進入后臺
- (void)applicationDidEnterBackground:(UIApplication *)application {
LYAVPlayerView *playerView =[LYAVPlayerView sharedInstance];
[playerView.playerLayer setPlayer:nil];
}
//已經(jīng)激活
- (void)applicationDidBecomeActive:(UIApplication *)application {
LYAVPlayerView *playerView =[LYAVPlayerView sharedInstance];
AVPlayer *player =playerView.player;
[playerView.playerLayer setPlayer:player];
}