之前的一篇文章中我们介绍了播放视频的时候调整音频的音量,我们能否在播放视频的时候在视频画面上加上水印?
有同学可能会说了,我直接用TextureView渲染视频画面,然后在TextureView上盖一层ImageView可以吗?
好像显示效果上没有什么问题,但是仔细分析还是不能满足要求?
1.ImageView和TextureView有明显的层级关系,如果出现View层级的问题,不太好处理
2.TextureView渲染视频的时候,提供了getBitmap()接口来截取视频的某一帧,如果盖上一层ImageView无法实现截图的功能
3.ImageView盖在TextureView,会拦截TextureView的事件,造成播放器交互方面的问题。
上面三个问题表示TextureView上面盖一层ImageView的方式是行不通的。
既然行不通,有没有方法可以解决这个问题?
其实除了TextureView和SurfaceView渲染视频之外,GLSurfaceView也是渲染视频的一种View,GLSurfaceView和OpenGL结合,可以实现给播放中的视频添加水印的目的。
1.GLSurfaceView介绍
GLSurfaceView从Android 1.5(API level 3)开始加入,继承自SurfaceView,实现了SurfaceHolder.Callback2接口,拥有SurfaceView的全部特性,也有view所有的功能和属性,特别是处理事件的能力,它主要是在SurfaceView的基础上它加入了EGL的管理,并自带了一个GLThread绘制线程(EGLContext创建GL环境所在线程即为GL线程),绘制的工作直接通过OpenGL在绘制线程进行,不会阻塞主线程,绘制的结果输出到SurfaceView所提供的Surface上,这使得GLSurfaceView也拥有了OpenGlES所提供的图形处理能力,通过它定义的Render接口,使更改具体的Render的行为非常灵活性,只需要将实现了渲染函数的Renderer的实现类设置给GLSurfaceView即可。
GLSurfaceView提供了下列特性:
1.提供并且管理一个独立的Surface。
2.