admin
2020-10-15 cd89367a01870afb5c1e818895abb03ffea42d88
风行播放器完善
21个文件已修改
706 ■■■■ 已修改文件
BuWanVideo/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/fragment_player_funshion.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/sr_gdt_ad_view.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/video_detail_activity.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/entity/PlayUrl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/PlayVideoPreADFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoEpisodeFragment.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoEpisodeFragment2.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/FXBrowserActivity.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/video/FunshionPlayerFragment.java 268 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/CSJConstant.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/ExpressAdManager.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-mine/res/layout/video_player_controller.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-mine/src/com/lcjian/library/video/VideoEpisode.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-mine/src/com/lcjian/library/video/VideoEpisodeDialog.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-mine/src/com/lcjian/library/video/VideoPlayerController.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-mine/src/com/lcjian/library/video/VideoResourceUtil.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/AndroidManifest.xml
@@ -140,6 +140,7 @@
        <activity
            android:name="com.weikou.beibeivideo.ui.mine.FXBrowserActivity"
            android:configChanges="screenSize|keyboardHidden|orientation"
            android:hardwareAccelerated="true"
            android:label="@string/app_name">
        </activity>
@@ -204,6 +205,7 @@
        <activity
            android:name="com.weikou.beibeivideo.ui.video.VideoPlayerActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:hardwareAccelerated="true"
            android:label="@string/app_name"></activity>
BuWanVideo/res/layout/fragment_player_funshion.xml
@@ -14,8 +14,7 @@
        <FrameLayout
            android:id="@+id/fl_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/aliuser_edittext_bg_color_normal">
            android:layout_height="match_parent">
            <com.lcjian.library.widget.RatioLayout
                android:id="@+id/rl_container"
BuWanVideo/res/layout/sr_gdt_ad_view.xml
@@ -1,7 +1,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical">
        <RelativeLayout
            android:id="@+id/ad_info_container"
@@ -66,21 +66,20 @@
        <FrameLayout
            android:id="@+id/custom_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerInParent="true">
            <!-- 原生广告的视频组件 -->
            <com.qq.e.ads.nativ.MediaView
                android:id="@+id/gdt_media_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:background="#000" />
            <!-- 原生广告的大图 -->
            <ImageView
                android:id="@+id/img_poster"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="fitXY" />
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            <!-- 原生三小图 -->
            <LinearLayout
@@ -140,5 +139,22 @@
                    android:layout_margin="5dp"
                    android:textColor="@android:color/black" />
            </LinearLayout>
            <TextView
                android:id="@+id/tv_skip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top|right"
                android:layout_margin="3dp"
                android:background="@drawable/shape_splash_ad"
                android:clickable="false"
                android:paddingLeft="8dp"
                android:paddingTop="2dp"
                android:paddingRight="8dp"
                android:paddingBottom="2dp"
                android:text=""
                android:textColor="@color/white"
                android:textSize="14sp"
                android:visibility="gone"></TextView>
        </FrameLayout>
</LinearLayout>
BuWanVideo/res/layout/video_detail_activity.xml
@@ -17,11 +17,11 @@
        android:layout_weight="1"
        android:orientation="vertical">
        <!-- android:background="@color/bg_download_so" -->
        <FrameLayout
            android:id="@+id/fragment_video_play_container1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/bg_download_so">
            android:layout_height="wrap_content">
            <FrameLayout
                android:id="@+id/fragment_video_play_container"
@@ -56,7 +56,6 @@
                    android:layout_height="wrap_content">
                </FrameLayout>
                <FrameLayout
@@ -112,8 +111,6 @@
                    android:layout_height="50dp"
                    android:layout_gravity="center"
                    android:src="@drawable/ic_play"></ImageView>
            </FrameLayout>
