在 《如何快速实现移动端短视频功能?》中,我们主要介绍了当前短视频的大热趋势以及开发一个短视频应用所涉及到的功能和业务。在本篇文章中,我们主要谈一谈短视频在Android端上的具体实现技术。

推荐阅读

《视频私有云实战:基于Docker构建点播私有云平台》

《如何快速实现移动端短视频功能?》

短视频业务主要包含:“视频录制”以及 “视频编辑”这两个核心功能。

其中视频录制又包括:视频采集、实时美颜、自定义码率、摄像头切换、变焦、对焦、曝光度调节以及滤镜等功能。

视频编辑包括:视频裁剪、视频拼接、混音、视频动画效果、动态贴图等功能。

Android端短视频录制的技术方案

我们先来说说视频录制:

视频录制的大致实现流程就如上图所示,先由Camera、AudioRecord进行最原始的相机画面以及声音的采集,然后将采集的数据进行滤镜、降噪等前处理,处理完成后由MediaCodec进行硬件编码,最后采用MediaMuxer生成最终的MP4文件。

这个方案的优点在于,由于全程采用了GPU以及硬件编码,基本上不涉及CPU上的操作,因此可实现在高帧率(30fps)、高分辨率(720P)以及高码率的情况下CPU暂用率也非常低,即使在性能较差的手机上也能很好的运行。但同时这个方案的难点也在于此。

做过音视频的同学都知道,通常情况下我们所说的对音视频的处理,主要是对视频的 YUV、H264 音频的PCM、AAC这类数据格式进行操作,这类操作都有相关的RFC技术也比较成熟,实现起来比较容易,出了问题也更容易定位,通常情况下在PC等设备上也都是这么处理的。

但这样的方案在对于手机端情况就不同了,虽然手机这几年的性能大大加强了,很多旗舰手机基本都是8核的CPU了,但要操作如此大量的图片数据并进行浮点运算对CPU的消耗还是很大的。CPU暂用率高就会引起手机发烫,手机发烫就会导致Camera采集的掉帧,甚至在一些小米等厂商下,手机发烫还会引起CPU降频,CPU一降频那APP所暂用的CPU比例就更高了,同时CPU暂用率高电量消耗就快。

因此上面的方案是目前Android上比较适合短视频录制的方案。

Android端短视频录制的具体实现

既然确定了技术方案,我们就来看看具体的实现。这里首先需要知道几个概念:

SurfaceTexture

我们知道在一些简单的自定义相机应用中,要实现一个相机,只需要将一个SurfaceHolder设置给Camera,Android系统就会自动的帮我们把Camera采集的数据绘制到屏幕上。但由于在短视频中我们需要对相机采集的数据进行前处理加工比如滤镜等,而且还要做到可见即所得的效果,因此必须要求我们将相机采集的数据先缓存起来,前处理完后自己再绘制到屏幕上,这时候就需要用到SurfaceTexture了。按照Android官方文档的介绍,SurfaceTexture就是这样一块用于接收Camera采集的数据,同时又不可见的画布。这块画布是存在于GPU内存中的。

TextureID

纹理ID,主要用来标识每一块纹理在GPU内存中的内存地址,类似于C语言中的内存指针。每一块GPU的纹理(可以理解为一块用于显示图片的画布)都有对应的一个TextureID进行标识。上述的SurfaceTexture在创建也同样需要绑定一个纹理ID进行唯一标识。

知道了这两个概念,我们就知道了Camera采集的数据具体存在于GPU的哪个位置了。接下来就可以对原始的数据进行前处理编码了。

这里有一个需要注意的地方,Android的camera采集到SurfaceTexture上的纹理是GL_TEXTURE_EXTERNAL_OES 类型的纹理,而目前市面的很多滤镜算法,如开源的GPUImage中很多的滤镜都是基于GL_TEXTURE_2D类型的纹理进行图像处理的。

因此在进行我们在基于开源滤镜算法或自研算法时需要先将GL_TEXTURE_EXTERNAL_OES类型的纹理转化为GL_TEXTURE_2D的纹理,或者在GPU Shader中加入 "#extension GL_OES_EGL_image_external: require"  来表明该纹理是OES纹理,同时编写基于OES纹理的图像处理算法。

目前网易这边是先将OES转化为TEXTURE_2D在进行前处理,这样便于与iOS端算法统一以及更好的接入一些开源的滤镜算法。

解决了SurfaceTexture的问题,接下来的MediaCodec以及MediaMuxer就比较容易了。Android中的MediaCodec天生支持将GPU中的纹理绘制到MediaCodec的Surface中,然后对Surface中的图像直接进行硬件编码,图像数据始终是在GPU空间中进行流转,而没有涉及到CPU。

这里需要注意的是MediaCodec以及MediaMuxer需要在API 18及以上才能使用。同时需要注意MediaCodec在不同设备上的兼容性。

Android端视频编辑功能

最后对于视频编辑的功能,目前Android上没有很好的系统API即硬件处理方式,主要还是利用ffmpeg进行相应的叠加、裁剪混音等后期处理。可以优化的一个点是,先将原始的MP4视频进行解码,然后将解码后的YUV数据映射到GPU的纹理上进行亮度、饱和度等参数的调节,做到文件编辑的所见即所得,然后将调好的参数配置为ffmpeg进行编辑处理。

