admin
2020-10-10 8039a1b2fbfa3471b6f726d3e839d7867c81a84f
BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java
@@ -6,6 +6,7 @@
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
@@ -17,18 +18,29 @@
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.androidquery.AQuery;
import com.androidquery.callback.AjaxStatus;
import com.androidquery.callback.BitmapAjaxCallback;
import com.bumptech.glide.Glide;
import com.fun.xm.Definition;
import com.fun.xm.FSCallback;
import com.fun.xm.FSIVideoPlayer;
import com.fun.xm.FSPlayer;
import com.fun.xm.FSVideoReqData;
import com.fun.xm.ad.FSAD;
import com.fun.xm.ad.FSSRAdData;
import com.fun.xm.ad.FSThirdAd;
import com.fun.xm.ad.adloader.FSPreMediaAdLoader;
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.callback.FSPreMediaAdCallBack;
import com.funshion.video.logger.FSLogcat;
import com.funshion.video.util.FSError;
@@ -41,6 +53,12 @@
import com.lcjian.library.video.VideoEpisode;
import com.lcjian.library.video.VideoPlayerController;
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.NativeUnifiedADData;
import com.qq.e.comm.constants.AdPatternType;
import com.qq.e.comm.util.AdError;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
@@ -50,7 +68,9 @@
import com.weikou.beibeivideo.entity.VideoDetailInfo;
import com.weikou.beibeivideo.entity.VideoInfo;
import com.weikou.beibeivideo.entity.VideoResource;
import com.weikou.beibeivideo.entity.ad.PlayVideoPreADSetting;
import com.weikou.beibeivideo.entity.video.FunshionPlayInfo;
import com.weikou.beibeivideo.ui.ad.PlayVideoPreADFragment;
import com.weikou.beibeivideo.util.DimenUtils;
import com.weikou.beibeivideo.util.FunshionConstant;
import com.weikou.beibeivideo.util.UserUtil;
@@ -100,7 +120,7 @@
    private FrameLayout fl_container, fl_ad;
    //风行广告加载器
    private FSPreMediaAdLoader fsPreMediaAdLoader;
    private FSSRFeedAdLoader fssrFeedAdLoader;
    private FSPreMediaView mFSVideoAD;