BuWanVideo/src/com/weikou/beibeivideo/entity/PlayUrl.java
@@ -5,48 +5,68 @@
import com.google.gson.annotations.Expose;
public class PlayUrl implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Expose
    private VideoResource resource;
    @Expose
    private String url;
    @Expose
    private int playType;// 0、不可播 1、站外-html 2、站内-播放器
    @Expose
    private String params;
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Expose
    private VideoResource resource;
    @Expose
    private String url;
    @Expose
    private int playType;// 0、不可播 1、站外-html 2、站内-播放器
    @Expose
    private String params;
    @Expose
    private String aid;//专辑ID
    @Expose
    private String vid;//视频ID
    public String getAid() {
        return aid;
    }
    public void setAid(String aid) {
        this.aid = aid;
    }
    public String getVid() {
        return vid;
    }
    public void setVid(String vid) {
        this.vid = vid;
    }
    public VideoResource getResource() {
        return resource;
    }
        return resource;
    }
    public void setResource(VideoResource resource) {
        this.resource = resource;
    }
    public void setResource(VideoResource resource) {
        this.resource = resource;
    }
    public String getUrl() {
        return url;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public int getPlayType() {
        return playType;
    }
    public int getPlayType() {
        return playType;
    }
    public void setPlayType(int playType) {
        this.playType = playType;
    }
    public void setPlayType(int playType) {
        this.playType = playType;
    }
    public String getParams() {
        return params;
    }
    public String getParams() {
        return params;
    }
    public void setParams(String params) {
        this.params = params;
    }
    public void setParams(String params) {
        this.params = params;
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/ad/PlayVideoPreADFragment.java
@@ -422,7 +422,7 @@
    public static VideoOption getVideoOption() {
        VideoOption.Builder builder = new VideoOption.Builder();
        builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.NEVER);
        builder.setAutoPlayMuted(true);
        builder.setAutoPlayMuted(false);
        builder.setDetailPageMuted(false);
        builder.setNeedCoverImage(true);
        builder.setNeedProgressBar(false);
BuWanVideo/src/com/weikou/beibeivideo/ui/media/EpisodeFragment.java
@@ -402,6 +402,10 @@
                                    .optString("Url"));
                            info.setParams(jsonObject.getJSONObject("Data")
                                    .optString("Params"));
                            info.setAid(jsonObject.getJSONObject("Data")
                                    .optString("Aid"));
                            info.setVid(jsonObject.getJSONObject("Data")
                                    .optString("Vid"));
                            Play play = new Play();
                            play.setPlayUrl(info);
                            EventBus.getDefault().post(play);
@@ -476,7 +480,22 @@
                    });
                } else {
                    fl_native_ad1.setVisibility(View.GONE);
                    //加载穿山甲
                    new ExpressAdManager(AdUtil.AD_TYPE.csj, getContext()).loadVideoDetailPlayerBottomAd(new ExpressAdManager.IAdLoadListener() {
                        @Override
                        public void onSuccess(List<ExpressAdContainer> adList) {
                            if (adList != null && adList.size() > 0) {
                                ExpressAdManager.renderAndFillAd(getActivity(), adList.get(0), fl_native_ad1, new ExpressAdManager.IAdEventListener() {
                                    @Override
                                    public void closeAd(ExpressAdContainer ad) {
                                        fl_native_ad1.removeAllViews();
                                    }
                                });
                            } else {
                                fl_native_ad1.setVisibility(View.GONE);
                            }
                        }
                    });
                }
            }
        });
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity.java
@@ -842,6 +842,10 @@
                                    .optString("Url"));
                            info.setParams(jsonObject.getJSONObject("Data")
                                    .optString("Params"));
                            info.setAid(jsonObject.getJSONObject("Data")
                                    .optString("Aid"));
                            info.setVid(jsonObject.getJSONObject("Data")
                                    .optString("Vid"));
                            playUrl = info;
                            if (videoInfo == null) {
                                return;
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java
@@ -62,6 +62,7 @@
import com.weikou.beibeivideo.ui.BaseActivity;
import com.weikou.beibeivideo.ui.ad.PlayVideoPreADFragment;
import com.weikou.beibeivideo.ui.common.ShareActivity;
import com.weikou.beibeivideo.ui.mine.FXBrowserActivity;
import com.weikou.beibeivideo.ui.video.FunshionPlayerFragment;
import com.weikou.beibeivideo.ui.video.VideoPlayerActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
@@ -132,6 +133,8 @@
        fl_video_play_background = findViewById(R.id.fl_video_play_background);
        iv_background = findViewById(R.id.iv_video_play_background);
        fl_ad = findViewById(R.id.fl_ad);
        initPlayer();
    }
    @Override
@@ -266,9 +269,6 @@
                    .commitAllowingStateLoss();
        }
        iNet();
        if (fl_ad != null)
            fl_ad.setVisibility(View.VISIBLE);
    }
