新增保存用户选择分辨率的设置

This commit is contained in:
2023-01-08 21:49:07 +08:00
parent cf85870810
commit b3083cdd18
4 changed files with 66 additions and 31 deletions

View File

@@ -14,9 +14,8 @@ import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.video.VideoSize;
import com.yunbao.common.utils.ToastUtil;
import java.util.Locale;
import androidx.annotation.NonNull;
/**
* 直播间播放器管理器
@@ -25,19 +24,18 @@ import java.util.Locale;
public class LiveExoPlayerManager {
private final int MODEL_PLAY1 = 0;//当前主播放器
private final int MODEL_PLAY2 = 1;//当前子播放器
private Context mContext;
private ExoPlayer player1, player2;
private final ExoPlayer player1;
private final ExoPlayer player2;
private StyledPlayerView mainView;//渲染视图
private int status = MODEL_PLAY1;
private Player.Listener listener;
private boolean isSwitchUrl = false;//是否为主动切换播放器
private String TAG = "播放器";
private final String TAG = "播放器";
private int playBufferIndex = 0;//卡顿计数器
private Handler handler;
private final Handler handler;
private static double log_buffer_time = 0, log_buffer_max_time;
public LiveExoPlayerManager(Context mContext) {
this.mContext = mContext;
DefaultLoadControl control = new DefaultLoadControl.Builder()
.setPrioritizeTimeOverSizeThresholds(false)
.setBackBuffer(15_000, true)
@@ -46,8 +44,8 @@ public class LiveExoPlayerManager {
50,
100)
.build();
player1 = new ExoPlayer.Builder(mContext).setLoadControl(control).build();
player2 = new ExoPlayer.Builder(mContext).setLoadControl(control).build();
player1 = new ExoPlayer.Builder(mContext).build();
player2 = new ExoPlayer.Builder(mContext).build();
player1.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
player2.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
@@ -76,13 +74,13 @@ public class LiveExoPlayerManager {
player1.addAnalyticsListener(new AnalyticsListener() {
@Override
public void onPlaybackStateChanged(
EventTime eventTime, int state) {
@NonNull EventTime eventTime, int state) {
Log.d(TAG, "onPlaybackStateChanged(1) called with: eventTime = [" + eventTime + "], state = [" + state + "]");
}
@Override
public void onDroppedVideoFrames(
EventTime eventTime, int droppedFrames, long elapsedMs) {
@NonNull EventTime eventTime, int droppedFrames, long elapsedMs) {
Log.d(TAG, "onDroppedVideoFrames(1) called with: eventTime = [" + eventTime + "], droppedFrames = [" + droppedFrames + "], elapsedMs = [" + elapsedMs + "]");
}
});
@@ -90,13 +88,13 @@ public class LiveExoPlayerManager {
player2.addAnalyticsListener(new AnalyticsListener() {
@Override
public void onPlaybackStateChanged(
EventTime eventTime, int state) {
@NonNull EventTime eventTime, int state) {
Log.d(TAG, "onPlaybackStateChanged(2) called with: eventTime = [" + eventTime.totalBufferedDurationMs + "], state = [" + state + "]");
}
@Override
public void onDroppedVideoFrames(
EventTime eventTime, int droppedFrames, long elapsedMs) {
@NonNull EventTime eventTime, int droppedFrames, long elapsedMs) {
Log.d(TAG, "onDroppedVideoFrames(2) called with: eventTime = [" + eventTime + "], droppedFrames = [" + droppedFrames + "], elapsedMs = [" + elapsedMs + "]");
}
});
@@ -106,7 +104,7 @@ public class LiveExoPlayerManager {
/**
* 延迟1秒还未恢复播放则认为卡顿了可以切分辨率了
*/
private Runnable buffRunnable = new Runnable() {
private final Runnable buffRunnable = new Runnable() {
@Override
public void run() {
playBufferIndex = 0;
@@ -147,7 +145,7 @@ public class LiveExoPlayerManager {
if (tmp > log_buffer_max_time) {
log_buffer_max_time = tmp;
}
ToastUtil.show(String.format(Locale.CHINA, "从加载到播放 = %.3f,最大耗时 = %.3f", tmp, log_buffer_max_time));
//ToastUtil.show(String.format(Locale.CHINA, "从加载到播放 = %.3f,最大耗时 = %.3f", tmp, log_buffer_max_time));
log_buffer_time = -1;
}
mainView.setPlayer(player1);
@@ -160,7 +158,7 @@ public class LiveExoPlayerManager {
}
@Override
public void onVideoSizeChanged(VideoSize videoSize) {
public void onVideoSizeChanged(@NonNull VideoSize videoSize) {
Player.Listener.super.onVideoSizeChanged(videoSize);
setViewResizeMode(videoSize.height > videoSize.width);
Log.i(TAG, "onVideoSizeChanged: width = " + videoSize.width + " height = " + videoSize.height);
@@ -208,7 +206,7 @@ public class LiveExoPlayerManager {
if (tmp > log_buffer_max_time) {
log_buffer_max_time = tmp;
}
ToastUtil.show(String.format(Locale.CHINA, "从加载到播放 = %.3f,最大耗时 = %.3f", tmp, log_buffer_max_time));
//ToastUtil.show(String.format(Locale.CHINA, "从加载到播放 = %.3f,最大耗时 = %.3f", tmp, log_buffer_max_time));
log_buffer_time = -1;
status = MODEL_PLAY2;
isSwitchUrl = false;
@@ -219,7 +217,7 @@ public class LiveExoPlayerManager {
}
@Override
public void onVideoSizeChanged(VideoSize videoSize) {
public void onVideoSizeChanged(@NonNull VideoSize videoSize) {
Player.Listener.super.onVideoSizeChanged(videoSize);
setViewResizeMode(videoSize.height > videoSize.width);
if (listener != null) {
@@ -246,7 +244,9 @@ public class LiveExoPlayerManager {
playBufferIndex = 0;
log_buffer_time = System.currentTimeMillis();
//getNowPlayer().setVideoSurfaceView(mainView);
mainView.setKeepContentOnPlayerReset(false);
mainView.setPlayer(getNowPlayer());
mainView.setKeepContentOnPlayerReset(true);
getNowPlayer().setMediaItem(createMediaItem(url));
getNowPlayer().prepare();
getNowPlayer().play();