前两篇描述了渲染方面的内容,昨天有写了点3D模型贴图以及全景影像效果的代码。感觉有必要把接口记录下,不然只是单纯的熟练使用,对其背后原理理解还不够深刻。
首先明确要完成的任务:通过OpenGL机制渲染视频。至于视频是本地、网络或者摄像头采集到的视频不关心。呈现方面是通过OpenGL机制,通过native层代码或者Android SDK里的控件都可以。
之前的实现是纯java即Android SDK里的GLSurfaceView控件,本地视频播放通过MediaPlayer方式播放。因此以下总结基于GLSurfaceView记录,总体可以分为GLSurfaceView模块以及OpenGl模块。
GLSurfaceView
继承自SurfaceView,使用SurfaceView中的surface来呈现OpenGL显示的内容。区别于SurfaceView,主要有以下增强:
1. 管理surface这块特殊的内存,这块内存可以合入Android的显示系统。
2. 管理EGL 的显示, 方便OpenGL渲染内容至前面提高的surface内存中。
3. 可以提供用户自定义Renderer渲染对象来执行真正的渲染实现。(这块没试过~~)
4. 在GLSurfaceView内置的子线程中渲染,不影响UI线程。
5. 提供不同的渲染模式,可以是按需刷新渲染或者不间断持续渲染。
不同于Android其他的View通过继承方式重写绘制接口,GLSurfaceView通过setRenderer接口将
渲染相关的接口代理给接口实现类去重写。而且,GLSurfaceView的使用非常简单,调用setRenderer以后就完成了所有的初始化以及启动子线程的操作。
特殊处理:
设置背景Translucent透明。因为GLS