【问题标题】:Android TextureView vs VideoView PerformanceAndroid TextureView 与 VideoView 性能
【发布时间】:2013-01-13 11:49:13
【问题描述】:

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

由于 SurfaceView 的内容不在应用程序的窗口中,因此无法有效地转换(移动、缩放、旋转)。这使得在 ListView 或 ScrollView 中使用 SurfaceView 变得困难。 SurfaceView 也无法与 UI 工具包的某些功能正确交互,例如淡入淡出边缘或 View.setAlpha()。

为了解决这些问题,Android 4.0 引入了一个名为 TextureView 的新小部件,它依赖于硬件加速的 2D 渲染管道和 SurfaceTexture。 TextureView 提供与 SurfaceView 相同的功能,但与 SurfaceView 不同的是,它的行为类似于常规视图。例如,您可以使用 TextureView 来显示 OpenGL 场景或视频流。 TextureView 本身可以动画、滚动等。

但是,TextureView 似乎正在努力播放视频。我正在测试它的目标设备具有 1.2Ghz Rockchip RK3066 双核 CPU、四核 Mali-400 GPU (ARM) 和 1GB RAM。在此设备上使用 VideoViews 的相同代码执行良好,但 TextureViews 在播放时“断断续续”或根本不显示(左上角带有白色方块的黑框),具体取决于特定设备。 TextureViews 在使用 Intel 提供的 x86“设备”的模拟器上运行良好。

这种性能会达到预期吗,还是我应该到别处寻找问题?谢谢

【问题讨论】:

  • 我不太了解您的特定设置。查看您的 sml 和一些相关的 java 可能会有所帮助。是否有权重应用于纹理视图? UI 编辑器中抛出了哪些警告?他们可能会帮助你。
  • 你能解决这个问题还是最好避免在媒体播放器中使用textureview?
  • 我们最终没有使用TextureView

标签: android performance android-widget android-videoview


【解决方案1】:

是的,应该是TextureView。 TextureView 导致视频通过普通视图合成进行渲染,这与直接在 GPU 中合成的 SurfaceView 不同(解码管道直接渲染到您放置SurfaceView 的屏幕区域)。虽然TextureView 渲染是硬件加速的,但它仍然需要通过更多步骤来获得额外的灵活性,并且肯定会影响性能。此外,与SurfaceView 不同,在 UI 线程上运行的任何代码都可能影响TextureView

附加信息:

【讨论】:

    【解决方案2】:

    你可以看到这个article

    SurfaceView 和 TextureView 扮演相似的角色,但实现方式却大不相同。要决定哪个是最好的,需要了解权衡。 因为 TextureView 是 View 层次结构的适当公民,所以它的行为与任何其他 View 一样,并且可以重叠或被其他元素重叠。您可以通过简单的 API 调用执行任意转换并将内容检索为位图。

    对 TextureView 的主要打击是合成步骤的性能。使用 SurfaceView,内容被写入 SurfaceFlinger 合成的单独层,理想情况下使用覆盖。使用 TextureView,View 组合始终使用 GLES 执行,对其内容的更新可能会导致其他 View 元素也重新绘制(例如,如果它们位于 TextureView 的顶部)。 View 渲染完成后,应用程序 UI 层必须通过 SurfaceFlinger 与其他层合成,因此您实际上将每个可见像素合成了两次。对于全屏视频播放器或任何其他实际上只是叠加在视频之上的 UI 元素的应用程序,SurfaceView 提供了更好的性能

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2016-05-05
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多