@@ -371,6 +371,7 @@
                            VideoPlayerActivity.class);
                    intent.putExtra("url", playUrl.getUrl());
                    startActivity(intent);
                    initPlayer();
                } else if (playUrl.getPlayType() == 2) {
                    iv_select_play.setVisibility(View.GONE);
                    iv_background.setClickable(false);
@@ -387,9 +388,11 @@
                    // EventBus.getDefault().post(playUrl);
                    Toast.makeText(VideoDetailActivity2.this, "影片加载中...",
                            Toast.LENGTH_LONG).show();
                    initPlayer();
                }
                saveWatchHistory("爱奇艺");
            }
        } else if (playUrl.getResource().getName().contains("风行")) {
            if (playUrl.getPlayType() == 0) {
@@ -397,25 +400,27 @@
                        Toast.LENGTH_LONG).show();
                return;
            } else if (playUrl.getPlayType() == 1) {
//                Intent intent = new Intent(VideoDetailActivity2.this,
//                        FXBrowserActivity.class);
//                intent.putExtra("url", playUrl.getUrl());
//                startActivity(intent);
                Intent intent = new Intent(VideoDetailActivity2.this,
                        FXBrowserActivity.class);
                intent.putExtra("url", playUrl.getUrl());
                startActivity(intent);
                saveWatchHistory("风行");
            }
            fl_video_play_background.setVisibility(View.GONE);
            //播放风行视频
            //添加风行播放页
            mFunshionPlayerFragment = new FunshionPlayerFragment();
            Bundle bundle = new Bundle();
            bundle.putSerializable("videoInfo", videoInfo);
            bundle.putSerializable("playUrl", playUrl);
            bundle.putInt("position", mPosition);
            bundle.putBoolean("collect", false);
            bundle.putSerializable("resource", resource);
            mFunshionPlayerFragment.setArguments(bundle);
            if (!mFunshionPlayerFragment.isAdded()) {
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_video_play_container, mFunshionPlayerFragment).commit();
                initPlayer();
            } else if (playUrl.getPlayType() == 2) {//SDK播放
                //播放风行视频
                //添加风行播放页
                mFunshionPlayerFragment = new FunshionPlayerFragment();
                Bundle bundle = new Bundle();
                bundle.putSerializable("videoInfo", videoInfo);
                bundle.putSerializable("playUrl", playUrl);
                bundle.putInt("position", mPosition);
                bundle.putBoolean("collect", false);
                bundle.putSerializable("resource", resource);
                mFunshionPlayerFragment.setArguments(bundle);
                if (!mFunshionPlayerFragment.isAdded()) {
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_video_play_container, mFunshionPlayerFragment).commit();
                }
                fl_video_play_background.setVisibility(View.GONE);
            }
        } else {
@@ -430,6 +435,7 @@
                startActivity(intent);
                saveWatchHistory(playUrl.getResource().getName());
            }
            initPlayer();
        }
    }
@@ -439,6 +445,16 @@
    public void onEventMainThread(Playlocation location) {
        fl_ad.setVisibility(View.VISIBLE);
        mPosition = location.getPosition();
    }
    /**
     * 初始化播放器
     */
    private void initPlayer() {
        fl_ad.setVisibility(View.GONE);
        iv_select_play.setVisibility(View.VISIBLE);
        iv_background.setVisibility(View.VISIBLE);
        fl_video_play_background.setVisibility(View.VISIBLE);
    }
@@ -574,9 +590,9 @@
            // Hide the status bar隐藏状态栏
            //测试 不做全屏
//            WindowManager.LayoutParams attrs = getWindow().getAttributes();
//            attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
//            getWindow().setAttributes(attrs);
            WindowManager.LayoutParams attrs = getWindow().getAttributes();
            attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
            getWindow().setAttributes(attrs);
            Fragment videoDetailFragment = getSupportFragmentManager()
                    .findFragmentByTag("VideoDetailFragment");
