package com.example.gsyvideoplayer.exosubtitle; import android.content.res.Configuration; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.core.widget.NestedScrollView; import com.example.gsyvideoplayer.R; import com.google.android.exoplayer2.SeekParameters; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack; import com.shuyu.gsyvideoplayer.listener.GSYVideoProgressListener; import com.shuyu.gsyvideoplayer.listener.LockClickListener; import com.shuyu.gsyvideoplayer.utils.Debuger; import com.shuyu.gsyvideoplayer.utils.OrientationUtils; import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer; import java.util.HashMap; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; import tv.danmaku.ijk.media.exo2.Exo2PlayerManager; public class GSYExoSubTitleDetailPlayer extends AppCompatActivity { @BindView(R.id.post_detail_nested_scroll) NestedScrollView postDetailNestedScroll; //推荐使用StandardGSYVideoPlayer,功能一致 //CustomGSYVideoPlayer部分功能处于试验阶段 @BindView(R.id.detail_player) GSYExoSubTitleVideoView detailPlayer; @BindView(R.id.activity_detail_player) RelativeLayout activityDetailPlayer; private boolean isPlay; private boolean isPause; private OrientationUtils orientationUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail_exo_subtitle_player); ButterKnife.bind(this); String url = getUrl(); //增加封面 ImageView imageView = new ImageView(this); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setImageResource(R.mipmap.xxx1); //detailPlayer.setThumbImageView(imageView); resolveNormalVideoUI(); //外部辅助的旋转,帮助全屏 orientationUtils = new OrientationUtils(this, detailPlayer); //初始化不打开外部的旋转 orientationUtils.setEnable(false); Map header = new HashMap<>(); header.put("ee", "33"); header.put("allowCrossProtocolRedirects", "true"); GSYVideoOptionBuilder gsyVideoOption = new GSYVideoOptionBuilder(); gsyVideoOption.setThumbImageView(imageView) .setIsTouchWiget(true) .setRotateViewAuto(false) .setLockLand(false) .setAutoFullWithSize(false) .setShowFullAnimation(false) .setNeedLockFull(true) .setUrl(url) .setMapHeadData(header) .setCacheWithPlay(false) .setVideoTitle("测试视频") .setVideoAllCallBack(new GSYSampleCallBack() { @Override public void onPrepared(String url, Object... objects) { Debuger.printfError("***** onPrepared **** " + objects[0]); Debuger.printfError("***** onPrepared **** " + objects[1]); super.onPrepared(url, objects); //开始播放了才能旋转和全屏 orientationUtils.setEnable(true); isPlay = true; //设置 seek 的临近帧。 if (detailPlayer.getGSYVideoManager().getPlayer() instanceof Exo2PlayerManager) { ((Exo2PlayerManager) detailPlayer.getGSYVideoManager().getPlayer()).setSeekParameter(SeekParameters.NEXT_SYNC); Debuger.printfError("***** setSeekParameter **** "); } } @Override public void onEnterFullscreen(String url, Object... objects) { super.onEnterFullscreen(url, objects); Debuger.printfError("***** onEnterFullscreen **** " + objects[0]);//title Debuger.printfError("***** onEnterFullscreen **** " + objects[1]);//当前全屏player } @Override public void onAutoComplete(String url, Object... objects) { super.onAutoComplete(url, objects); } @Override public void onClickStartError(String url, Object... objects) { super.onClickStartError(url, objects); } @Override public void onQuitFullscreen(String url, Object... objects) { super.onQuitFullscreen(url, objects); Debuger.printfError("***** onQuitFullscreen **** " + objects[0]);//title Debuger.printfError("***** onQuitFullscreen **** " + objects[1]);//当前非全屏player if (orientationUtils != null) { orientationUtils.backToProtVideo(); } } }) .setLockClickListener(new LockClickListener() { @Override public void onClick(View view, boolean lock) { if (orientationUtils != null) { //配合下方的onConfigurationChanged orientationUtils.setEnable(!lock); } } }) .setGSYVideoProgressListener(new GSYVideoProgressListener() { @Override public void onProgress(int progress, int secProgress, int currentPosition, int duration) { Debuger.printfLog(" progress " + progress + " secProgress " + secProgress + " currentPosition " + currentPosition + " duration " + duration); } }) .build(detailPlayer); detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //直接横屏 orientationUtils.resolveByClick(); //第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar detailPlayer.startWindowFullscreen(GSYExoSubTitleDetailPlayer.this, true, true); } }); detailPlayer.setSubTitle("http://img.cdn.guoshuyu.cn/subtitle2.srt"); } @Override public void onBackPressed() { if (orientationUtils != null) { orientationUtils.backToProtVideo(); } if (GSYExoSubTitleVideoManager.backFromWindowFull(this)) { return; } super.onBackPressed(); } @Override protected void onPause() { getCurPlay().onVideoPause(); super.onPause(); isPause = true; } @Override protected void onResume() { getCurPlay().onVideoResume(false); super.onResume(); isPause = false; } @Override protected void onDestroy() { super.onDestroy(); if (isPlay) { getCurPlay().release(); } //GSYPreViewManager.instance().releaseMediaPlayer(); if (orientationUtils != null) orientationUtils.releaseListener(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //如果旋转了就全屏 if (isPlay && !isPause) { detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true); } } private void resolveNormalVideoUI() { //增加title detailPlayer.getTitleTextView().setVisibility(View.GONE); detailPlayer.getBackButton().setVisibility(View.GONE); } private GSYVideoPlayer getCurPlay() { if (detailPlayer.getFullWindowPlayer() != null) { return detailPlayer.getFullWindowPlayer(); } return detailPlayer; } private String getUrl() { return "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"; } }