Android ExoPlayer onResume() 变成绿色和像素化
Android ExoPlayer becomes Green and Pixelated onResume()
在我的 Android 应用程序中,我有一个实现 ExoPlayer 接口的媒体播放器。
当按下主页按钮时,播放器应该会暂停。然后,当应用程序从最近的应用程序重新启动时,播放器应该从中断的地方继续播放。
本来我叫player.release()
in onPause()
and got rid of the entire player instance. Then, when the app resumed, I created a new instance of the player and used seekTo()
跳转到正确的位置
@Override
public void onPause() {
if (player != null) {
savePlayerPosition();
player.release();
player = null;
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
if (!player.isPlaying()) {
player = ExoPlayerFactory.newSimpleInstance(context, trackSelector,
new DefaultLoadControl(), drmSessionManager);
setPlayerListeners();
exoPlayerView.setPlayer(player);
player.setPlayWhenReady(false);
player.seekTo(playerWindow, playerPosition);
}
}
上述代码的问题在于,每次我从最近的应用程序加载应用程序时,播放器都会花一些时间重新连接并加载视频,而不是保留缓冲数据并立即恢复播放。
为了解决这个问题,我将代码更改为仅切换 setPlayWhenReady()
.
@Override
public void onPause() {
if (player != null) {
player.setPlayWhenReady(false);
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
if (player != null && !player.isPlaying()) {
player.setPlayWhenReady(true);
}
}
这解决了重新加载问题,现在视频会立即从中断处继续播放。但是,当视频恢复播放时,前几秒视频颜色和像素化,如下图所示:
视频播放几秒后,恢复正常的色彩和流畅的画面。我在使用实际设备和模拟器时看到了这个问题。
是什么导致玩家搞砸了?我该如何解决或避免这种情况?
ExoPlayer v2.3.0 的发布似乎解决了这个问题。
不过,它仍然不完美。现在,音频不再变成绿色和像素化,而是在视频加入之前开始播放一小部分。不过,这种跳跃比绿色屏幕更不明显,所以我正在考虑解决这个问题。
在我的 Android 应用程序中,我有一个实现 ExoPlayer 接口的媒体播放器。
当按下主页按钮时,播放器应该会暂停。然后,当应用程序从最近的应用程序重新启动时,播放器应该从中断的地方继续播放。
本来我叫player.release()
in onPause()
and got rid of the entire player instance. Then, when the app resumed, I created a new instance of the player and used seekTo()
跳转到正确的位置
@Override
public void onPause() {
if (player != null) {
savePlayerPosition();
player.release();
player = null;
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
if (!player.isPlaying()) {
player = ExoPlayerFactory.newSimpleInstance(context, trackSelector,
new DefaultLoadControl(), drmSessionManager);
setPlayerListeners();
exoPlayerView.setPlayer(player);
player.setPlayWhenReady(false);
player.seekTo(playerWindow, playerPosition);
}
}
上述代码的问题在于,每次我从最近的应用程序加载应用程序时,播放器都会花一些时间重新连接并加载视频,而不是保留缓冲数据并立即恢复播放。
为了解决这个问题,我将代码更改为仅切换 setPlayWhenReady()
.
@Override
public void onPause() {
if (player != null) {
player.setPlayWhenReady(false);
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
if (player != null && !player.isPlaying()) {
player.setPlayWhenReady(true);
}
}
这解决了重新加载问题,现在视频会立即从中断处继续播放。但是,当视频恢复播放时,前几秒视频颜色和像素化,如下图所示:
视频播放几秒后,恢复正常的色彩和流畅的画面。我在使用实际设备和模拟器时看到了这个问题。
是什么导致玩家搞砸了?我该如何解决或避免这种情况?
ExoPlayer v2.3.0 的发布似乎解决了这个问题。
不过,它仍然不完美。现在,音频不再变成绿色和像素化,而是在视频加入之前开始播放一小部分。不过,这种跳跃比绿色屏幕更不明显,所以我正在考虑解决这个问题。