@@ -891,19 +907,23 @@
                                    }.getType());
                            PlayUrl info = new PlayUrl();
                            info.setResource(resource);
                            info.setPlayType(Integer.parseInt(jsonObject
                                    .getJSONObject("Data")
                                    .optString("PlayType")));
                            info.setUrl(jsonObject.getJSONObject("Data")
                            JSONObject data = jsonObject
                                    .getJSONObject("Data");
                            info.setPlayType(Integer.parseInt(
                                    data.optString("PlayType")));
                            info.setUrl(data
                                    .optString("Url"));
                            info.setParams(jsonObject.getJSONObject("Data")
                            info.setParams(data
                                    .optString("Params"));
                            info.setAid(data.optString("Aid"));
                            info.setVid(data.optString("Vid"));
                            playUrl = info;
                            if (videoInfo == null) {
                                return;
                            }
                            fl_ad.setVisibility(View.VISIBLE);
                            if (!isSetup || isClick) {
                                fl_ad.setVisibility(View.VISIBLE);
                                startPlay();
                                isClick = false;
                            }
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoEpisodeFragment.java
@@ -470,7 +470,7 @@
        new ExpressAdManager(AdUtil.AD_TYPE.gdt2, getContext()).loadVideoDetailRelativeVideoBottomAd(new ExpressAdManager.IAdLoadListener() {
            @Override
            public void onSuccess(List<ExpressAdContainer> adList) {
                if (adList != null && adList.size() > 0)
                if (adList != null && adList.size() > 0) {
                    ExpressAdManager.renderAd(getActivity(), adList.get(0), new ExpressAdManager.IAdRenderListener() {
                        @Override
                        public void onRenderSuccess(List<ExpressAdContainer> adList) {
@@ -488,6 +488,21 @@
                            fl_native_ad_1.removeAllViews();
                        }
                    });
                } else {
                    new ExpressAdManager(AdUtil.AD_TYPE.csj, getContext()).loadVideoDetailRelativeVideoBottomAd(new ExpressAdManager.IAdLoadListener() {
                        @Override
                        public void onSuccess(List<ExpressAdContainer> adList) {
                            if (adList != null && adList.size() > 0) {
                                ExpressAdManager.renderAndFillAd(getActivity(), adList.get(0), fl_native_ad_1, new ExpressAdManager.IAdEventListener() {
                                    @Override
                                    public void closeAd(ExpressAdContainer ad) {
                                        fl_native_ad_1.removeAllViews();
                                    }
                                });
                            }
                        }
                    });
                }
            }
        });
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoEpisodeFragment2.java
@@ -158,6 +158,10 @@
                                    .optString("Url"));
                            info.setParams(jsonObject.getJSONObject("Data")
                                    .optString("Params"));
                            info.setAid(jsonObject.getJSONObject("Data")
                                    .optString("Aid"));
                            info.setVid(jsonObject.getJSONObject("Data")
                                    .optString("Vid"));
                            Play play = new Play();
                            play.setPlayUrl(info);
                            EventBus.getDefault().post(play);
BuWanVideo/src/com/weikou/beibeivideo/ui/mine/FXBrowserActivity.java
@@ -51,6 +51,8 @@
    private FrameLayout fl_webview, fl_full_play;
    ProgressBar progressBar;
    private final String TAG="FXBrowserActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -123,7 +125,8 @@
                    return true;
                } else if (url.contains("/tbopen/") || url.startsWith("tbopen://")) {
                    return true;
                }
                }else if(!url.startsWith("http"))
                    return true;
                return super.shouldOverrideUrlLoading(view, url);
            }
@@ -144,6 +147,18 @@
                super.onReceivedTitle(view, title);
                tv_title.setText(title);
            }
            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
                super.onShowCustomView(view, callback);
                Log.i(TAG,"onShowCustomView");
            }
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
                Log.i(TAG,"onHideCustomView");
            }
        });
        progressBar = findViewById(R.id.myProgressBar);
        progressBar.setMax(100);
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -34,7 +34,7 @@
import com.weikou.beibeivideo.entity.video.holder.VideoHolder;
import com.weikou.beibeivideo.ui.common.VideosLiveActivity;
import com.weikou.beibeivideo.ui.discover.StarsActivity;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity;
import com.weikou.beibeivideo.ui.media.VideoDetailActivity2;
import com.weikou.beibeivideo.ui.video.VideoColumn2Adapter;
import com.weikou.beibeivideo.util.VideoUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
@@ -522,7 +522,7 @@
        private void myClick(VideoInfo info, final View v) {
            Intent intent = new Intent(v.getContext(), VideoDetailActivity.class);
            Intent intent = new Intent(v.getContext(), VideoDetailActivity2.class);
            intent.putExtra("video_info", info);
            v.getContext().startActivity(intent);
        }
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);
            }
        }
    };
    //自渲染view
    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();
    }
}
BuWanVideo/src/com/weikou/beibeivideo/util/ad/CSJConstant.java
@@ -17,6 +17,13 @@
    //视频前贴
    public static String PLAY_VIDEO_PRE = "887389927";
    //视频详情页视频播放器底部
    public static String VIDEO_DETAIL_PLAYER_BOTTOM = "945548900";
    //视频详情页猜你喜欢底部
    public static String VIDEO_DETAIL_GUESSLIKE_TOP = "945548915";
    //无效广告
    public static String INVALID_AD = "111111111";
