Android视频播放器——JiaoZiVideoPlayer / JiaoZiVideoPlayer进度问题

宗政英才
2023-12-01

(1)需求

项目中,如果需要保存进度,以便下次继续播放或者始终从头开始播放,就需要考虑设置进度的问题。

(2)使用

情况一,始终从头开始播放

jzVideoPlayerStandard.SAVE_PROGRESS=false;//不保存进度

 

  设置此句即可。

 

 

情况二,保存进度,下次直接续播:

    具体方案,网上均有,比如 Android JiaoZiVideoPlayer源码分析中就有介绍,很简单。这里就不再说明了。

 

情况三,保存进度,下次以弹框等形式让用户“选择续播还是从头开始”:

①保存时机

监听到用户结束视频(这里并非指观看到视频末尾,而是某些操作造成视频结束,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并未对外暴露,所以我们需要继承相关类来实现。

    具体说明参见  Android视频播放器——JiaoZiVideoPlayer/JiaoZiVideoPlayer的常用方法

 

 

 


 

 

 

 类似资料: