【问题标题】:Android ExoPlayer becomes Green and Pixelated onResume()Android ExoPlayer 变成绿色和像素化 onResume()
【发布时间】:2017-03-28 13:37:04
【问题描述】:

在我的 Android 应用中,我有一个实现 ExoPlayer 接口的媒体播放器。

当按下主页按钮时,播放器应该暂停。然后,当应用从最近的应用重新启动时,播放器应该从上次停止的地方继续播放。

最初,我在onPause() 中调用了player.release() 并摆脱了整个播放器实例。然后,当应用程序恢复时,我创建了一个新的播放器实例并使用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);
    }
}

这解决了重新加载问题,视频现在可以从中断处立即恢复播放。但是,当视频继续播放时,在最初的几秒钟内,视频颜色变差并且像素化,如下图所示:

视频播放几秒钟后,它会恢复正常的色彩和平滑的外观。我在使用实际设备和模拟器时看到了这个问题。

是什么导致玩家搞砸了?我该如何解决或避免这种情况?

【问题讨论】:

    标签: android media-player android-mediaplayer onresume exoplayer


    【解决方案1】:

    ExoPlayer v2.3.0 的发布似乎解决了这个问题。

    不过,它仍然不完美。现在,音频没有变成绿色和像素化,而是在视频加入之前开始播放一小部分。但是,这种跳跃比绿屏不那么明显,所以我正在考虑解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2021-04-22
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多