張鵬
摘 要:AVPlayer是用于管理媒體資產的播放和定時控制。它提供了控制播放器的方法,如它可以在媒體的時限內播放,暫停,和改變播放的速度,可以使用AVPlayer來播放本地和遠程的視頻媒體文件,如QuickTime影片和MP3音頻文件,以及視聽媒體使用HTTP流媒體直播服務。獲取源代碼,請訪問我的GitHub。
關鍵詞:m3u8流媒體;AVPlayer;iOS視頻播放器;自定義播放
1 AVPlayer播放的兩個層
1.1 一個普通播放器的組成
1.2 創(chuàng)建播放層視圖類
(1)使用AVPlayer需導入AVFoundation框架
(2)創(chuàng)建類VideoPlayerView。
(3)播放器的初始化,在VedioPlayerView里創(chuàng)建AVPLayerLayer并把AVPlayer加入
(4)接著設置下播放窗口大小為試圖大小并加到視圖的層上。注意這里也可以先加AVURLAsset,本例未使用這個方式,self.asset可以記錄緩存大小,而使用AVURLAsset初始化URL代碼太復雜。
(5)播放層視圖類里的屬性。
(6)視頻播放需大量使用KVO和NSNotificationCenter。
1.3 創(chuàng)建控制層視圖類
(1)控制層在視頻視圖層的上面一層,用來控制視頻的播放,如圖
(2)創(chuàng)建類ControlView??刂茖釉谝曨l視圖的上面一層,用來控制視頻的播放。
(3)拖拽按鈕到控制層視圖類里,并添加屬性。
2 AVPlayer的功能和組成
基于AVPlayer封裝的輕量級播放器,可以播放本地網絡視頻,易于定制,適合初學者學習打造屬于自己的視頻播放器。
2.1 初始化播放器和配置
2.1.1 播放器的初始化
初始化
2.1.2 播放窗口放置方式videoGravity
放置方式有以下三種:
(1)AVLayerVideoGravityResizeAspect 按比例填充
(2)AVLayerVideoGravityResizeAspectFill 按比例最大化填充
(3)AVLayerVideoGravityResize 拉伸填充
這里使用按比例最大化填充
2.1.3 如果播放時需要顯示視頻里附帶的字母可以設置顯示字幕
字幕選擇
2.2 橫屏全屏以及旋轉
(1)點擊全屏按鈕或者旋轉手機的時候,判斷旋轉方向并全屏播放。
(2)收到系統(tǒng)屏幕旋轉的通知調用deviceDidRotate方法。
(3)當橫屏時播放窗口放置在APP最上層,豎屏時銷毀。橫屏時調用的方法主要完成,1在父窗口移除播放器,2橫屏全屏尺寸,3把播放器加在視圖最上層。
(4)豎屏時調用的方法主要完成,1在父窗口移除播放器,2豎屏窗口尺寸,3把播放器加回到原先fatherView豎屏窗口。
2.3 進度條
刷新進度條包括,1當前時間顯示、2進度百分比。在播放器里添加一個觀察者每一秒鐘監(jiān)聽一次并刷新進度。
2.4 前后臺切換播放
收到系統(tǒng)播放退到后臺的通知調用appWillResignActive方法。
收到系統(tǒng)播放進入前臺的通知調用appDidBecomeActive方法。
2.5 播放的銷毀
當播放器被父視圖移除時候(removefromSuperView())會調用播放視圖的deinit()方法。需要同時銷毀觀察者和紀錄退出時的播放時間。
3 使用封裝好的AVPlayer
3.1 播放的加載
在視圖控制器ViewController加入PlayURL方法。
3.2 播放\暫停
在視圖控制器ViewController加入播放、暫停按鈕的點擊事件。
3.3 手勢的調用
(1)在手勢添加在播放視圖上。方法和屬性添加到控制器中。
(2)在視圖控制器ViewController加入單擊播放窗口出現(xiàn)控制視圖,再次點擊控制視圖消失。
3.4 分享等自定義其他功能
在視圖控制器ViewController拖入分享圖標的方法,讓ShareView彈出到控制器的view視圖的最上層。加入其他功能方法以此類推。
4 結語
表述能力有限,如果大家喜歡的話,希望進入github網址star一下。
我的GitHub:https://github.com/zhangpengfic/ZPlayer。