想要获取更多产品干货、技术干货,记得关注网易云信博客

短视频技术详解:Android端的短视频开发技术相关推荐

  1. H.264/AVC视频编解码技术详解-殷汶杰-专题视频课程

    H.264/AVC视频编解码技术详解-46880人已学习 课程介绍         H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术.本课程将从原理.标准 ...

  2. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...

    今天,下午在和朋友聊天的时候,聊起了反射这个话题. 我们就从下面这个段简单的代码开始吧. 这个代码输出什么,想必大部分的读者跟我一样,会很快地知道答案:0 1 2 3 4 5 6 7 8 9.事实也是 ...

  3. 拐道交叉的css3动画,CSS3图片翻转动画技术详解

    CSS动画非常的有趣:这种技术的美就在于,通过使用很多简单的属性,你能创建出漂亮的消隐效果.其中代表性的一种就是CSS图片翻转效果,能让你看到一张卡片的正反两面上的内容.本文就是要用最简单的方法向大家 ...

  4. SANGFOR WOC初级认证——加速技术详解

    目录 SANGFOR WOC 加速技术 传输协议优化(快速TCP) 传输协议优化(HTP协议) 消减流量(流缓存技术) 消减流量(LZO/GZIP压缩算法) TCP代理技术详解 Web Push技术详 ...

  5. 【干货】NTP时间同步服务器技术详解

    [干货]NTP时间同步服务器技术详解 [干货]NTP时间同步服务器技术详解 A.1 时间同步原理 时间同步的原理就是按照接收到的时间来调控设备内部的时钟和时刻.在将时刻校对到 秒后,时间同步的调控原理 ...

  6. 详解android高仿微信后台接受消息,发送通知,监测网络连接

    公司让我研究websocket,利用这个时间写了个仿微信的demo. 服务器端功能比较简单:转发给所有的client (类似与群聊) android端功能:service后台接受消息:broadcas ...

  7. mfc编程vc6.0实现进程的创建和通信_免费送书:windows黑客编程技术详解

    01 书怎么送 点赞并留言,关注在下面的公众号后台回复「抽奖」,弹出小程序后点击参与. 开奖时间是 7 月 7 号 20:00 ,一定要留意微信消息,如果你中奖了,请尽快在中奖页面提交收件人信息并备注 ...

  8. 虚拟化技术之docker技术详解

    文章目录 虚拟化技术之docker技术详解 关于作者 作者介绍 前言 虚拟化技术概述及简介 一 .什么是虚拟化技术? 二.常见的虚拟化技术有哪些? 2.1 KVM 虚拟化技术概念 2.2 ESXI 虚 ...

  9. KILLZONE 2 显示技术详解

    转自 KILLZONE 2 显示技术详解[上] KILLZONE 2 显示技术详解[下] 人们开始摸索着如何抛弃现有的 Forward Rendering 而使用其他技术.作为其中一个方法,就是最近开 ...

  10. Day 92 : Docker容器技术详解

    Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版 ...

最新文章

  1. js 判断多个关键词_2020关键词优化,做好这三点效果立现!
  2. HTTP/1问题和HTTP/2解决思路
  3. MySQL是自主可控的吗_国产处理器那么多,究竟有哪些,是真正的“自主可控”?...
  4. mysql数据库杀掉堵塞_mysql数据库杀掉堵塞进程
  5. SAP ABAP Netweaver里进程能够申请的最大内存
  6. Excel VBA窗体上打印系统时间print now出错原因及解决方案
  7. 1971. Find if Path Exists in Graph
  8. html——name与value的使用
  9. 使用.NET Mobile API即51Degrees.mobi检测User-Agent
  10. Android中设置显示文本,TextView控件的使用(Android设置文本显示格式)
  11. Mysql5.7双主安装与使用
  12. B2C电子商务开发的网店管理系统
  13. 【2022西电A测】温度检测控制仿真系统
  14. 隐藏input的三种方法
  15. 安徽大学计算机科学与技术考研科目,2020安徽大学计算机专业课调整
  16. 华为畅享20 pro升级鸿蒙,最全升级机型汇总,附带华为鸿蒙HarmonyOS升级步骤
  17. 二十一世纪最该了解的一类人:找个极客做朋友吧
  18. 正态分布以及推测统计简述
  19. 蓝桥杯2017 包子凑数
  20. 曾善美一女大学生的创业之路

热门文章

  1. oracle字符集查看、修改、版本查看
  2. ASP.NET模板引擎技术
  3. java正则 链接_Java正则表达式获取网址和链接文字解析
  4. mysql计算秒_如何在MySQL中基于秒计算时间?
  5. c语言0x00如何不截断_binary 和 varbinary 用法全解
  6. OriginPro 2021b SR1 9.8.5 for win 科学绘图完美中文版
  7. 基因表达可视化工具使用指南
  8. SLAM学习--2D激光SLAM--入门学习
  9. mysql提供的六种约束_SQL的六种约束
  10. sh密码登录mysql_Shell下实现免密码快速登陆MySQL数据库的方法