Android 实现跳转页面时视频继续播放
之前的需求完成了,实现了列表中的视频自动播放。但是问题又来了,产品又提出了一个新的需求,我们的App之前的视频播放是在内容流中实现的,没有自动播放的时候,用户需要点击视频进入一个播放页面,在播放页面进行播放,现在的内容流中会自动播放,貌似播放页面已经不需要了?但是考虑到广告收益,产品要求点击正在播放的视频,要进入视频播放页面仅需播放。
1.plan 1:点击时记录当前的播放的进度,跳转到详情页时传入进度,进入新界面在视频加载完成后直接从记录的位置开始播放。
这个想法没什么问题,但是实际过程中,会出现严重的跳转不准确(缺少关键帧)和不连续,因为为进入新页面之前要释放播放器,进入新页面后重新创建播放器必然有个初始化的过程。即使有缓存,progressBar还是会一闪而过,体验相当的不好啊老铁。所以这种方法是不可行的。
2.plan 2: 既然plan1出现的问题,是因为重新创建播放器导致,那么是否可以不重新创建播放器呢?? 直接将播放器挪过去呢??
首先看了下我们的播放器,比较早版本的JCVideoPlayer ,播放器继承自FrameLayout。既然是View,那么移动播放器是可行的。所以进入新页面之前不应该释放播放器。
JCVideoPlayer videoPlayer = (JCVideoPlayer) JCVideoPlayerManager.getCurrentJcvd();
if (videoPlayer!=null){
JCVideoPlayer.shouldRelease = false;
ShowVideoActivity.startShowVideoActivity(this, Item, itemHomeTab.tab, 0, true);
}else {
ShowVideoActivity.startShowVideoActivity(this, tem, itemHomeTab.tab, 0);
}
JCVideoPlayer可以获取全局的播放器实例,由于同时只有一个播放器在播放,所以在点击视频时存在的播放器即为当前的播放器,此时通过shouldRelease 来控制此时不释放播放器,然后进入新页面。
新界面在创建播放器的是否判断一下是否已有播放器实例,如果有,直接使用原来的实例。
if (goOnPlay && JCVideoPlayerManager.getCurrentJcvd()!=null){
videoPlayer =(JCVideoPlayerStandard)JCVideoPlayerManager.getCurrentJcvd();
JCVideoPlayerManager.getCurrentJcvd().attachNewParent(mediaGroup);
JCVideoPlayerManager.setFirstFloor(JCVideoPlayerManager.getCurrentJcvd());
seekTime += videoPlayer.getCurrentPositionWhenPlaying();
}else {
videoPlayer = (JCVideoPlayerStandard) videoViewStub.inflate();
}
goOnPlay 来判断是否需要继续播放,注意通过attachNewParent 方法 attach播放器,谨记attach到新的页面钱需要在他之前的viewGroup中先remove掉,然后在新的容器中加入。
if (goOnPlay){
videoPlayer.setShowMute(false);
videoPlayer.setVolume(false);
JCVideoPlayer.shouldRelease = true;
progress.setVisibility(View.GONE);
videoPlayer.setShowReplayShare(true);
goOnPlay = false;
return;
}
videoPlayer.setUp(mediaUrl, false,
JCVideoPlayer.SCREEN_LAYOUT_NORMAL, mInjoyItem.title);
由于是继续播放,所以不需要设置URI,我们的视频播放也是可以上下切换的所以播放完成后需要重置状态值,防止切换回来时没有设置url导致出错。
最后返回原页面时!!! 记着要重新加载被扣掉播放器的item!!!!
思路大概如此,很简单就可以实现跳转页面后视频继续播放啦~