admin
2021-02-03 1981dee5aec45793d3c4ebdbc4e637528c71b3c5
BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java
@@ -41,10 +41,9 @@
import com.fun.xm.ad.FSThirdAd;
import com.fun.xm.ad.adloader.FSSRFeedAdLoader;
import com.fun.xm.ad.adview.FSFeedAD;
import com.fun.xm.ad.adview.FSPreMediaView;
import com.fun.xm.ad.callback.FSFeedAdCallBack;
import com.fun.xm.ad.listener.FSADMediaListener;
import com.funshion.video.logger.FSLogcat;
import com.funshion.video.util.FSError;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -53,10 +52,11 @@
import com.lcjian.library.widget.RatioLayout;
import com.qq.e.ads.cfg.VideoOption;
import com.qq.e.ads.nativ.MediaView;
import com.qq.e.ads.nativ.NativeADMediaListener;
import com.qq.e.ads.nativ.NativeADEventListener;
import com.qq.e.ads.nativ.NativeUnifiedADData;
import com.qq.e.comm.constants.AdPatternType;
import com.qq.e.comm.util.AdError;
import com.umeng.analytics.MobclickAgent;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
@@ -71,9 +71,9 @@
import com.weikou.beibeivideo.util.VideoUtil;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import com.weikou.beibeivideo.util.ui.IPageEventListener;
import com.yeshi.video.player.VideoDefinition;
import com.yeshi.video.player.VideoEpisode;
import com.yeshi.video.player.VideoPlayerController;
import com.yeshi.video.player.common.VideoDefinition;
import com.yeshi.video.player.common.VideoEpisode;
import com.yeshi.video.player.common.VideoPlayerController;
import org.apache.http.Header;
import org.json.JSONObject;
@@ -83,6 +83,7 @@
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import de.greenrobot.event.EventBus;
@@ -119,8 +120,6 @@
    //风行广告加载器
    private FSSRFeedAdLoader fssrFeedAdLoader;
    private FSPreMediaView mFSVideoAD;
    private FunshionPlayInfo playInfo;
@@ -192,6 +191,7 @@
            @Override
            public void onAdLoadedFail(int i, String s) {
                Log.i(TAG, "onAdLoadedFail:" + s);
                iadLoadListener.finishAd();
            }
            @Override
