前言

在之前写了仿抖音的第一步,就是使用OpenGL显示摄像头数据,今天这篇就是在之前的基础上来录制视频,并且对之前的代码的结构进行了简单的整理,然后进行了仿抖音的视频录制。

工程结构整理

在仿抖音的第一步中封装了ScreenFilter类来实现渲染屏幕的操作,我们都知道在抖音的视频录制过程中,可以添加很多的效果进行显示,比如说磨皮、美颜、大眼以及滤镜等效果,如果把这些效果都放在ScreenFilter中,就需要使用很多的if else来进行判断是否开启效果,显而易见,这样的会显得项目结构不是很美好,我们可以将每种效果都写成一个Filter,并且在ScreenFilter之前的效果,都可以不用显示到屏幕当中去,所以可以使用FBO来实现这个需求,不懂 FBO的可以翻看上一篇的博客FBO的使用

但是这里有一个问题,就是在摄像头画面经过FBO缓冲,我们再从FBO中绘制到屏幕上去,这里的ScreenFilter获取的纹理是来自于FBO中的纹理,也就是OpenGL ES中的,所以不再需要额外扩展的纹理类型了,可以直接使用sampler2D类型,也就意味着ScrennFilter,

1. 开启效果:使用sampler2D

2. 未开启效果:使用samplerExternalOES

那么就需要ScreenFilter使用if else去判断,很麻烦,所以我们可以不管摄像头是否开启效果都先将摄像头数据写到FBO中,这样的话,ScreenFilter的采样数据始终都可以是sampler2D了。也就是下面这种结构:

需求

长按按钮进行视频的录制,视频有5种速度的录制,极慢、慢、正常、快、以及极快,抬起手指时候停止录制,并将视频保存以MP4格式保存在sdcard中。

(抖音的视频录制在录制完成以后显示的时候都是正常速度,这里我为了看到效果,保存下来的时候是用当前选择的速度进行显示的)。

分析需求

想要录制视频,就需要对视频进行编码,摄像头采集到的视频数据一般为AVC格式的,这里我们需要将AVC格式的数据,编码成h.264的,然后再封装为MP4格式的数据。对于速度的控制,可以在写出到MP4文件格式之前,修改它的时间戳,就可以了。

实现需求

MediaCodec

MediaCodec是Android4.1.2(API 16)提供的一套编解码的API,之前试过使用FFmpeg来进行编码,效果不如这个,这个也比较简单,这次视频录制就使用它来进行编码。MediaCodec使用很简单,它存在一个输入缓冲区和一个输出缓冲区,我们把要编码的数据塞到输入缓冲区,它就可以进行编码了,然后从输出缓冲区取编码后的数据就可以了。

还有一种方式可以告知MediaCodec需要编码的数据,

这个接口是用来创建一个Surface的,Surface是用来干啥的呢,就是用来"画画"的,也就是说我们只要在这个Surface上画出我们需要的图像,MediaCodec就会自动帮我们编码这个Surface上面的图像数据,我们可以直接从输出缓冲区中获取到编码后的数据。之前的时候我们是使用OpenGL绘画显示到屏幕上去,我们可以同时将这个画面绘制到MediaCodec#createInputSurface() 中去,这样就可以了。

那怎么样才能绘制到MediaCodec的Surface当中去呢,我们知道录制视频是在一个线程中,显示图像(GLSurfaceView)是在另一个GLThread线程中进行的,所以这两者的EGL环境也不同,但是两者又共享上下文资源,录制现场中画面的绘制需要用到显示线程中的texture等,那么这个线程就需要我们做这些:

1.配置录制使用的EGL环境(可以参照GLSurfaceView怎么配置的)

2.将显示的图像绘制到MediaCodec中的Surface中

3. 编码(h.264)与复用(mp4)的工作

代码实现

MediaRecorder.java

视频编码类

这里的status==MediaCodec.INFO_TRY_AGAIN_LATER可以看下图理解