BuWanVideo/src/com/weikou/beibeivideo/util/ad/ExpressAdManager.java
@@ -12,6 +12,7 @@
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTNativeExpressAd;
import com.google.gson.Gson;
import com.qq.e.ads.cfg.VideoOption;
import com.qq.e.ads.nativ.ADSize;
import com.qq.e.ads.nativ.NativeExpressAD;
@@ -170,10 +171,11 @@
     * @param adLoadListener
     */
    public void loadVideoDetailPlayerBottomAd(final IAdLoadListener adLoadListener) {
        Log.i(TAG, "loadVideoDetailPlayerBottomAd");
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945375047";
            pid = CSJConstant.VIDEO_DETAIL_PLAYER_BOTTOM;
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS1;
        }
@@ -181,7 +183,7 @@
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 20);
        int height = 80;
        int height = 100;
        loadAd(width, height, pid, 1, adLoadListener);
    }
@@ -195,7 +197,7 @@
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945375047";
            pid = CSJConstant.VIDEO_DETAIL_GUESSLIKE_TOP;
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS2;
        }
@@ -397,6 +399,9 @@
     * @param context
     */
    private void loadGDT2(String positionId, int widthDP, int heightDP, int count, final IGDTAdLoadListener adLoadListener, Context context) {
        Log.i(TAG, String.format("loadGDT2:positionId-%s  widthDP-%s heightDP-%s", positionId, widthDP, heightDP));
        NativeExpressAD2 nativeExpressAD2 = new NativeExpressAD2(context, positionId, new NativeExpressAD2.AdLoadListener() {
            @Override
            public void onLoadSuccess(List<NativeExpressADData2> list) {
library-mine/res/layout/video_player_controller.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    <!--顶部控件 -->
    <LinearLayout
@@ -150,11 +151,12 @@
        android:visibility="gone"></ImageView>
    <FrameLayout
        android:visibility="gone"
        android:id="@+id/fl_loading"
        android:layout_width="95dp"
        android:layout_height="95dp"
        android:layout_gravity="center">
        android:layout_gravity="center"
        android:visibility="gone">
        <include layout="@layout/item_player_loading"></include>
    </FrameLayout>
@@ -284,7 +286,6 @@
                android:background="@drawable/shape_player_definition_bg"
                android:drawablePadding="6dp"
                android:padding="8dp"
                android:text="来源:爱奇艺"
                android:textColor="#ffeeeeee"
                android:textSize="9sp"
                android:visibility="gone" />
library-mine/src/com/lcjian/library/video/VideoEpisode.java
@@ -5,6 +5,15 @@
    private String name;//名称
    private String tag;
    private String videoId;
    private String videoUrl;//视频链接
    public String getVideoUrl() {
        return videoUrl;
    }
    public void setVideoUrl(String videoUrl) {
        this.videoUrl = videoUrl;
    }
    public String getName() {
        return name;
library-mine/src/com/lcjian/library/video/VideoEpisodeDialog.java
@@ -56,7 +56,7 @@
        /**
         * @param videoEpisodes
         * @param position
         * @param showType      1-小方格  2-长条
         * @param showType      1-长条  2-小方格
         * @return
         */
        public Builder setEpisodes(List<VideoEpisode> videoEpisodes, int position, int showType) {
@@ -81,7 +81,7 @@
                }
            });
            if (showType == 1) {
            if (showType == 2) {
                gv_episode.setNumColumns(4);
            } else {
                gv_episode.setNumColumns(1);
@@ -95,8 +95,17 @@
            WindowManager.LayoutParams params = videoLoadingDialog.getWindow()
                    .getAttributes();
            params.width = DimenUtils.dip2px(activity, 220);
            params.height = DimenUtils.getScreenHeight(activity);
            params.height = WindowManager.LayoutParams.MATCH_PARENT;  //WindowManager.LayoutParams.MATCH_PARENT; //DimenUtils.getScreenWidth(activity);
            videoLoadingDialog.getWindow().setAttributes(params);
            //防止被状态栏占用高度
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN;
            videoLoadingDialog.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
            videoLoadingDialog.getWindow().setGravity(Gravity.RIGHT);//设置显示在右侧
            videoLoadingDialog.setCanceledOnTouchOutside(true);
@@ -128,7 +137,7 @@
                textView.setMaxLines(1);
                textView.setTextColor(Color.WHITE);
                textView.setEllipsize(TextUtils.TruncateAt.END);
                if (showType == 1) {
                if (showType == 2) {
                    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(DimenUtils.dip2px(activity, 35), DimenUtils.dip2px(activity, 35));
                    textView.setLayoutParams(params);
                } else {
@@ -149,7 +158,7 @@
                    @Override
                    public void onClick(View v) {
                        if (canClick) {
                            Builder.this.position=position;
                            Builder.this.position = position;
                            notifyDataSetChanged();
                            if (dialogClick != null)
                                dialogClick.selectEpisode(position, videoEpisode);
library-mine/src/com/lcjian/library/video/VideoPlayerController.java
@@ -58,6 +58,7 @@
    private String videoName;
    private String videoUrl;
    private boolean collected;//是否收藏
    private String mResourceName;
    private Timer timer;
@@ -98,6 +99,8 @@
    //正在播放的位置
    private int mPlayingPosition;
    private int mShowType;//1-长条 2-小方格
    private AQuery aq;
@@ -187,15 +190,17 @@
     *
     * @param episodeList
     * @param videoName
     * @param videoUrl
     * @param playingPosition
     * @return
     */
    public VideoPlayerController setVideoInfo(List<VideoEpisode> episodeList, String videoName, String videoUrl, int playingPosition) {
        this.videoName = videoName;
        this.videoUrl = videoUrl;
    public VideoPlayerController setVideoInfo(List<VideoEpisode> episodeList, int playingPosition, int showType, String resourceName) {
        VideoEpisode currentVideoEpisode = episodeList.get(playingPosition);
        this.videoName = currentVideoEpisode.getName();
        this.videoUrl = currentVideoEpisode.getVideoUrl();
        this.episodeList = episodeList;
        this.mPlayingPosition = playingPosition;
        this.mShowType = showType;
        this.mResourceName = resourceName;
        return this;
    }
@@ -262,6 +267,7 @@
                                    VideoPlayerController.this.continuePlay();
                                    //不需要提醒
                                    needNotifyMobileData = false;
                                    setPlayImage();
                                }
                                @Override
@@ -271,6 +277,8 @@
                            }).build(mActivity);
                        if (!networkNotiftDialog.isShowing())
                            networkNotiftDialog.show();
                    } else {
                        continuePlay();
                    }
                    break;
                case ConnectivityManager.TYPE_WIFI:
@@ -286,7 +294,30 @@
            pausePlay();
        }
        //设置播放按钮的状态按钮的
        setPlayImage();
    }
    private void setPlayImage() {
        if (iv_play != null)
            iv_play.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (mediaPlayer == null) {
                        return;
                    }
                    VideoResourceUtil.setPlayImage(iv_play, mediaPlayer.isPlaying(), isLand);
                    if (mediaPlayer.isPlaying()) {
                        aq.id(R.id.iv_play_center).visibility(View.GONE);
                    } else {
                        if (!isLand) {
                            aq.id(R.id.iv_play_center).visibility(View.VISIBLE);
                        }
                    }
                }
            }, 100);
    }
    /**
     * 设置电量变化
@@ -362,7 +393,10 @@
        public void onProgressChanged(SeekBar seekBar, int precent, boolean b) {
            if (isTouch) {
                //计算  拖拉后的  时间长度:
                int positionLong = mediaPlayer.getDuration() * seekBar.getProgress() / 1000;
                int process = mediaPlayer.getDuration();
                float f = seekBar.getProgress() / 1000.0f;
                int positionLong = (int) (process * f);
                Log.i(TAG, "position:" + positionLong);
                mediaPlayer.seekTo(positionLong);
            }
@@ -395,6 +429,7 @@
        setLayout();
        tv_title.setText(videoName);
        tv_link.setText(videoUrl);
        tv_resource.setText("来源:" + mResourceName);
        setCollect(this.collected);
        showLoading();
@@ -437,7 +472,7 @@
            @Override
            public void onClick(View v) {
                //当前集
                episodeDialog = new VideoEpisodeDialog.Builder().setEpisodes(episodeList, mPlayingPosition, 1).setDialogClick(new VideoEpisodeDialog.IDialogClick() {
                episodeDialog = new VideoEpisodeDialog.Builder().setEpisodes(episodeList, mPlayingPosition, mShowType).setDialogClick(new VideoEpisodeDialog.IDialogClick() {
                    @Override
                    public void selectEpisode(int p, VideoEpisode ve) {
                        if (videoPlayerListener != null)
@@ -464,11 +499,10 @@
                if (mediaPlayer != null) {
                    if (mediaPlayer.isPlaying()) {
                        mediaPlayer.pause();
                        VideoResourceUtil.setPlayImage(iv_play, true, isLand);
                    } else {
                        mediaPlayer.start();
                        VideoResourceUtil.setPlayImage(iv_play, false, isLand);
                    }
                    setPlayerState();
                }
            }
        });
@@ -621,6 +655,7 @@
    }
    private void setLayout() {
        Log.i(TAG, "setLayout");
        if (isLand) {
            findViewById(R.id.fl_state).setVisibility(View.VISIBLE);
//            if (iv_collection.getVisibility() == View.GONE)
@@ -684,8 +719,13 @@
            if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                int currentPosition = getSeconds(mediaPlayer.getCurrentPosition());
                tv_progress.setText(TimeUtil.getTimeDesc(currentPosition));
                seekBar.setProgress(Math.round(mediaPlayer.getCurrentPosition() * 1000 / mediaPlayer.getDuration()));
                setPlayerState();
                seekBar.setProgress(Math.round(mediaPlayer.getCurrentPosition() * 1000.0f / mediaPlayer.getDuration()));
                Log.i(TAG, Math.abs(mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition()) + "");
                if (Math.abs(mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition()) < 1000) {//播放完成
                    tv_progress.removeCallbacks(playerProcessRunnable);
                    iv_next.performClick();
                    return;
                }
            }
            tv_progress.postDelayed(playerProcessRunnable, 1000);
        }
@@ -729,15 +769,7 @@
    private void setPlayerState() {
        if (mediaPlayer != null) {
            if (mediaPlayer.isPlaying()) {
                VideoResourceUtil.setPlayImage(iv_play, false, isLand);
                aq.id(R.id.iv_play_center).visibility(View.GONE);
            } else {
                VideoResourceUtil.setPlayImage(iv_play, true, isLand);
                if (!isLand) {
                    aq.id(R.id.iv_play_center).visibility(View.VISIBLE);
                }
            }
            setPlayImage();
        }
    }
@@ -817,6 +849,14 @@
        aq.id(R.id.fl_loading).visibility(View.GONE);
    }
    public void onResume() {
        setLayout();
    }
    public void onPause() {
        setLayout();
    }
    /**
     * 释放资源
     */
library-mine/src/com/lcjian/library/video/VideoResourceUtil.java
@@ -16,26 +16,36 @@
     */
    public static void setPlayImage(ImageView iv_play, boolean isPlaying, boolean land) {
        String resourceName = "";
        if (isPlaying)
            if (land)
                resourceName = "ic_player_play";
            else
                resourceName = "ic_player_play_small";
        else {
        if (isPlaying) {
            if (land)
                resourceName = "ic_player_pause";
            else
                resourceName = "ic_player_pause_small";
        } else {
            if (land)
                resourceName = "ic_player_play";
            else
                resourceName = "ic_player_play_small";
        }
        Object picture = iv_play.getTag();
        if (picture != null && picture.toString().equalsIgnoreCase(resourceName)) {
            return;
        }
        iv_play.setTag(resourceName);
        iv_play.setImageResource(iv_play.getResources().getIdentifier(resourceName, "drawable", iv_play.getContext().getPackageName()));
        ViewGroup.LayoutParams params = iv_play.getLayoutParams();
        if (land) {
            params.width = DimenUtils.dip2px(iv_play.getContext(), 38);
            params.height = DimenUtils.dip2px(iv_play.getContext(), 38);
            iv_play.setPadding(0, 0, 0, 0);
        } else {
            int padding = DimenUtils.dip2px(iv_play.getContext(), 5);
            iv_play.setPadding(padding, padding, padding, padding);
            params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
            params.height = DimenUtils.dip2px(iv_play.getContext(), 14);
            params.height = DimenUtils.dip2px(iv_play.getContext(), 24);
        }
    }