iOS 基於AVPlayer自定義視訊播放器

盧三發表於2017-12-20

前言:視訊播放是一個很常見的功能,系統自帶的有三種播放器 MPMoviePlayerController、AVPlayerViewController、AVPlayer。但是MPMoviePlayerController 在iOS9以後被棄用,AVPlayerViewController 只能用於iOS8以後,所以使用AVFoundation框架中的AVPlayer來自定義視訊播放器是很多專案的選擇。我封裝的LYAVPlayer只需幾行程式碼就可以實現視訊播放的功能:

         LYAVPlayerView *playerView =[LYAVPlayerView alloc]init];         
         playerView.frame =CGRectMake(0, 64, ScreenWidth,200);
         playerView.delegate =self;//設定代理
         [self.view addSubview:playerView];
         [playerView setURL:[NSURL URLWithString:VideoURL]];//設定播放的URL
         [playerView play];//開始播放
複製程式碼

一、開放的屬性和方法 1.AVPlayer本身並不顯示視訊!需要一個AVPlayerLayer播放層來顯示視訊,然後新增到父檢視的layer中。 2.AVPlayer只負責視訊管理和調控,而視訊資源是由AVPlayerItem提供的,每個AVPlayerItem對應一個視訊地址。

2183550-682ad3bbbd93789d.png

2183550-c094634076ef398a.png

二、代理方法

/**AVPlayerItem的三種狀態

*AVPlayerItemStatusUnknown,

*AVPlayerItemStatusReadyToPlay,

*AVPlayerItemStatusFailed

*/

//所有的代理方法均已回到主執行緒 可直接重新整理UI

// 可播放/播放中

- (void)videoPlayerIsReadyToPlayVideo:(LYAVPlayerView *)playerView;

//播放完畢

- (void)videoPlayerDidReachEnd:(LYAVPlayerView *)playerView;

//當前播放時間

- (void)videoPlayer:(LYAVPlayerView *)playerView timeDidChange:(CGFloat )time;

//duration 當前緩衝的長度

- (void)videoPlayer:(LYAVPlayerView *)playerView loadedTimeRangeDidChange:(CGFloat )duration;

//進行跳轉後沒資料 即播放卡頓

- (void)videoPlayerPlaybackBufferEmpty:(LYAVPlayerView *)playerView;

// 進行跳轉後有資料 能夠繼續播放

- (void)videoPlayerPlaybackLikelyToKeepUp:(LYAVPlayerView *)playerView;

//載入失敗

- (void)videoPlayer:(LYAVPlayerView *)playerView didFailWithError:(NSError *)error;
複製程式碼

GitHub原始碼

相關文章