(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的常用方法