我设法使用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
。如果我可以提供任何其他相关信息/代码来帮助理解上下文,请告诉我。
答案 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