package com.example.gsyvideoplayer; 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.video.AudioSampleVideo; import com.example.gsyvideoplayer.video.LandLayoutVideo; import com.google.android.exoplayer2.SeekParameters; import com.shuyu.gsyvideoplayer.GSYVideoManager; 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 AudioDetailPlayer extends AppCompatActivity { @BindView(R.id.post_detail_nested_scroll) NestedScrollView postDetailNestedScroll; //推荐使用StandardGSYVideoPlayer,功能一致 //CustomGSYVideoPlayer部分功能处于试验阶段 @BindView(R.id.detail_player) AudioSampleVideo 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_audio_player); ButterKnife.bind(this); String url = getUrl(); resolveNormalVideoUI(); //外部辅助的旋转,帮助全屏 orientationUtils = new OrientationUtils(this, detailPlayer); //初始化不打开外部的旋转 orientationUtils.setEnable(false); detailPlayer.loadCoverImage("", R.drawable.lololo); Map header = new HashMap<>(); header.put("ee", "33"); header.put("allowCrossProtocolRedirects", "true"); GSYVideoOptionBuilder gsyVideoOption = new GSYVideoOptionBuilder(); gsyVideoOption .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(detailPlayer.isRotateWithSystem()); 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(AudioDetailPlayer.this, true, true); } }); } @Override public void onBackPressed() { if (orientationUtils != null) { orientationUtils.backToProtVideo(); } if (GSYVideoManager.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(); } /** * orientationUtils 和 detailPlayer.onConfigurationChanged 方法是用于触发屏幕旋转的 */ @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() { String url = "android.resource://" + getPackageName() + "/" + R.raw.test3; //注意,用ijk模式播放raw视频,这个必须打开 GSYVideoManager.instance().enableRawPlay(getApplicationContext()); ///exo raw 支持 //String url = RawResourceDataSource.buildRawResourceUri(R.raw.test).toString(); return url; } }