新增保存用户选择分辨率的设置
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user