android 仿抖音 编辑视频,Android 仿抖音之使用OpenGL实现抖音视频录制相关推荐

  1. android 仿微博评论编辑框_Android 仿微博的点赞功能的实现原理(持续点赞再取消)...

    产品需求,实现类似微博的持续点赞再取消功能,因为自己也偶尔刷微博,对这功能有一定的使用上的了解, 至于微博点赞的具体实现我并不知道,微博点赞在断网的情况下依然能点赞,不会提示网络异常,等有网络之后 重 ...

  2. android 仿微博评论编辑框_Android仿新浪微博加#话题的EditText实现

    需求 产品上线了,项目差不多算是稳定下来了,接下来就是一个个的版本迭代了.这周又增加了几个新功能,其中一个就是题目中讲的,要仿新浪微博(如下图)的输入框里的文字效果.作为整体的字体两边是井号,并且包括 ...

  3. android 仿微博评论编辑框_android 仿新浪微博开写篇

    准备,分析: 分析下这个界面,主要由几个tabbar分管不同的界面,首先我们会想到TabActivity,这是我们以前的做法,安卓更新越来越好,功能也越来越完善,我们也要时刻更新自己的技术,要不就会被 ...

  4. android仿陌陌tab,uniapp直播室|仿抖音视频|nvue+uniapp高仿陌陌直播

    一.介绍说明 U直播uniLiveShow是一款基于vue+Nvue+uni-app技术开发的综合小视频/聊天室/直播等功能的聊天直播项目.界面高仿热门抖音|火山小视频/陌陌直播,可滑动切换视频播放, ...

  5. Android 抖音爱心动画,Android动画 - 仿抖音加载动画

    在地铁中刷抖音,由于网络不通畅加载很慢,抖音会加载一个加载动画,感觉很有意思,于是分析了一下,自己写了Demo,实现效果. 效果图 分析动画 首先分析动画,初始状态是由两个相切的圆形图案组成. 将动画 ...

  6. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频

    一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...

  7. Android录制视频,仿微信小视频录制(一)

    Android录制视频,第一部分自定义控件 简述 公司有一个录制视频并上传的功能,录制视频具体使用类如下:硬件控制使用Camera,视频录制的格式音频等具体配置与录制使用MediaRecorder,预 ...

  8. android服务拍视频,Android仿微信拍摄、录制视频,以及视频播放(基于JCameraView和GSYVideoPlayer)...

    本项目使用Androidstudio开发工具 引入权限 引入依赖 //视频录制 implementation 'cjt.library.wheel:camera:1.1.9' //视频播放 api(' ...

  9. 【Android视图效果】共享元素实现仿微信查看大图效果

    在之前的文章中,我们通过动画实现了这个,具体可以查看[Android 动画]动画详解之仿微信查看大图效果(四),这里,我们用过度动画来实现. 什么是共享元素? 它是Android 5.0新加入的一种过 ...

  10. android形状属性、锁屏密码、动态模糊、kotlin项目、抖音动画、记账app、视频播放器等源码

    Android精选源码 直观了解Android的"形状"属性如何影响Drawable的外观. 一个灵活的视频播放器, 可替换播放器内核. android锁屏输入密码功能源码 背景动 ...

最新文章

  1. 【数据平台】sklearn库特征工程之特征选择和降维
  2. springboot 历史版本文档_Springboot看视频学太慢?来看看这份阿里深入实践Springboot文档...
  3. expdp导出 schema_记录一则expdp任务异常处理案例
  4. viewpager 跳转到指定页面
  5. 多学一招总没错吧?SpringBoot解决前后端分离的跨域问题
  6. 叮叮叮~~~~网络面试题(一)来了☺
  7. 前世今生:蚂蚁金服自研数据库OceanBase的道路与思考
  8. Shiro(二)通过shiro实现登录 连接数据库+集成Springboot
  9. echarts 按需引入模_【React】react项目引入echarts插件
  10. (转)DPDK收发包处理流程01 -- 网卡初始化
  11. NTKO控件使用总结——个人观点总结
  12. c#明华rf读卡器_RF通用开发包 明华RF读卡器 demo for c#(RF reader demo for c#) - 下载 - 搜珍网...
  13. 微信小程序卡券java_微信小程序领取卡券(java)
  14. javascript 使用zlib发送wss请求,接收blob,并解压
  15. window重命名图片不带括号
  16. 信息安全意识教育日历——By 安全牛
  17. 单片机控制电路的多图纸原理图和层次式设计
  18. 知识分享!COB封装流程介绍!-道合顺大数据Infinigo
  19. OKHttp 可能你从来没用过这样的拦截器
  20. DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN

热门文章

  1. 电脑QQ表情收藏测试用例
  2. 如何设计一个简易的工单系统
  3. bootstrap首页案例
  4. dnf新一代RPM软件包管理器
  5. 自身技术20K,offer 到手15K,为什么?
  6. 空客扩大RFID技术使用范围,提升供应链自动化程度
  7. word是如何绘制图形的?word绘制图形的方法
  8. WRAP 环球服装社会责任合规标准
  9. 【Linux】ubuntu20.04安装ansys2023r1教程--超详细
  10. JavaScript Array(数组) 对象