iOS視訊播放器WJMoviePlayer包含手勢關閉動畫
前言
這邊封裝了兩個類一個是播放器(WJMoviePlayerView),一個是獲取本地相簿的視訊(WJPhotoMovieManager),這兩個類一個是獲取本地視訊上傳伺服器,一個下載觀看,實現朋友圈展示視訊功能;
WJMoviePlayerView是支援網路視訊和本地視訊的播放。網路視訊是先下載,再播放的,集成了下載動畫,本地快取,手勢縮小和關閉。目前只支援豎屏播放。
WJPhotoMovieManager用了系統自帶的UIImagePickerController來實現的,可以控制視訊的播放時長

gif效果
WJMoviePlayerView
WJMoviePlayerView是基於AVPlayer和AVPlayerLayer來實現的,選擇AVPlayerLayer的原因是因為AVPlayerViewController有個黑色的背景view,影響到轉場動畫。AVPlayerLayer並不是直接新增到UIView上的,因為CALayer自帶隱式動畫,在下滑關閉視訊的時候會出現問題(放在UIView animateWithDuration: 中關閉隱式動畫會失效,當然你也可以把AVPlayerLayer單獨拿到動畫外面來解決問題,但是動畫時間必須和隱式動畫時間一致)。我這邊是寫了一個繼承UIView的WJPlayerView類,然後重寫了它的layerClass來實現的,同時為WJPlayerView添加了AVPlayer屬性來解決這個問題,具體看程式碼。

WJPlayerView
WJMoviePlayerView還添加了通知和監聽者,一個是視訊播放結束回撥,用來重複播放視訊

回撥

AVPlayerItemDidPlayToEndTimeNotification
另一個則是監聽了AVPlayerLayer的播放狀態,用來刪除轉場動畫的檢視,同時開始播放視訊

AVPlayerLayer的監聽
當然加了通知和監聽者,必須在dealloc中remove。
在上圖WJPlayerView的建立中可以看到有UIPanGestureRecognizer手勢的新增,這是用來實現下拉滑動關閉檢視的,包含了下拉縮小的動畫,目前下拉關閉檢視並不完美,只做了下拉速度大於500的時候就關閉播放器,能力有限。

手勢縮小關閉檢視
WJProgressView
WJProgressView是下載進度條(模仿新浪微博的),具體實現

進度條實現
WJMovieDownLoadManager
WJMovieDownLoadManager是通過NSURLSession實現的,用來下載視訊,下載完儲存到Library/Caches/wj_movie_file目錄下了,下載前會先判斷本地是否存在,不存在才會去下載,這裡需要注意的點是拿到本地路徑時,需要通過NSURL的fileURLWithPath方法去獲取URL,不然播放不了。
WJMoviePlayerView的使用

WJMoviePlayerView的使用
其中還有許多需要完善的地方,也存在bug,歡迎下載並提出意見,謝謝。