我需要能够在屏幕上旋转视频,因此我创建了一个自定义的TextureView,它在MediaPlayer上提供了一个方便层,类似于VideoView当前的实现方式。 This Android blog post对TextureView说了以下内容:

但是,似乎TextureView正在努力播放视频。我正在测试的目标设备具有1.2Ghz Rockchip RK3066双核CPU,四核Mali-400 GPU(ARM)和1GB RAM。在此设备上使用VideoViews的相同代码执行效果很好,但是TextureViews在播放时“结结巴巴”或根本不显示(左上方带有黑底白字的黑框),具体取决于特定的设备。使用Intel提供的x86“设备”,TextureViews在模拟器上的性能很好。
这种性能会达到预期吗,还是我应该在其他地方寻找问题所在?谢谢

最佳答案

是的,应该与TextureView一起使用。与直接在GPU中合成的SurfaceView不同(与管道直接将其渲染到屏幕上放置SurfaceView的屏幕区域进行渲染的SurfaceView不同),TextureView使视频经过常规的 View 合成进行渲染。尽管TextureView渲染是硬件加速的,但它仍在通过更多的步骤来获得更大的灵活性,并且肯定会影响性能。此外,与TextureView不同,在UI线程上运行的任何代码都可能影响SurfaceView

附加信息:

  • Advanced UI Fundamentals: Develop and Design
  • AOSP Graphics Architecture: SurfaceView or TextureView?
  • 10-06 13:56