之前的需求完成了,實(shí)現(xiàn)了列表中的視頻自動播放。但是問題又來了嗦哆,產(chǎn)品又提出了一個(gè)新的需求,我們的App之前的視頻播放是在內(nèi)容流中實(shí)現(xiàn)的爵赵,沒有自動播放的時(shí)候吝秕,用戶需要點(diǎn)擊視頻進(jìn)入一個(gè)播放頁面,在播放頁面進(jìn)行播放空幻,現(xiàn)在的內(nèi)容流中會自動播放烁峭,貌似播放頁面已經(jīng)不需要了?但是考慮到廣告收益秕铛,產(chǎn)品要求點(diǎn)擊正在播放的視頻约郁,要進(jìn)入視頻播放頁面僅需播放。
1.plan 1:點(diǎn)擊時(shí)記錄當(dāng)前的播放的進(jìn)度但两,跳轉(zhuǎn)到詳情頁時(shí)傳入進(jìn)度鬓梅,進(jìn)入新界面在視頻加載完成后直接從記錄的位置開始播放。
這個(gè)想法沒什么問題谨湘,但是實(shí)際過程中绽快,會出現(xiàn)嚴(yán)重的跳轉(zhuǎn)不準(zhǔn)確(缺少關(guān)鍵幀)和不連續(xù)芥丧,因?yàn)闉檫M(jìn)入新頁面之前要釋放播放器,進(jìn)入新頁面后重新創(chuàng)建播放器必然有個(gè)初始化的過程坊罢。即使有緩存续担,progressBar還是會一閃而過,體驗(yàn)相當(dāng)?shù)牟缓冒±翔F活孩。所以這種方法是不可行的物遇。
2.plan 2: 既然plan1出現(xiàn)的問題,是因?yàn)橹匦聞?chuàng)建播放器導(dǎo)致憾儒,那么是否可以不重新創(chuàng)建播放器呢询兴?? 直接將播放器挪過去呢起趾?诗舰?
首先看了下我們的播放器,比較早版本的JCVideoPlayer 阳掐,播放器繼承自FrameLayout始衅。既然是View,那么移動播放器是可行的缭保。所以進(jìn)入新頁面之前不應(yīng)該釋放播放器汛闸。
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可以獲取全局的播放器實(shí)例,由于同時(shí)只有一個(gè)播放器在播放艺骂,所以在點(diǎn)擊視頻時(shí)存在的播放器即為當(dāng)前的播放器诸老,此時(shí)通過shouldRelease 來控制此時(shí)不釋放播放器,然后進(jìn)入新頁面钳恕。
新界面在創(chuàng)建播放器的是否判斷一下是否已有播放器實(shí)例别伏,如果有,直接使用原來的實(shí)例忧额。
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 來判斷是否需要繼續(xù)播放厘肮,注意通過attachNewParent 方法 attach播放器,謹(jǐn)記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);
由于是繼續(xù)播放,所以不需要設(shè)置URI托嚣,我們的視頻播放也是可以上下切換的所以播放完成后需要重置狀態(tài)值巩检,防止切換回來時(shí)沒有設(shè)置url導(dǎo)致出錯(cuò)。
最后返回原頁面時(shí)J酒簟>た蕖! 記著要重新加載被扣掉播放器的item7蛏ぁ3俾荨3寤唷!
思路大概如此煮仇,很簡單就可以實(shí)現(xiàn)跳轉(zhuǎn)頁面后視頻繼續(xù)播放啦~