性能问题:Android TV上的2×2与 3×3网格的视频播放卡顿
我在测试我的Android TV应用时遇到了性能问题。
当我配置一个2x2的网格布局并从设备存储播放本地视频(每个大约1 GB)时,在实体电视设备上播放会出现卡顿。视频要么会卡顿,要么无法流畅播放。然而,同样的配置在Android TV模拟器上运行平滑。
我想了解:
- 这是否与Android TV的硬件视频解码能力相关的限制?
- 是否有并行播放多路高分辨率本地视频的推荐做法?
- 我是否应该降级视频质量或限制比特率以获得更好的性能?
- 是否有针对电视设备的ExoPlayer优化建议用于多视频播放?
对于在真实Android TV硬件上优化多视频播放性能的任何指导,我们将不胜感激。
解决方案
作为一个在Android TV上有开发经验的人给出的一般性意见:大多数电视的硬件都相当吃紧,通常只能在硬件所支持的视频和音频编解码器下运行单一路视频流。一次性尝试超过这个能力的操作(即使只是后台的同步处理)也可能让某些设备卡顿甚至崩溃。即便经过大量优化,你也会遇到比你设想中更差的设备。
因此来回答你的问题:
这是否与Android TV的硬件视频解码能力相关的限制?
很可能。你肯定会遇到大量设备,其硬件解码器仅支持单一路视频/音频流实例。也不要指望在软件中解码音频,因为那样会让不少电视机变得不稳定。
是否有并行播放多路高分辨率本地视频的推荐方法?
基于经验我的建议是为了兼容最多的设备,唯一较为合理的方法是对视频进行预合并。
是否应该对视频进行降尺度或限制比特率以获得更好性能?
这可能会对某些设备起作用,但不能指望一定有效。
是否有针对电视设备的ExoPlayer优化建议用于多视频播放?
据我所知没有。关于优化的唯一参考来自 来自Android文档:
如果内容的比特率或分辨率超过设备能力,设备可能无法足够快地解码。你可能需要使用较低质量的内容以在此类设备上获得良好的性能。
如果你在运行Android 6.0(API 23)至Android 11(API 30)版本的设备时遇到视频卡顿,尤其是在播放DRM保护或高帧率内容时,可以尝试启用 [异步缓冲队列](https://developer.android.com/guide/topics/media/exoplayer/customization#enabling-asynchronous-buffer-queueing)。