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