From cd89367a01870afb5c1e818895abb03ffea42d88 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 15 十月 2020 18:25:52 +0800 Subject: [PATCH] 风行播放器完善 --- BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java | 268 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 227 insertions(+), 41 deletions(-) diff --git a/BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java b/BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java index 9c8901c..5f31b61 100644 --- a/BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java +++ b/BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java @@ -11,8 +11,10 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; +import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; @@ -22,6 +24,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import com.androidquery.AQuery; @@ -128,6 +131,9 @@ private MediaPlayer mediaPlayer; + //灞曠ず骞垮憡 + private boolean mShowAd = false; + public void setPageEventListener(IPageEventListener pageEventListener) { this.pageEventListener = pageEventListener; } @@ -137,6 +143,7 @@ public int getContentResource() { return R.layout.fragment_player_funshion; } + private void initPlayer() { mVideoSurfView.getHolder().addCallback(mVideoSurfaceViewCallBack); @@ -164,7 +171,18 @@ fssrFeedAdLoader = new FSSRFeedAdLoader(getContext(), FunshionConstant.AD_CHANNEL); } - private void loadAD() { + /** + * 鍔犺浇骞垮憡 + * + * @param iadLoadListener + */ + private synchronized void loadAD(IADLoadListener iadLoadListener) { + if (!mShowAd) { + iadLoadListener.finishAd(); + return; + } + + fl_ad.setVisibility(View.VISIBLE); String adid = "bfys_a_qt"; int width = fl_ad.getWidth(); int height = fl_ad.getHeight(); @@ -188,11 +206,11 @@ FSSRAdData fsad = fsADView.getFSAd(); if (null != gdtad) { //骞跨偣閫氭暟鎹嚜娓叉煋 - initGDTSelfRenderView(fsADView, gdtad); + initGDTSelfRenderView(fsADView, gdtad, iadLoadListener); } if (null != fsad) { //椋庤鏁版嵁鑷覆鏌� - initFSSelfRenderView(fsADView, fsad); + initFSSelfRenderView(fsADView, fsad,iadLoadListener); } if (fsADView.getParent() != null) { ((ViewGroup) fsADView.getParent()).removeAllViews(); @@ -216,7 +234,7 @@ } - private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad) { + private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad,IADLoadListener iadLoadListener) { if (fsad.isImage()) { ImageView imageView = new ImageView(getContext()); Glide.with(this).load(fsad.getMaterial()).into(imageView); @@ -225,7 +243,62 @@ fsADView.bindAdToView(imageView, clickableViews, null); } else if (fsad.isVideo()) { MediaView mediaView = new MediaView(getContext()); - fsADView.bindMediaView(mediaView, null, null); + fsADView.bindMediaView(mediaView, null, new NativeADMediaListener() { + @Override + public void onVideoClicked() { + + } + + @Override + public void onVideoCompleted() { + iadLoadListener.finishAd(); + } + + @Override + public void onVideoError(AdError adError) { + iadLoadListener.finishAd(); + } + + @Override + public void onVideoInit() { + + } + + @Override + public void onVideoLoaded(int i) { + + } + + @Override + public void onVideoLoading() { + + } + + @Override + public void onVideoPause() { + + } + + @Override + public void onVideoReady() { + + } + + @Override + public void onVideoResume() { + + } + + @Override + public void onVideoStart() { + + } + + @Override + public void onVideoStop() { + + } + }); final Button button = new Button(getContext()); button.setText("鎵撳紑澹伴煶"); @@ -242,6 +315,7 @@ } }); List<View> clickableViews = new ArrayList<>(); + clickableViews.add(mediaView); fsADView.bindAdToView(button, clickableViews, null); } } @@ -253,17 +327,72 @@ protected MediaView mMediaView; protected ImageView mImagePoster; protected LinearLayout mNative3imgAdContainer; + private TextView tv_skip;//璺宠繃 + private LayoutInflater mLayoutInflater; private NativeUnifiedADData gdtAd = null; + int totalTime = 0; + + private Runnable timer = null; + + private synchronized void autoTimer(final View view) { + + if (timer == null) { + timer = new Runnable() { + @Override + public void run() { + Log.i(TAG, "autoTimer:" + (remainTime - (gdtAd.getVideoCurrentPosition() / 1000))); + if (remainTime - (gdtAd.getVideoCurrentPosition() / 1000) > 0) { + tv_skip.setText((remainTime - (gdtAd.getVideoCurrentPosition() / 1000)) + "s鍚庡彲璺宠繃"); + tv_skip.setClickable(false); + } else { + tv_skip.setText("璺宠繃"); + tv_skip.setClickable(true); + } + autoTimer(view); + } + }; + view.postDelayed(timer, 1000); + } else { + view.removeCallbacks(timer); + view.postDelayed(timer, 1000); + } + } + + + int remainTime = 0; + + //骞垮憡鎾斁鍑洪敊 + Runnable playADErrorRunnable = new Runnable() { + @Override + public void run() { + if (gdtAd != null) { + gdtAd.destroy(); + adShowFinish(playInfo); + } + } + }; + //鑷覆鏌搗iew - private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad) { + private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad, IADLoadListener iadLoadListener) { + if (mLayoutInflater == null) + return; gdtAd = ad; - View mContainer = getLayoutInflater().inflate(R.layout.sr_gdt_ad_view, null); + final View mContainer = mLayoutInflater.inflate(R.layout.sr_gdt_ad_view, null); mDownloadButton = mContainer.findViewById(R.id.btn_download); mMediaView = mContainer.findViewById(R.id.gdt_media_view); mImagePoster = mContainer.findViewById(R.id.img_poster); mNative3imgAdContainer = mContainer.findViewById(R.id.native_3img_ad_container); + tv_skip = mContainer.findViewById(R.id.tv_skip); + tv_skip.setVisibility(View.GONE); + tv_skip.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + iadLoadListener.finishAd(); + } + }); + mAQuery = new AQuery(mContainer); int patternType = ad.getAdPatternType(); if (patternType == AdPatternType.NATIVE_VIDEO) { @@ -274,7 +403,6 @@ params.height = FrameLayout.LayoutParams.MATCH_PARENT; } mContainer.setLayoutParams(params); - } if (patternType == AdPatternType.NATIVE_2IMAGE_2TEXT || patternType == AdPatternType.NATIVE_VIDEO) { @@ -335,6 +463,10 @@ } }); + //4绉掑唴瑙嗛杩樻病鍔犺浇瀹屾垚鐨勮瘽灏辫烦杩� + tv_skip.removeCallbacks(playADErrorRunnable); + tv_skip.postDelayed(playADErrorRunnable, 4000); + VideoOption.Builder builder = new VideoOption.Builder(); builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.ALWAYS); @@ -364,11 +496,25 @@ @Override public void onVideoLoaded(int videoDuration) { Log.d(TAG, "onVideoLoaded: "); + tv_skip.removeCallbacks(playADErrorRunnable); } @Override public void onVideoStart() { Log.d(TAG, "onVideoStart"); + Log.d(TAG, "onVideoStart"); + if (ad.getVideoDuration() / 1000 > 5) + remainTime = 5; + else + remainTime = ad.getVideoDuration() / 1000; + + autoTimer(mContainer); + mContainer.post(new Runnable() { + @Override + public void run() { + tv_skip.setVisibility(View.VISIBLE); + } + }); } @Override @@ -394,12 +540,12 @@ @Override public void onVideoCompleted() { Log.d(TAG, "onVideoCompleted: "); - adShowFinish(); + iadLoadListener.finishAd(); } @Override public void onVideoError(AdError error) { - + iadLoadListener.finishAd(); } }); @@ -417,7 +563,7 @@ //骞垮憡灞曠ず瀹屾垚 - private void adShowFinish() { + private void adShowFinish(FunshionPlayInfo info) { fl_ad.setVisibility(View.GONE); fl_ad.removeAllViews(); mFSVideoAD = null; @@ -425,7 +571,11 @@ mVideoSurfView.postDelayed(new Runnable() { @Override public void run() { - EventBus.getDefault().post(playInfo); + //鎾斁瑙嗛 + if (!StringUtils.isNullOrEmpty(info.getPlayUrl().getAid())) + playMedia(info.getPlayUrl().getAid(), (info.getPosition() + 1) + ""); + else + playVideo(info.getPlayUrl().getVid()); } }, 1000); } @@ -436,6 +586,7 @@ rl_container = view.findViewById(R.id.rl_container); fl_container = view.findViewById(R.id.fl_container); fl_ad = view.findViewById(R.id.fl_ad); + mLayoutInflater = LayoutInflater.from(getContext()); } //鍒涘缓骞挎挱鎺ュ彈鑰呭璞� @@ -455,14 +606,8 @@ getContext().registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); getContext().registerReceiver(networkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); initAd(); - fl_ad.setVisibility(View.VISIBLE); - fl_ad.post(new Runnable() { - @Override - public void run() { - loadAD(); - } - }); - + mShowAd = true; + onEventMainThread(playInfo); } @Override @@ -589,10 +734,7 @@ VideoDefinition vdf = new VideoDefinition(); vdf.setClarity(mCurrDefinition.getStringDefinition()); vdf.setName(getDefinitionName(mCurrDefinition.getStringDefinition())); - vpc_funshion.setDefinition(vdfList, vdf); - - Toast.makeText(BeibeiVideoApplication.application, "褰撳墠娓呮櫚搴︼細" + currDefinition.getStringDefinition(), Toast.LENGTH_LONG).show(); } @Override @@ -634,9 +776,11 @@ isReady = false; Log.d(TAG, "surfaceDestroyed"); - if (mVideoPlayer.isPlaying()) { + if (mVideoPlayer != null) { position = mVideoPlayer.getCurrentPosition(); Log.d(TAG, "褰撳墠鎾斁鏃堕棿锛�" + position); + } + if (mVideoPlayer.isPlaying()) { mVideoPlayer.stop(); } } @@ -653,8 +797,8 @@ mVideoPlayer.prepare(); if (position > 0) mVideoPlayer.seekTo(position); - position = -1; Log.d(TAG, "缁挱鏃堕棿锛�" + position); + position = -1; } catch (IOException e) { e.printStackTrace(); } @@ -729,7 +873,8 @@ @Override public boolean onError(MediaPlayer mp, int what, int extra) { - mFunshionIVideoPlayer.onMediaPlayerError(what, extra); + if (mFunshionIVideoPlayer != null) + mFunshionIVideoPlayer.onMediaPlayerError(what, extra); return false; } }; @@ -741,14 +886,15 @@ @Override public void onDestroy() { - super.onDestroy(); stopPlay(); + if (tv_skip != null) + tv_skip.setVisibility(View.GONE); if (mFunshionIVideoPlayer != null) { mFunshionIVideoPlayer.onActivityDestroy(); mFunshionIVideoPlayer.release(); } - - + mLayoutInflater = null; + super.onDestroy(); } @Override @@ -761,7 +907,6 @@ super.onStop(); if (mVideoPlayer != null && mVideoPlayer.isPlaying()) mVideoPlayer.pause(); - } @Override @@ -774,6 +919,8 @@ gdtAd.resumeVideo(); gdtAd.startVideo(); } + + vpc_funshion.onResume(); } @Override @@ -784,6 +931,7 @@ if (mFunshionIVideoPlayer != null) mFunshionIVideoPlayer.onActivityPause(); EventBus.getDefault().unregister(this); + vpc_funshion.onPause(); } @@ -829,21 +977,35 @@ public void onEventMainThread(FunshionPlayInfo info) { + Log.i(TAG, "onEventMainThread:FunshionPlayInfo"); + mCurrentPosition = info.getPosition(); List<VideoEpisode> episodes = new ArrayList<>(); for (int i = 0; i < info.getVideoInfo().getVideoDetailList().size(); i++) { VideoDetailInfo detail = info.getVideoInfo().getVideoDetailList().get(i); VideoEpisode es = new VideoEpisode(); es.setId(detail.getId()); es.setTag(detail.getTag()); + es.setName(detail.getName()); es.setVideoId(info.getVideoInfo().getId()); + if (mCurrentPosition == i) + es.setVideoUrl(info.getPlayUrl().getUrl()); episodes.add(es); } - mCurrentPosition = info.getPosition(); - vpc_funshion.setContentView(fl_container).setVideoInfo(episodes, info.getVideoInfo().getName(), info.getPlayUrl().getUrl(), info.getPosition()).setVideoPlayerListener(this).build(getActivity(), FunshionPlayerFragment.this); - //鎾斁瑙嗛 -// playVideo(info.getVideoInfo().getVideoDetailList().get(info.getPosition()).getId()); - playMedia("99989", (info.getPosition() + 1) + ""); + vpc_funshion.setContentView(fl_container).setVideoInfo(episodes, info.getPosition(), mVideoInfo.getShowType(), "椋庤").setVideoPlayerListener(this).build(getActivity(), FunshionPlayerFragment.this); + loadAD(new IADLoadListener() { + @Override + public void finishAd() { + vpc_funshion.post(new Runnable() { + @Override + public void run() { + tv_skip.setVisibility(View.GONE); + adShowFinish(info); + } + }); + } + }); + } //鐩戝惉 @@ -886,13 +1048,17 @@ @Override public void selectEpisode(int p, VideoEpisode episode) { + mShowAd = false; //閫夐泦 - final FunshionPlayInfo playInfo = new FunshionPlayInfo(); + playInfo = new FunshionPlayInfo(); playInfo.setVideoInfo(mVideoInfo); playInfo.setPosition(p); playInfo.setCollected(collected); VideoDetailInfo detailInfo = mVideoInfo.getVideoDetailList().get(p); String uid = UserUtil.getUid(BeibeiVideoApplication.application); + if (mVideoPlayer != null && mVideoPlayer.isPlaying()) + mVideoPlayer.pause(); + BeibeiVideoAPI.getPlayUrl(BeibeiVideoApplication.application, uid, detailInfo.getType(), mVideoInfo.getId(), detailInfo.getId(), videoResource.getId(), detailInfo.geteId(), new BasicTextHttpResponseHandler() { @@ -913,14 +1079,17 @@ }.getType()); PlayUrl info = new PlayUrl(); info.setResource(resource); - info.setPlayType(Integer.parseInt(jsonObject - .getJSONObject("Data") + JSONObject data = jsonObject.getJSONObject("Data"); + info.setPlayType(Integer.parseInt(data .optString("PlayType"))); - info.setUrl(jsonObject.getJSONObject("Data") - .optString("Url")); - info.setParams(jsonObject.getJSONObject("Data") + info.setUrl( + data.optString("Url")); + info.setParams(data .optString("Params")); + info.setAid(data.optString("Aid")); + info.setVid(data.optString("Vid")); playInfo.setPlayUrl(info); + mShowAd = false; EventBus.getDefault().post(playInfo); } } @@ -933,4 +1102,21 @@ } + //淇濆瓨鏁版嵁 + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + Log.i(TAG, "onSaveInstanceState"); + } + + //鎭㈠鏁版嵁 + @Override + public void onViewStateRestored(@Nullable Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + Log.i(TAG, "onViewStateRestored"); + } + + interface IADLoadListener { + public void finishAd(); + } } -- Gitblit v1.8.0