OpenGL ES(1)和音视频的关系

284 阅读2分钟

通过本文,你将了解到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.1Android 1.0/固定的图像管道,开发难度相比2.0低
2.0123不兼容1.x可编程的渲染管道,性能效率更高,开发难度更高
3.0123兼容2.0性能更高,支持ETC2格式的透明纹理压缩
3.0123兼容2.0/3.0新增计算着色器、单独的着色器对象等新特性,更多查看Android5.0特性

至于OpenGL和OpenGL ES中使用到的接口和概念,现在的我也是一知半解,后面的文章会进行进一步的学习与介绍,一起开始学习起来吧。