@@ -249,7 +249,8 @@
            fsADView.bindAdToView(imageView, clickableViews, null);
        } else if (fsad.isVideo()) {
            MediaView mediaView = new MediaView(getContext());
            fsADView.bindMediaView(mediaView, getVideoOption(), new NativeADMediaListener() {
            fsADView.bindMediaView(mediaView, getVideoOption(), new FSADMediaListener() {
                @Override
                public void onVideoClicked() {
@@ -262,7 +263,7 @@
                }
                @Override
                public void onVideoError(AdError adError) {
                public void onVideoError(int i, String s) {
                    iadLoadListener.finishAd();
                }
@@ -373,6 +374,28 @@
        if (mLayoutInflater == null)
            return;
        gdtAd = ad;
        gdtAd.setNativeAdEventListener(new NativeADEventListener() {
            @Override
            public void onADClicked() {
                Log.v(TAG, "onADClicked");
            }
            @Override
            public void onADError(AdError adError) {
                Log.v(TAG, "onADError");
            }
            @Override
            public void onADExposed() {
                Log.v(TAG, "onADExposed");
            }
            @Override
            public void onADStatusChanged() {
                Log.v(TAG, "onADStatusChanged");
            }
        });
        final View mContainer = mLayoutInflater.inflate(R.layout.item_funshion_gdt_ad_view, null);
        mDownloadButton = mContainer.findViewById(R.id.btn_download);
        mMediaView = mContainer.findViewById(R.id.gdt_media_view);
@@ -443,6 +466,7 @@
        }
        //作为customClickableViews传入,点击不进入详情页,直接下载或进入落地页,只有视频广告生效,
        // 如果是图文,clickableViews和customClickableViews点击逻辑一致
        fsADView.bindAdToView(mContainer, clickableViews, mDownloadButton);
        if (ad.getAdPatternType() == AdPatternType.NATIVE_VIDEO) {
@@ -453,14 +477,13 @@
                    Log.v(TAG, "showAd type video 2");
                    mImagePoster.setVisibility(View.GONE);
                    mMediaView.setVisibility(View.VISIBLE);
//                    ad.startVideo();
                }
            });
            //4秒内视频还没加载完成的话就跳过
            tv_skip.removeCallbacks(playADErrorRunnable);
            tv_skip.postDelayed(playADErrorRunnable, 4000);
            fsADView.bindMediaView(mMediaView, getVideoOption(), new NativeADMediaListener() {
            tv_skip.postDelayed(playADErrorRunnable, 10000);
            fsADView.bindMediaView(mMediaView, getVideoOption(), new FSADMediaListener() {
                @Override
                public void onVideoInit() {
                    Log.d(TAG, "onVideoInit: ");
@@ -527,12 +550,17 @@
                }
                @Override
                public void onVideoError(AdError error) {
                public void onVideoError(int i, String s) {
                    iadLoadListener.finishAd();
                }
            });
            ad.startVideo();
//            mMediaView.post(new Runnable() {
//                @Override
//                public void run() {
//                    ad.startVideo();
//                }
//            });
        } else if (ad.getAdPatternType() == AdPatternType.NATIVE_2IMAGE_2TEXT ||
                ad.getAdPatternType() == AdPatternType.NATIVE_1IMAGE_2TEXT) {
@@ -562,16 +590,12 @@
    private void adShowFinish(FunshionPlayInfo info) {
        fl_ad.setVisibility(View.GONE);
        fl_ad.removeAllViews();
        mFSVideoAD = null;
        //播放视频
        mVideoSurfView.postDelayed(new Runnable() {
            @Override
            public void run() {
                //播放视频
                if (!StringUtils.isNullOrEmpty(info.getPlayUrl().getAid()))
                    playMedia(info.getPlayUrl().getAid(), (info.getPosition() + 1) + "");
                else
                    playVideo(info.getPlayUrl().getVid());
                playVideo(info.getPlayUrl().getCode());
            }
        }, 1000);
    }
@@ -626,7 +650,7 @@
    /**
     * 播放视频
     */
    public synchronized void playVideo(String videoID) {
    public synchronized void playVideo(String code) {
        createPlayer();
        if (mVideoPlayer.isPlaying()) {
            FSLogcat.e(TAG, "Call player to stop");
@@ -635,36 +659,15 @@
        }
        //!!!注意播放长短视频构建的FSVideoReqData有区别。短视频没有epso分集ID。长视频有。填写错误将无法正常播放
        //FSVideoReqData构建需要的数据需要从服务器获取。主要是媒体资源videoID:“VIDEO_ID” 默认 清晰度:new Definition(Definition.CLARITY_LOW) 以及Accesstoken:Accesstoken
        mFSVideoReqData = new FSVideoReqData(videoID, new Definition(Definition.CLARITY_LOW), FunshionConstant.ACCESS_TOKEN);
        mFSVideoReqData = new FSVideoReqData(code, new Definition(Definition.CLARITY_SUPPER));
        try {
            Log.d(TAG, "request");
            mFunshionIVideoPlayer.requestAndPrepare(mFSVideoReqData, FunshionConstant.APICODE);
            mFunshionIVideoPlayer.requestAndPrepare(mFSVideoReqData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 播放媒体
     */
    public synchronized void playMedia(String mediaID, String epso) {
        createPlayer();
        if (mVideoPlayer.isPlaying()) {
            FSLogcat.e(TAG, "Call player to stop");
            mVideoPlayer.stop();
            mVideoPlayer.reset();
        }
        //!!!注意播放长短视频构建的FSVideoReqData有区别。短视频没有epso分集ID。长视频有。填写错误将无法正常播放
        //FSVideoReqData构建需要的数据需要从服务器获取。主要是媒体资源videoID:“VIDEO_ID”epso 媒体分集ID 默认 清晰度:new Definition(Definition.CLARITY_LOW) 以及Accesstoken:Accesstoken
        mFSVideoReqData = new FSVideoReqData(mediaID, epso, new Definition(Definition.CLARITY_LOW), FunshionConstant.ACCESS_TOKEN);
        try {
            Log.d(TAG, "request");
            mFunshionIVideoPlayer.requestAndPrepare(mFSVideoReqData, FunshionConstant.APICODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public synchronized void stopPlay() {
        if (mVideoPlayer != null && mVideoPlayer.isPlaying()) {
@@ -711,6 +714,11 @@
    FSCallback mFSCall = new FSCallback() {
        @Override
        public void onFailed(com.funshion.playsdk.constant.FSError fsError) {
            Log.d(TAG, fsError.errorMessage);
        }
        @Override
        public void onDefinition(List<Definition> definitions, Definition currDefinition) {
            for (Definition definition : definitions) {
                Log.e("FE", "get Definition " + definition);
@@ -731,11 +739,6 @@
            vdf.setClarity(mCurrDefinition.getStringDefinition());
            vdf.setName(getDefinitionName(mCurrDefinition.getStringDefinition()));
            vpc_funshion.setDefinition(vdfList, vdf);
        }
        @Override
        public void onFailed(FSError arg0) {
            Log.d(TAG, "onFailed" + arg0);
        }
        public void onReceiveUrl(String url) {
@@ -936,7 +939,8 @@
            autoReSize(mediaPlayer);
        else
            autoReSize(mVideoPlayer);
        vpc_funshion.changeOrien(getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        if (getActivity() != null)
            vpc_funshion.changeOrien(getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    //电池电量监控
@@ -972,6 +976,13 @@
    public void onEventMainThread(FunshionPlayInfo info) {
        if (VideoUtil.videoEpisodeList == null || VideoUtil.videoEpisodeList.size() == 0) {
            //加载缓存内容
            VideoUtil.loadVideoEpisodeListCache(BeibeiVideoApplication.application);
        }
        //风行视频播放
        MobclickAgent.onEventObject(BeibeiVideoApplication.application, "funtv-play", new HashMap<>());
        Log.i(TAG, "onEventMainThread:FunshionPlayInfo");
        mCurrentPosition = info.getPosition();
        List<VideoEpisode> episodes = new ArrayList<>();
@@ -987,19 +998,23 @@
            episodes.add(es);
        }
        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);
                    }
                });
            }
        });
        try {
            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);
                        }
                    });
                }
            });
        } catch (Exception e) {
            Log.i(TAG, "出错了:" + e.getMessage());
        }
    }
@@ -1054,6 +1069,14 @@
        if (mVideoPlayer != null && mVideoPlayer.isPlaying())
            mVideoPlayer.pause();
        //播放统计
        BeibeiVideoAPI.playStatistic(BeibeiVideoApplication.application, mVideoInfo.getId(), videoResource.getId() + "", new BasicTextHttpResponseHandler() {
            @Override
            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
            }
        });
        BeibeiVideoAPI.getPlayUrl(BeibeiVideoApplication.application, uid, detailInfo.getType(), mVideoInfo.getId(),
                detailInfo.getId(), videoResource.getId(), detailInfo.geteId(),
                new BasicTextHttpResponseHandler() {
@@ -1083,6 +1106,8 @@
                                    .optString("Params"));
                            info.setAid(data.optString("Aid"));
                            info.setVid(data.optString("Vid"));
                            info.setCode(jsonObject.getJSONObject("Data")
                                    .optString("Code"));
                            playInfo.setPlayUrl(info);
                            mShowAd = false;
                            EventBus.getDefault().post(playInfo);