Android視訊播放器——JiaoZiVideoPlayer / JiaoZiVideoPlayer進度問題
阿新 • • 發佈:2019-02-09
(1)需求
專案中,如果需要儲存進度,以便下次繼續播放或者始終從頭開始播放,就需要考慮設定進度的問題。
(2)使用
情況一,始終從頭開始播放:
jzVideoPlayerStandard.SAVE_PROGRESS=false;//不儲存進度
設定此句即可。
情況二,儲存進度,下次直接續播:
情況三,儲存進度,下次以彈框等形式讓使用者“選擇續播還是從頭開始”:
①儲存時機
監聽到使用者結束視訊(這裡並非指觀看到視訊末尾,而是某些操作造成視訊結束,eg.使用者按返回鍵finish掉該播放介面)時,我們就需要儲存。如果finish前,視訊已經播放結束,則刪除該視訊的進度,下次重新開始。
這裡我們監聽onCompletion()時,作以下處理:
if (playerListVideo.currentState == CURRENT_STATE_AUTO_COMPLETE)//已經播放完成,避免崩潰【因為此時獲取進度會報錯】 return; long currentPositionWhenPlaying = playerListVideo.getCurrentPositionWhenPlaying();////獲取當前播放進度 long position=JZMediaManager.instance().getCurrentPosition(); Log.d("當前播放進度",""+currentPositionWhenPlaying //getCurrentPositionWhenPlaying有時會返回0,所以用position +" ---- "+ position+" 總長度= "+getDuration()); if (position>1000 && position<getDuration()){//大於1s時儲存 DBService.saveVideoProgress(context,item.getId(),2,position,getDuration()); }else {//刪除 DBService.deleteVideoProgress(context,item.getId()); }
這裡,因為儲存的資料比較多,所以我是儲存在本地資料庫中。
②儲存方式
如果涉及的視訊少,可以選擇儲存本地,也可以呼叫該框架自己的儲存方法(原理都是儲存本地);
如果涉及視訊很多,要記錄不同使用者觀看、時長、觀看進度、視訊型別等資訊時,建議儲存在本地資料庫中。
③設定進度
playerListVideo.seekToInAdvance=videoProgress;//跳轉到指定的播放進度
playerListVideo.startButton.performClick();//響應點選事件
當然在監聽到播放完成onAutoCompletion()後,需要將seekToInAdvance置為0。 否則觀看結束,未退出介面的情況下,再次點選播放按鈕,會直接從之前設定的seekToInAdvance值開始,而不是從頭開始播放。同時,還要刪除之前儲存的進度.
備註:
由於播放完成的監聽方法onCompletion()和onAutoCompletion(),JiaoZiVideoPlayer並未對外暴露,所以我們需要繼承相關類來實現。