最近,一直做tv端的播放器,有一些積累。而且github上的播放器項目都是手機端的,因此決定開源一個。代碼寫的不好,希望能讓同行少踩坑。
項目有不完善的地方,但是會快速迭代。
遇到的難點:
問題:1.小窗切換至全屏,體驗要流暢。
????????????????????? 思路:使用SurfaceView + IJKPlayer,SurfaceView負責畫面呈現,IJKPlayer負責播放控制。兩個Activity使用同一個IJKPlayer就可以了。但是,由于有緩沖提示,所以要把緩沖完成的標志位封裝到播放器身上。兩個界面使用的是同一個播放器實例,這樣緩沖進度條才正常。
問題2:SeekBar在手機上,監聽快進開始和結束,使用的是Touch事件。Tv是Key事件。所以,onStartTrackingTouch和onStopTrackingTouch失效。
????????????????????? 思路:封裝了監聽key事件開始拖動和結束拖動的方法。當時,可以存在不同盒子的適配問題。經測試,快進必須使用 拖動開始/拖動結束 這兩個方法,否則,時間進度提示不準確。
問題三:右鍵點擊一下,SeekBar快進的步長和MaxProgress,都需要根據視頻長度動態計算。
? ? ? ? ? ? ? ? ? ? 思路:獲取到視頻的時長(單位是秒),作為SeekBar的MaxProgress。setKeyProgressIncrement這個方法可以設置SeekBar的步長。我是每隔一秒更新一次進度條,這樣就可以實時更新進度了。
代碼設計:
PlayerBean:對播放器及其狀態的封裝(一個Player要在兩個類中使用)
SinglePlayerUtil:播放器實例的管理
BasicUiController:UI界面的管理,界面發生變化,支持擴展
FullScreenPlayer:播放器的創建、Surface的創建,播放器狀態發生變化時,向BaseUIController發送消息來更新界面。
LiveConsole:控制面板的容器類,目前只有暫停/開始按鈕。
MySeekBar:定制的Tv版進度條。