update 清晰度切换
This commit is contained in:
parent
660853d5be
commit
7555510d94
@ -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();
|
||||
|
@ -34,6 +34,7 @@ import com.lxj.xpopup.XPopup;
|
||||
import com.lxj.xpopup.core.BasePopupView;
|
||||
import com.lxj.xpopup.interfaces.XPopupCallback;
|
||||
import com.lzf.easyfloat.EasyFloat;
|
||||
import com.lzy.okserver.OkDownload;
|
||||
import com.yunbao.common.http.HttpCallback;
|
||||
import com.yunbao.common.http.HttpClient;
|
||||
import com.yunbao.common.utils.Bus;
|
||||
@ -284,118 +285,9 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (TextUtils.isEmpty(url) || mVideoView == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*mPlayer.setObserver(new V2TXLivePlayerObserver() {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onWarning(V2TXLivePlayer player, int code, String msg, Bundle extraInfo) {
|
||||
super.onWarning(player, code, msg, extraInfo);
|
||||
Log.i(TAG, "onWarning: " + "player = " + player + ", code = " + code + ", msg = " + msg + ", extraInfo = " + extraInfo);
|
||||
if (code == 2105) {
|
||||
// mPlayer.resumeVideo();
|
||||
// mPlayer.resumeAudio();
|
||||
mPlayer.stopPlay();
|
||||
mPlayer.startPlay(purl);
|
||||
}
|
||||
debugView.setText("播放警告code=" + code + " msg=" + msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoPlayStatusUpdate(V2TXLivePlayer player, V2TXLiveDef.V2TXLivePlayStatus status, V2TXLiveDef.V2TXLiveStatusChangeReason reason, Bundle extraInfo) {
|
||||
super.onVideoPlayStatusUpdate(player, status, reason, extraInfo);
|
||||
//Log.i(TAG, "onVideoPlayStatusUpdate: " + "player = " + player + ", status = " + status + ", reason = " + reason + ", extraInfo = " + extraInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioPlayStatusUpdate(V2TXLivePlayer player, V2TXLiveDef.V2TXLivePlayStatus status, V2TXLiveDef.V2TXLiveStatusChangeReason reason, Bundle extraInfo) {
|
||||
super.onAudioPlayStatusUpdate(player, status, reason, extraInfo);
|
||||
//Log.i(TAG, "onAudioPlayStatusUpdate: " + "player = " + player + ", status = " + status + ", reason = " + reason + ", extraInfo = " + extraInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayoutVolumeUpdate(V2TXLivePlayer player, int volume) {
|
||||
super.onPlayoutVolumeUpdate(player, volume);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatisticsUpdate(V2TXLivePlayer player, V2TXLiveDef.V2TXLivePlayerStatistics statistics) {
|
||||
super.onStatisticsUpdate(player, statistics);
|
||||
Map<String, DownloadTask> taskMap = OkDownload.getInstance().getTaskMap();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
buffer.append("|");
|
||||
for (String key : taskMap.keySet()) {
|
||||
DownloadTask task = taskMap.get(key);
|
||||
buffer.append(task.progress.fileName).append(":");
|
||||
int status = task.progress.status;
|
||||
switch (status) {
|
||||
case 0:
|
||||
buffer.append("无状态");
|
||||
break;
|
||||
case 1:
|
||||
buffer.append("等待");
|
||||
break;
|
||||
case 2:
|
||||
buffer.append("下载中:").append(task.progress.fraction);
|
||||
break;
|
||||
case 3:
|
||||
buffer.append("暂停");
|
||||
break;
|
||||
case 4:
|
||||
buffer.append("错误");
|
||||
break;
|
||||
case 5:
|
||||
buffer.append("完成");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
buffer.append("|");
|
||||
}
|
||||
hideCover();
|
||||
String debugText = "视频码率:" + statistics.videoBitrate + "\n" +
|
||||
"音频码率:" + statistics.audioBitrate + "\n" +
|
||||
"FPS:" + statistics.fps + "\n" +
|
||||
"CPU:" + statistics.appCpu + "\n" +
|
||||
"剩余内存:" + DeviceUtils.getMemory(mContext) + "\n" +
|
||||
"分辨率:" + statistics.height + "x" + statistics.width + "\n" +
|
||||
"播放状态:" + mPlayer.isPlaying() + "\n" +
|
||||
"运行时间:" + (System.currentTimeMillis() - CrashSaveBean.getInstance().getStartTime()) / 1000 + "\n";
|
||||
debugView.setText(debugText);
|
||||
Log.i(TAG, "onStatisticsUpdate: " + JSON.toJSONString(statistics) + " |当前下载数 : " + OkDownload.getInstance().getTaskMap().size() + buffer);
|
||||
if (statistics.height > statistics.width) {
|
||||
videoLandscape = VIDEO_VERTICAL;
|
||||
} else {
|
||||
videoLandscape = VIDEO_HORIZONTAL;
|
||||
}
|
||||
if (statistics.fps == 0) {
|
||||
OkDownload.getInstance().pauseAll();
|
||||
} else {
|
||||
OkDownload.getInstance().startAll();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSnapshotComplete(V2TXLivePlayer player, Bitmap image) {
|
||||
super.onSnapshotComplete(player, image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderVideoFrame(V2TXLivePlayer player, V2TXLiveDef.V2TXLiveVideoFrame videoFrame) {
|
||||
super.onRenderVideoFrame(player, videoFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveSeiMessage(V2TXLivePlayer player, int payloadType, byte[] data) {
|
||||
super.onReceiveSeiMessage(player, payloadType, data);
|
||||
}
|
||||
});*/
|
||||
if (mPlayer.isPlaying()) {
|
||||
mPlayer.stop();
|
||||
}
|
||||
@ -1187,6 +1079,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
Player.Listener.super.onPlaybackStateChanged(playbackState);
|
||||
if (playbackState == Player.STATE_BUFFERING) {
|
||||
showLoadingDialog();
|
||||
OkDownload.getInstance().pauseAll();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1195,6 +1088,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
Player.Listener.super.onIsPlayingChanged(isPlaying);
|
||||
if (isPlaying) {
|
||||
hideCover();
|
||||
OkDownload.getInstance().startAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user