update 清晰度切换

This commit is contained in:
2022-12-29 16:16:08 +08:00
parent 660853d5be
commit 7555510d94
2 changed files with 43 additions and 114 deletions

View File

@@ -14,17 +14,21 @@ import com.google.android.exoplayer2.analytics.PlaybackStats;
import com.google.android.exoplayer2.analytics.PlaybackStatsListener;
import com.google.android.exoplayer2.video.VideoSize;
/**
* 直播间播放器管理器
* 通过预加载子播放器来实现无缝切换分辨率功能
*/
public class LiveExoPlayerManager {
private final int MODEL_PLAY1 = 0;
private final int MODEL_PLAY2 = 1;
private final int MODEL_PLAY1 = 0;//当前主播放器
private final int MODEL_PLAY2 = 1;//当前子播放器
private Context mContext;
private ExoPlayer player1, player2;
private SurfaceView mainView;
private SurfaceView mainView;//渲染视图
private int status = MODEL_PLAY1;
private Player.Listener listener;
private boolean isSwitchUrl = false;
private boolean isSwitchUrl = false;//是否为主动切换播放器
private String TAG = "播放";
private int playBufferIndex = 0;
private int playBufferIndex = 0;//卡顿计数器
private Handler handler;
public LiveExoPlayerManager(Context mContext) {
@@ -75,6 +79,9 @@ public class LiveExoPlayerManager {
}
/**
* 延迟1秒还未恢复播放则认为卡顿了可以切分辨率了
*/
private Runnable buffRunnable = new Runnable() {
@Override
public void run() {
@@ -185,6 +192,11 @@ public class LiveExoPlayerManager {
});
}
/**
* 开始播放
*
* @param url 地址
*/
public void startUrl(String url) {
isSwitchUrl = true;
playBufferIndex = 0;
@@ -194,6 +206,11 @@ public class LiveExoPlayerManager {
getNowPlayer().play();
}
/**
* 无缝切换
*
* @param url 地址
*/
public void switchUrl(String url) {
Log.i(TAG, "switchUrl: " + url);
playBufferIndex = 0;
@@ -206,26 +223,44 @@ public class LiveExoPlayerManager {
return MediaItem.fromUri(url);
}
/**
* 获取当前播放器
*/
public ExoPlayer getNowPlayer() {
return status == MODEL_PLAY1 ? player1 : player2;
}
/**
* 获取下一个播放器。
*/
private ExoPlayer getNextPlayer() {
return status == MODEL_PLAY1 ? player2 : player1;
}
/**
* 是否正在播放
*/
public boolean isPlaying() {
return getNowPlayer().isPlaying();
}
/**
* 停止播放
*/
public void stop() {
getNowPlayer().stop();
}
/**
* 开始播放
*/
public void play() {
getNowPlayer().play();
}
/**
* 释放播放器
*/
public void release() {
player1.release();
player2.release();