2017年,短视频正以其丰富的内容表现力和时间碎片化的特点,快速崛起,而短视频最具可玩性之处就在支持人脸识别的动态贴图和各种不同效果的美颜、滤镜等。那短视频动态贴纸、滤镜、美颜等功能究竟是如何实现的呢?

为什么选择 OpenGL ES

Android 手机在处理 3D 图形相关的计算时一般都会选择使用 GPU。相较于 CPU,GPU 在图像动画处理时能提供更快的速度以达到更高的帧率。 Android 设备的 GPU 处理提供了两套不同的 API :Vulkan 和 OpenGL ES。其中 VulKan 只支持 Android 7.0 以上的设备。OpenGL ES 则支持所有的 Android 版本。

同时 OpenGL ES 作为 OpenGL 的子集,针对手机、PDA 和游戏主机等嵌入式设备去除了 glBegin/glEnd,四边形、多边形等复杂图元等许多非绝对必要的特性,消除它的冗余功能,从而提供了更容易学习和易于在移动图形硬件中实现的库。

所以目前,在短视频图像处理中 OpenGL ES 凭借它良好的系统支持性和功能的高度精简性使它成为了最广泛的 GPU 处理 API 之一。

下文我将以 Android 为例通过绘制一个三角形,简单介绍一下如何使用 OpenGL ES 2.0。

如何使用 OpenGL ES 绘制一个三角形

创建一个画布

首先要在 manifest 配置文件中添加申明使用 OpenGL ES 2.0 接口:

Android 为 3D 图形提供了两个可以作为画布的控件,GLSurfaceView 和 TextureView 。其中 GLSurfaceView 使用起来更加简单方便,只要像普通的 View 一样在布局文件中定义即可。

然后再 Activity 中直接用 findViewById() 获取 view 即可。

还需要调用 setEGLContextClientVersion() 方法来指定使用的 OpenGL ES 版本。

GLSurfaceView 的渲染模式有两种,默认是幕 RENDERMODE_CONTINUOUSLY 连续不断的更新屏 ,另外一种是RENDERMODE_WHEN_DIRTY只有在调用 requestRender() 在更新屏幕(要在 onSurfaceCreated()方法后调该改方法 )。

创建一个渲染器

上面创建的 GLSurfaceView 控件需要一个 GLSurfaceView.Renderer 来进行图像的渲染。使用 setRender() 为 GLSurfaceView 绑定一个渲染器。

GLSurfaceView.Renderer 有三个方法 :

onSurfaceCreated():调用一次,用来配置 View 的 OpenGL ES 环境。

onDrawFrame():每次重新绘制 View 时被调用。

onSurfaceChanged():如果 View 的几何形态发生变化时会被调用,例如当设备的屏幕方向发生改变时。

绘制三角形

创建一个 Triangle 类,确定三角形的坐标并传入一个 ByteBuffer 中。

定义 Vertex Shader 和 Fragment Shader 用来渲染图形顶点和图形表面。

用一个辅助方法加载 Vertex Shader 和 Fragment Shader 。

创建一个 Program 并传入 Vertex Shader 和 Fragment Shader 。

创建一个 onDraw() 方法用于绘制图形。

最后在 GLSurfaceView.Renderer 的 onDrawFrame () 方法中执行绘制方法。

这样就可以通过 OpenGL ES 2.0 在屏幕上绘制一个三角形了。效果如图:

上文以使用 OpenGL ES 在屏幕绘制一个三角形为例,展示了  OpenGL ES 的基础使用方法。感兴趣的朋友可以通过  Android 的官网教程(https://developer.android.com/training/graphics/opengl/environment.html)学习了解。

短视频图像处理实现

我们知道了如何在 Android 使用 OpenGL ES,那么短视频中滤镜和美颜等操作又是如何实现的?

首先在短视频采集过程中,需要提供一个 view 作为摄像头的预览画面展示,Android 中提供了 GLSurfaceView 以及 TextureView 这两个 API 来实现相机预览。通过这种方式就可以使用 Android 提供的 OpenGL ES 环境,对图像进行处理。比如美颜是对肤色部分做模糊美白加亮操作,滤镜贴纸是将素材图片处理成纹理叠加到原视频纹理中。

创建 SurfaceTexture 绑定 Camera 之后开启相机预览。

这里涉及很多 OpenGL 的操作。有兴趣的同学可以 看下这个开源项目(https://github.com/wuhaoyu1990/MagicCamera) 提供了丰富的滤镜效果示例。

又拍云最近推出了一站式短视频解决方案,提供短视频录制端、播放端 SDK,上传加速,不限量存储以及稳定快速的 CDN服务。短视频拍摄端 SDK 集成美颜、滤镜、动态贴纸等众多功能。一站式短视频解决方案,即可满足你的全部需求!

参考内容:维基百科 — OpenGL ES

推荐阅读:

短视频 SDK 功能点技术实现方式详解

转载于:https://www.cnblogs.com/upyun/p/7562162.html

短视频图像处理 OpenGL ES 实践相关推荐

  1. 多目标排序在快手短视频推荐中的实践

    分享嘉宾:郑东博士 快手 推荐算法技术总监 编辑整理:于洋 出品平台:DataFunTalk 导读:快手是中国领先的短视频和直播社区,拥有超过3亿的DAU和丰富的社交数据.快手秉承的价值观是真实.多元 ...

  2. 华为开发者大会主题演讲:抖音短视频网络性能优化实践

    内容来源:华为开发者大会2021 HMS Core 6 System技术论坛,主题演讲<抖音短视频网络性能优化实践>. 演讲嘉宾:卡涛,抖音Android架构师 大家好!我是来自字节跳动抖 ...

  3. 网易戏精ARCore短视频新玩法实践

    <网易戏精>是网易人工智能事业部旗下一款AI短视频产品,用户可以随手拍出自己的特效视频,其中包含数十个有趣的奇幻道具,其中放置类的道具只需要扫一下平面,即可摆放进现实世界中进行互动,既有充 ...

  4. 亿级短视频社交美拍架构实践

    https://www.jianshu.com/p/b73dcd2c03e7 本文系麦俊生在BOSS直聘主办的直聘学院「对话架构师」活动上的精彩分享. 一.短视频市场的发展 近几年来,短视频应用在国内 ...

  5. 新浪微博短视频服务的优化实践

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明 ...

  6. 【案例】新浪微博短视频服务的优化实践

    本文将分享新浪微博短视频如何提升用户体验.降低成本的思路与实践,包括提升短视频发布速度,降低长视频转码时间,通过新的 Codec 减少带宽成本等. 作者:李成亚来源:新浪微博|2018-08-06 1 ...

  7. Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  8. 播放器/短视频 SDK 架构设计,点播服务 (Demo)

    在Android中,我们可以直接使用MediaRecord来进行录像,但是在很多适合MediaRecord并不能满足我们的需求,比如我们需要对录制的视频加水印或者其他处理后,所有的平台都按照同一的大小 ...

  9. Android 短视频 SDK 转场特效的音视频同步分析

    在短视频的应用场景中,经常存在用户拍摄的两个或者多个视频生成一个视频的需求,为了达到两个视频平滑过渡,就需要在两个视频中间添加转场效果. 由于导入视频的帧率.码率等参数都不一致,如何保证在添加完转场效 ...

  10. 短视频、移动AI……你关注的热点移动开发技术都在这

    "2016 年对于移动开发领域来说是颇受冲击的一年,又是颇为精彩的一年".在这一年里,苹果发布了 iOS 10.watchOS 3.macOS Sierra.tvOS 四大操作系统 ...

最新文章

  1. 二十八、事务的提交与回滚演示
  2. js控制Iframe 和 iframe与主页的交互,传值 (转载)
  3. ITK:使用连通性细分具有相似统计信息的像素
  4. Channel Allocation HDU1373
  5. intel32指令中文版
  6. 全网疯传的PDF干货合集,50个精选BAT等大厂大数据、算法落地经验,白拿不谢!...
  7. 计算机创建不了文本文档,电脑系统没有新建文本文档怎么解决?
  8. vba九九乘法表代码_VBA程序控制结构示例-九九乘法表
  9. 口布杯花的60种叠法_10种餐巾折花杯花的步骤用文字解说怎么折
  10. 哇嘎显示等待无服务器,vagaa搜索不到资源怎么回事?vagaa哇嘎搜索没反应的解决方法...
  11. 解决旅游行业营销人员痛点的作品策划
  12. microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
  13. 疫情下,裁员补偿标准不可不知
  14. 2018 银联Java笔试 题,中国银联2018秋招笔试题
  15. 去除input search框输入自带的叉号
  16. 处理txt文件下载下来以后,排版格式不对的问题
  17. 区块链技术在中小企业型的应用
  18. 安装MySQL——压缩包安装
  19. html5播放器视频倍速播放功能
  20. 如何修改PPT中左下方状态栏的主题名称

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 4990T电子商务概论(农) 参考试题
  2. 各种排序算法稳定性的探讨
  3. Device mapper存储方式
  4. [算法模板]高斯消元
  5. 二:数据是用二进制数表示的
  6. C#网络编程(异步传输字符串) - Part.3
  7. VS2010中的sln,suo分别是什么含义
  8. 真不知道起什么名字了
  9. mvvm 模板中事件没有执行的解决方案
  10. Erlang中的record与宏