update 清晰度切换
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user