package com.hanju.video.app.ui.video;
|
|
import android.content.pm.ActivityInfo;
|
import android.os.Bundle;
|
import android.view.View;
|
import android.widget.ListView;
|
import android.widget.ProgressBar;
|
|
import com.google.gson.FieldNamingPolicy;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.hanju.lib.library.RetainViewFragment;
|
import com.hanju.lib.library.util.RefreshLayout;
|
import com.hanju.lib.library.util.SingleToast;
|
import com.hanju.video.app.R;
|
import com.hanju.video.app.entity.video.VideoInfo;
|
import com.hanju.video.app.ui.MyRetainViewFragment;
|
import com.hanju.video.app.ui.category.bean.UniqueBean;
|
import com.hanju.video.app.ui.recommend.DiscoverVideosAdapter;
|
import com.hanju.video.app.util.HanJuConstant;
|
import com.hanju.video.app.util.common.AppConfigUtil;
|
import com.hanju.video.app.util.downutils.StringUtils;
|
import com.hanju.video.app.util.http.BasicTextHttpResponseHandler;
|
import com.hanju.video.app.util.http.HttpApiUtil;
|
import com.qq.e.ads.cfg.VideoOption;
|
import com.qq.e.ads.nativ.ADSize;
|
import com.qq.e.ads.nativ.NativeExpressAD;
|
import com.qq.e.ads.nativ.NativeExpressADView;
|
import com.qq.e.comm.util.AdError;
|
import com.shuyu.gsyvideoplayer.GSYVideoManager;
|
import com.shuyu.gsyvideoplayer.model.VideoOptionModel;
|
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
|
import com.umeng.analytics.MobclickAgent;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
|
|
/**
|
* 专题碎片
|
*/
|
public class VideoPlayerFragment extends RetainViewFragment {
|
|
private String playUrl;
|
private String url;
|
private String title;
|
|
private StandardGSYVideoPlayer videoPlayer;
|
|
public static VideoPlayerFragment newInstance(String title, String url, String playUrl) {
|
VideoPlayerFragment fragment = new VideoPlayerFragment();
|
Bundle bundle = new Bundle();
|
bundle.putString("url", url);
|
bundle.putString("title", title);
|
bundle.putString("playUrl", playUrl);
|
fragment.setArguments(bundle);
|
return fragment;
|
}
|
|
public void setVideoInfo(String title, String url, String playUrl) {
|
this.title = title;
|
this.url = url;
|
this.playUrl = playUrl;
|
videoPlayer.setUp(playUrl, true, title);
|
videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
|
videoPlayer.startPlayLogic();
|
}
|
|
@Override
|
public int getContentResource() {
|
return R.layout.fragment_player;
|
}
|
|
|
private void initPlayer() {
|
/**此中内容:优化加载速度,降低延迟*/
|
VideoOptionModel videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");
|
List<VideoOptionModel> list = new ArrayList<>();
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp");
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "allowed_media_types", "video"); //根据媒体类型来配置
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 20000);
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1316);
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 1); // 无限读
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 100);
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10240);
|
list.add(videoOptionModel);
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1);
|
list.add(videoOptionModel);
|
// 关闭播放器缓冲,这个必须关闭,否则会出现播放一段时间后,一直卡主,控制台打印 FFP_MSG_BUFFERING_START
|
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);
|
list.add(videoOptionModel);
|
// GSYVideoManager.instance().setOptionModelList(list);
|
|
|
}
|
|
@Override
|
public void onCreateView(View contentView, Bundle savedInstanceState) {
|
videoPlayer = contentView.findViewById(R.id.videoPlayer);
|
url = getArguments().getString("url", "");
|
playUrl = getArguments().getString("playUrl", "");
|
title = getArguments().getString("title", "");
|
initPlayer();
|
//设置返回按键功能
|
videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
getActivity().onBackPressed();
|
}
|
});
|
videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (getActivity().getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
|
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
} else {
|
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
}
|
}
|
});
|
videoPlayer.setUp(playUrl, true, title);
|
videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
|
videoPlayer.startPlayLogic();
|
}
|
|
|
public void onBackPressed() {
|
//先返回正常状态
|
if (getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
|
videoPlayer.getFullscreenButton().performClick();
|
return;
|
}
|
//释放所有
|
videoPlayer.setVideoAllCallBack(null);
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
videoPlayer.onVideoResume();
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
videoPlayer.onVideoPause();
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
GSYVideoManager.releaseAllVideos();
|
|
}
|
}
|