我成功地使用SimpleExoPlayer来播放HLS流,并通过在播放机上设置PlaybackParameters
实现了选择不同播放速度(1.25x、1.5x等)的工作方式。但是在一些设备中,当我选择任何与1x不同的播放速度时,播放器就会开始跳过很多帧--和音频变得有点失真。
在2.6.0的ExoPlayer发布说明中,它说当渲染器无法保持速度时,它们开始只显示关键帧,我怀疑这就是正在发生的事情。但是我已经看到,在同一款智能手机上使用YouTube应用程序2倍的播放速度是非常有效的,所以我想知道我是否可以做些什么来提高的性能的ExoPlayer渲染器。也许我在设定播放速度时没有使用HW解码?有什么配置吗?
我目前正在使用ExoPlayer版本的2.6.1
。我使用的对象是一个SimpleExoPlayer
实例,它具有一个DefaultRenderersFactory
激活扩展(使用EXTENSION_RENDERER_MODE_ON
)和一个DefaultTrackSelector
。对于媒体源,我使用HlsMediaSource
和本地创建的Handler
。如果有任何其他相关的信息/代码,我可以提供,以帮助理解上下文,请告诉我。
发布于 2018-02-22 19:09:03
在release
上构建应用程序时,问题不会发生。这是由于在调试模式下运行应用程序时关闭了Sonic lib (一个ExoPlayer依赖项)使用的JVM上的优化,根据andrewlewis
在该项目的github的讨论中说:
“新的实现使用Java版本的Sonic,因此它的性能受到Java运行时应用的优化的影响。在可调试器构建中有一个特定的优化被关闭,这会导致Sonic的内部循环非常慢。如果您构建了一个发布版APK,这个优化应该适用于(所有的API版本),而且我发现性能在我测试过的各种设备上都很好,包括运行Android4.2.2 (API 17)的三星Galaxy S4。”
来源:https://github.com/google/ExoPlayer/issues/26#issuecomment-296133260
API 24+可以很好地处理调试和发布。
在ExoPlayer文档中也有关于这一点的文本:https://google.github.io/ExoPlayer/faqs.html#why-doesnt-setplaybackparameters-work-properly-on-some-devices
https://stackoverflow.com/questions/48887678
复制相似问题