Android系统下视频流如何渲染和展示。系统提供了几种不同的View用于视频流的展示,它们分别是 SurfaceView, GLSurfaceView 和 TextureView。
一、发展历程
- SurfaceView出现最早,从Android 1.0版本开始就已经存在了,最初是为了解决在android中从非UI线程中绘制和更新UI的问题而设计的。它使用双缓冲技术,能够将渲染结果缓存起来,减少屏幕的闪烁和卡顿。同时由于它基于Surface类,所以支持直接访问原生的画布缓冲区,具有高效性能的优势。后来发现用起来不方便, SurfaceView渲染线程要单独写开发难度大, 一大堆都可以独立成模板。
- 后来从Android 1.5 Cupcake(API级别3)开始就出现了 GLSurfaceView,它是使用了模板的 SurfaceView,是对SurfaceView的扩展。它专门用于OpenGL ES的渲染,通过抽象出OpenGL ES的主线程和UI线程,使得处理复杂的图形逻辑变得更加简单。它支持OpenGL ES的大部分功能,同时也提供了丰富的回调函数和设计模式,便于应用自定义。
- 再后来发现GLSurfaceView不能根据屏幕的变化而变化, 这是由于GLSurfaceView同应用的Surface不是在同一层导致的问题。人们就想到把这个GLSurfaceView弄到应用的Surface中, 所以就从Android 4.0 Ice Cream Sandwich(API级别14)开始引入TextureView。它可以在GPU中进行图形渲染,支持硬件加速,并且因为不包含Surface,所以可以和其它普通View一样进行移动,旋转,缩放,动画等变化,能够通过类似ImageVi