1. 程式人生 > >Android視訊播放器——JiaoZiVideoPlayer / JiaoZiVideoPlayer進度問題

Android視訊播放器——JiaoZiVideoPlayer / JiaoZiVideoPlayer進度問題

(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並未對外暴露,所以我們需要繼承相關類來實現。