@@ -141,7 +161,7 @@
    private void initAd() {
        FSAD.init(getContext().getApplicationContext(), Collections.singletonList(FunshionConstant.AD_ADP), FunshionConstant.AD_PARTENER, FunshionConstant.AD_TOKEN, FunshionConstant.AD_CHANNEL, FunshionConstant.AD_PRE_DOWNLOAD_CHANNEL);
        fsPreMediaAdLoader = new FSPreMediaAdLoader(getContext(), FunshionConstant.AD_CHANNEL);
        fssrFeedAdLoader = new FSSRFeedAdLoader(getContext(), FunshionConstant.AD_CHANNEL);
    }
    private void loadAD() {
@@ -149,40 +169,7 @@
        int width = fl_ad.getWidth();
        int height = fl_ad.getHeight();
        Log.i(TAG, String.format("fl_ad: width:%s  height:%s", width, height));
        fsPreMediaAdLoader.loadAD(adid, "", width, height, true, false, new FSPreMediaAdCallBack() {
            @Override
            public void onCreate(FSPreMediaView fsadView) {
                mFSVideoAD = fsadView;
                fl_ad.removeAllViews();
                fl_ad.addView(fsadView);
            }
            @Override
            public void onCreateThirdAD(List<FSThirdAd> fsThirdAd) {
            }
            @Override
            public void onClose() {
                adShowFinish();
            }
            @Override
            public void onADLoad() {
                if (null != mFSVideoAD) {
                    mFSVideoAD.showAD();
                }
            }
            @Override
            public void onVideoComplete() {
                adShowFinish();
            }
            @Override
            public void onADShow() {
            }
        fssrFeedAdLoader.loadAD(adid, "", width, height, true, false, new FSFeedAdCallBack() {
            @Override
            public void onClick() {
@@ -190,12 +177,238 @@
            }
            @Override
            public void onAdLoadedFail(int param1Int, String param1String) {
                Log.v(TAG, "onAdLoadedFail param1Int:" + param1Int + " MSG:" + param1String);
                adShowFinish();
            public void onAdLoadedFail(int i, String s) {
                Log.i(TAG,"onAdLoadedFail:"+s);
            }
            @Override
            public void onCreate(FSFeedAD fsADView) {
                Log.i(TAG,"onCreate");
                NativeUnifiedADData gdtad = fsADView.getAd();
                FSSRAdData fsad = fsADView.getFSAd();
                if (null != gdtad) {
                    //广点通数据自渲染
                    initGDTSelfRenderView(fsADView, gdtad);
                }
                if (null != fsad) {
                    //风行数据自渲染
                    initFSSelfRenderView(fsADView, fsad);
                }
                if (fsADView.getParent() != null) {
                    ((ViewGroup) fsADView.getParent()).removeAllViews();
                }
                fl_ad.removeAllViews();
                fl_ad.addView(fsADView);
                fsADView.render();
            }
            @Override
            public void onCreateThirdAD(List<FSThirdAd> list) {
                Log.i(TAG,"onCreateThirdAD");
            }
            @Override
            public void onADShow() {
                Log.i(TAG,"onADShow");
            }
        });
    }
    private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad) {
        if (fsad.isImage()) {
            ImageView imageView = new ImageView(getContext());
            Glide.with(this).load(fsad.getMaterial()).into(imageView);
            List<View> clickableViews = new ArrayList<>();
            clickableViews.add(imageView);
            fsADView.bindAdToView(imageView, clickableViews, null);
        } else if (fsad.isVideo()) {
            MediaView mediaView = new MediaView(getContext());
            fsADView.bindMediaView(mediaView, null, null);
            final Button button = new Button(getContext());
            button.setText("打开声音");
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (fsADView.isMute()) {
                        fsADView.setMute(false);
                        button.setText("关闭声音");
                    } else {
                        fsADView.setMute(true);
                        button.setText("打开声音");
                    }
                }
            });
            List<View> clickableViews = new ArrayList<>();
            fsADView.bindAdToView(button, clickableViews, null);
        }
    }
    //广点通广告控件
    protected AQuery mAQuery;
    protected Button mDownloadButton;
    protected MediaView mMediaView;
    protected ImageView mImagePoster;
    protected LinearLayout mNative3imgAdContainer;
    //自渲染view
    private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad) {
        View mContainer = getLayoutInflater().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);
        mAQuery = new AQuery(mContainer);
        int patternType = ad.getAdPatternType();
        if (patternType == AdPatternType.NATIVE_VIDEO) {
            ViewGroup.LayoutParams params = mContainer.getLayoutParams();
            if (null == params) {
                params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            } else {
                params.height = FrameLayout.LayoutParams.MATCH_PARENT;
            }
            mContainer.setLayoutParams(params);
        }
        if (patternType == AdPatternType.NATIVE_2IMAGE_2TEXT
                || patternType == AdPatternType.NATIVE_VIDEO) {
            mAQuery.id(R.id.img_poster).visibility(View.VISIBLE);
            mAQuery.id(R.id.img_logo).image(ad.getIconUrl(), false, true);
            Log.v(TAG, "Imgurl:" + ad.getImgUrl());
            mAQuery.id(R.id.img_poster).image(ad.getImgUrl(), false, true, 0, 0,
                    new BitmapAjaxCallback() {
                        @Override
                        protected void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) {
                            if (iv.getVisibility() == View.VISIBLE) {
                                iv.setImageBitmap(bm);
                            }
                        }
                    });
            mAQuery.id(R.id.text_title).textColor(R.color.colorAccent);
            mAQuery.id(R.id.text_title).text(ad.getTitle());
            mAQuery.id(R.id.text_desc).text(ad.getDesc());
        } else if (patternType == AdPatternType.NATIVE_3IMAGE) {
            mAQuery.id(R.id.img_1).image(ad.getImgList().get(0), false, true);
            mAQuery.id(R.id.img_2).image(ad.getImgList().get(1), false, true);
            mAQuery.id(R.id.img_3).image(ad.getImgList().get(2), false, true);
            mAQuery.id(R.id.native_3img_title).text(ad.getTitle());
            mAQuery.id(R.id.native_3img_desc).text(ad.getDesc());
        } else if (patternType == AdPatternType.NATIVE_1IMAGE_2TEXT) {
            mAQuery.id(R.id.img_logo).image(ad.getImgUrl(), false, true);
            mAQuery.id(R.id.img_poster).clear();
            mAQuery.id(R.id.text_title).text(ad.getTitle());
            mAQuery.id(R.id.text_desc).text(ad.getDesc());
        }
        List<View> clickableViews = new ArrayList<>();
        List<View> customClickableViews = new ArrayList<>();
        // 所有广告类型,注册mDownloadButton的点击事件
        clickableViews.add(mDownloadButton);
        if (ad.getAdPatternType() == AdPatternType.NATIVE_2IMAGE_2TEXT ||
                ad.getAdPatternType() == AdPatternType.NATIVE_1IMAGE_2TEXT) {
            // 双图双文、单图双文:注册mImagePoster的点击事件
            clickableViews.add(mImagePoster);
        } else if (ad.getAdPatternType() != AdPatternType.NATIVE_VIDEO) {
            // 三小图广告:注册native_3img_ad_container的点击事件
            clickableViews.add(mNative3imgAdContainer);
        }
        //作为customClickableViews传入,点击不进入详情页,直接下载或进入落地页,只有视频广告生效,
        // 如果是图文,clickableViews和customClickableViews点击逻辑一致
        fsADView.bindAdToView(mContainer, clickableViews, mDownloadButton);
        if (ad.getAdPatternType() == AdPatternType.NATIVE_VIDEO) {
            // 视频广告,注册mMediaView的点击事件
            fsADView.post(new Runnable() {
                @Override
                public void run() {
                    Log.v(TAG, "showAd type video 2");
                    mImagePoster.setVisibility(View.GONE);
                    mMediaView.setVisibility(View.VISIBLE);
//                    ad.startVideo();
                }
            });
            VideoOption.Builder builder = new VideoOption.Builder();
            builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.ALWAYS);
            builder.setAutoPlayMuted(false);
            builder.setDetailPageMuted(false);
            builder.setNeedCoverImage(true);
            builder.setNeedProgressBar(true);
            builder.setEnableDetailPage(true);
            builder.setEnableUserControl(false);
            VideoOption videoOption = builder.build();
            fsADView.bindMediaView(mMediaView, videoOption, new NativeADMediaListener() {
                @Override
                public void onVideoInit() {
                    Log.d(TAG, "onVideoInit: ");
                }
                @Override
                public void onVideoLoading() {
                    Log.d(TAG, "onVideoLoading: ");
                }
                @Override
                public void onVideoReady() {
                    Log.d(TAG, "onVideoReady");
                }
                @Override
                public void onVideoLoaded(int videoDuration) {
                    Log.d(TAG, "onVideoLoaded: ");
                }
                @Override
                public void onVideoStart() {
                    Log.d(TAG, "onVideoStart");
                }
                @Override
                public void onVideoStop() {
                    Log.d(TAG, "onVideoStop");
                }
                @Override
                public void onVideoPause() {
                    Log.d(TAG, "onVideoPause: ");
                }
                @Override
                public void onVideoResume() {
                    Log.d(TAG, "onVideoResume: ");
                }
                @Override
                public void onVideoClicked() {
                    Log.d(TAG, "onVideoClicked");
                }
                @Override
                public void onVideoCompleted() {
                    Log.d(TAG, "onVideoCompleted: ");
                }
                @Override
                public void onVideoError(AdError error) {
                }
            });
            ad.startVideo();
        } else if (ad.getAdPatternType() == AdPatternType.NATIVE_2IMAGE_2TEXT ||
                ad.getAdPatternType() == AdPatternType.NATIVE_1IMAGE_2TEXT) {
            // 双图双文、单图双文:注册mImagePoster的点击事件
            clickableViews.add(mImagePoster);
        } else {
            // 三小图广告:注册native_3img_ad_container的点击事件
            clickableViews.add(mNative3imgAdContainer);
        }
    }
    //广告展示完成
    private void adShowFinish() {
@@ -601,6 +814,7 @@
                vpc_funshion.setNetworkInfo(networkInfo, false);
            }
        }
    }