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