通过本文,你将了解到OpenGL以及OpenGL ES与音视频之间的关系,这里是简单的知识概念的入口
一、弄清OpenGL和音视频的关系
1、OpenGL是什么 OpenGL是一种跨平台的图形渲染API,用于实现高性能、交互式的2D和3D图形应用程序。OpenGL支持多种图形渲染技术,包括点、线、多边形、光照、纹理、混合、剪切、裁剪等技术。
前面的系列文章介绍了使用MediaCodec进行音视频编码和解码,以及完成了音视频的同步播放,但是这样还不够,如果想做到像抖音那种视频移动、旋转、缩放、加入水印、视频的动效,需要借助OpenGL的能力。视频由一帧帧图片组成,而OpenGL用于对图片进行复杂的处理,所以使用OpenGL给视频添加不同的效果,也就能理解是为什么了。
这也可以让人理解为什么我们使用MediaCodec去实现音视频播放的时候,布局文件里面是使用SurfaceView,其实是为了给视频提供更多的能力。
<SurfaceView android:id="@+id/sfv"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="200dp"/>
SurfaceView经典应用场景之一:如果你只有一个视频文件,但是当你需要在不同分辨率手机上进行全屏展示的时候,不做任何处理的情况下,会发现视频会被纵向或者横向拉伸,此时可以利用SurfaceView进行视频的裁剪,注意这时候仍然是全屏,不是上下或者左右留边,做到以视频中心为圆点,进行裁剪的处理,从而适配所有机型。
二、OpenGL和OpenGL ES的关系 OpenGL ES 是 OpenGL 的分支,针对手机和嵌入式设备,裁减了 OpenGL 部分不必要的功能。主要实现的功能有:
- 游戏
- 视频播放器
- 图片、视频剪辑、特效
| OpenGL ES 版本 | Android 版本 | 兼容性 | 功能 |
|---|---|---|---|
| 1.0 & 1.1 | Android 1.0 | / | 固定的图像管道,开发难度相比2.0低 |
| 2.0 | 123 | 不兼容1.x | 可编程的渲染管道,性能效率更高,开发难度更高 |
| 3.0 | 123 | 兼容2.0 | 性能更高,支持ETC2格式的透明纹理压缩 |
| 3.0 | 123 | 兼容2.0/3.0 | 新增计算着色器、单独的着色器对象等新特性,更多查看Android5.0特性 |
至于OpenGL和OpenGL ES中使用到的接口和概念,现在的我也是一知半解,后面的文章会进行进一步的学习与介绍,一起开始学习起来吧。