在某些设备上设置播放速度时,ExoPlayer会变慢

时间:2018-02-20 14:36:35

标签: android performance hls exoplayer

我设法使用SimpleExoPlayer成功播放HLS流,并通过在播放器上设置PlaybackParameters来实现选择不同播放速度(1.25x,1.5x等)的工作方式。但在部分设备中,当我选择不同于1x的播放速度时,播放器开始跳过大量帧,音频变得有点失真。

在2.6.0的ExoPlayer发行说明中,它表示当渲染器无法保持速度时,它们会开始显示仅关键帧,我怀疑这是正在发生的事情。但是我已经看到在同一个智能手机上使用YouTube应用上2倍的播放速度可以很好地工作,所以我想知道我能做些什么来提高ExoPlayer渲染器的性能。也许我在设置播放速度时没有使用硬件解码?有没有配置?

我目前正在使用ExoPlayer版本2.6.1。我使用的对象是SimpleExoPlayer个实例,其DefaultRenderersFactory个激活扩展程序(使用EXTENSION_RENDERER_MODE_ON)和DefaultTrackSelector。对于媒体来源,我使用HlsMediaSource与本地创建的Handler。如果我可以提供任何其他相关信息/代码来帮助理解上下文,请告诉我。

1 个答案:

答案 0 :(得分:0)

release上构建应用时,问题不会发生。这是因为在调试模式下运行应用程序时,Sonic lib(ExoPlayer依赖关系)使用的JVM优化,根据andrewlewis讨论项目的github:

"新实现使用Sonic的Java版本,因此其性能受Java运行时应用的优化影响。在可调试构建上关闭了一些优化,这导致Sonic中的内部循环非常慢。如果您构建一个版本APK,这个优化应该适用(在所有API版本上),我发现在我测试的各种设备上性能都很好,包括运行Android 4.2.2(API 17)的三星Galaxy S4。" - andrewlewis

来源:https://github.com/google/ExoPlayer/issues/26#issuecomment-296133260

API 24+在Debug和Release上运行良好。

此处的ExoPlayer文档中还有关于此内容的文字:https://google.github.io/ExoPlayer/faqs.html#why-doesnt-setplaybackparameters-work-properly-on-some-devices