最近封裝了一個音視頻播放器,拷貝進(jìn)項目即能使用,大致實現(xiàn)了以下功能:
-本地網(wǎng)絡(luò)音視頻播放(無網(wǎng)自動播放已緩存視頻)
-屏幕滑動調(diào)節(jié)進(jìn)度、亮度、音量(模擬器中音量亮度無法顯示)
-倍速播放
-全屏狀態(tài)畫面(自適應(yīng)、鋪滿)調(diào)節(jié)
-豎播視頻適配(豎播視頻全屏為豎屏)
-屏幕發(fā)生物理旋轉(zhuǎn)時調(diào)整全屏狀態(tài)
-在wifi條件下自動緩存網(wǎng)絡(luò)視頻
-斷點續(xù)播功能
-自定義播放結(jié)束頁面及音頻播放界面
-長按加速視頻
-畫中畫功能



具體實現(xiàn)源碼在以下鏈接中:
https://github.com/isHYE/HYPlayerDemo
調(diào)用方法:
將項目中HYPlayer文件夾拖拽進(jìn)自己項目中(項目為swift5編寫,部分語法需要自行適配)。
在自己controller中實例化“HYPlayerCommonView”

初始化|切換 音視頻則調(diào)用 updateCurrentPlayer 方法(具體方式查看demo)

HYPlayerCommonConfig為需要傳入播放器的唯一參數(shù)(可根據(jù)自己需求傳參),具體配置如下:

播放器 緩存|播放狀態(tài) 相關(guān)則會通過代理方法進(jìn)行回調(diào),如有需要可進(jìn)行實現(xiàn):

最后在controller的viewWillDisappear中調(diào)用 videoView.dealToDisappear()以銷毀播放器。
部分實現(xiàn)說明:
1.視頻全屏實現(xiàn):
通過AVAsset獲取視頻尺寸? ->? 根據(jù)視頻寬高判斷為橫播視頻還是豎播視頻? ->? 根據(jù)豎播橫播旋轉(zhuǎn)屏幕? ->? 全屏?xí)r從baseView移除播放器并添加至UIApplication.shared.windows,修改AVPlayerLayer尺寸


2.屏幕快捷操作:
通過重寫touchesBegan、touchesMoved、touchesEnded監(jiān)聽用戶滑動手勢? ->? 記錄滑動起始點及之后活動軌跡判斷所處功能區(qū)域? ->? 對播放器做出相應(yīng)調(diào)整
- AVPlayer.seek ...調(diào)整播放進(jìn)度
- UIScreen.main.brightness ... 調(diào)整屏幕亮度
- MPVolumeView -> UISlider.setValue ...調(diào)整音量


部分需要注意的點:
視頻全屏鎖定時需要在controller層修改 shouldAutorotate 屬性值來限制屏幕轉(zhuǎn)動(通過回調(diào) fullScreenLock() 修改isRollEnable)
?注意:在controller被UINavigationController或UITabBarController嵌套式,在這兩個基礎(chǔ)控制器也需要重寫以下屬性

?注意:通過判斷為退出當(dāng)前頁面還是前往二級頁面分別調(diào)用HYPlayer的dealToDisappear與playerPause。
dealToDisappear為銷毀播放器,調(diào)用后播放器不可再播放視頻。
playerPause為暫停播放器,可通過playerPlay繼續(xù)播飯。
附加功能:
添加緩存列表用于主動緩存視頻以及清除已緩存視頻。

播放器目前還有很多待完善的功能,大家如有什么建議或希望添加的功能也可留言作者,功能會持續(xù)更新!