android 仿抖音 编辑视频,Android 仿抖音之使用OpenGL实现抖音视频录制
前言
在之前写了仿抖音的第一步,就是使用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实现抖音视频录制相关推荐
- android 仿微博评论编辑框_Android 仿微博的点赞功能的实现原理(持续点赞再取消)...
产品需求,实现类似微博的持续点赞再取消功能,因为自己也偶尔刷微博,对这功能有一定的使用上的了解, 至于微博点赞的具体实现我并不知道,微博点赞在断网的情况下依然能点赞,不会提示网络异常,等有网络之后 重 ...
- android 仿微博评论编辑框_Android仿新浪微博加#话题的EditText实现
需求 产品上线了,项目差不多算是稳定下来了,接下来就是一个个的版本迭代了.这周又增加了几个新功能,其中一个就是题目中讲的,要仿新浪微博(如下图)的输入框里的文字效果.作为整体的字体两边是井号,并且包括 ...
- android 仿微博评论编辑框_android 仿新浪微博开写篇
准备,分析: 分析下这个界面,主要由几个tabbar分管不同的界面,首先我们会想到TabActivity,这是我们以前的做法,安卓更新越来越好,功能也越来越完善,我们也要时刻更新自己的技术,要不就会被 ...
- android仿陌陌tab,uniapp直播室|仿抖音视频|nvue+uniapp高仿陌陌直播
一.介绍说明 U直播uniLiveShow是一款基于vue+Nvue+uni-app技术开发的综合小视频/聊天室/直播等功能的聊天直播项目.界面高仿热门抖音|火山小视频/陌陌直播,可滑动切换视频播放, ...
- Android 抖音爱心动画,Android动画 - 仿抖音加载动画
在地铁中刷抖音,由于网络不通畅加载很慢,抖音会加载一个加载动画,感觉很有意思,于是分析了一下,自己写了Demo,实现效果. 效果图 分析动画 首先分析动画,初始状态是由两个相切的圆形图案组成. 将动画 ...
- FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频
一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...
- Android录制视频,仿微信小视频录制(一)
Android录制视频,第一部分自定义控件 简述 公司有一个录制视频并上传的功能,录制视频具体使用类如下:硬件控制使用Camera,视频录制的格式音频等具体配置与录制使用MediaRecorder,预 ...
- android服务拍视频,Android仿微信拍摄、录制视频,以及视频播放(基于JCameraView和GSYVideoPlayer)...
本项目使用Androidstudio开发工具 引入权限 引入依赖 //视频录制 implementation 'cjt.library.wheel:camera:1.1.9' //视频播放 api(' ...
- 【Android视图效果】共享元素实现仿微信查看大图效果
在之前的文章中,我们通过动画实现了这个,具体可以查看[Android 动画]动画详解之仿微信查看大图效果(四),这里,我们用过度动画来实现. 什么是共享元素? 它是Android 5.0新加入的一种过 ...
- android形状属性、锁屏密码、动态模糊、kotlin项目、抖音动画、记账app、视频播放器等源码
Android精选源码 直观了解Android的"形状"属性如何影响Drawable的外观. 一个灵活的视频播放器, 可替换播放器内核. android锁屏输入密码功能源码 背景动 ...
最新文章
- 【数据平台】sklearn库特征工程之特征选择和降维
- springboot 历史版本文档_Springboot看视频学太慢?来看看这份阿里深入实践Springboot文档...
- expdp导出 schema_记录一则expdp任务异常处理案例
- viewpager 跳转到指定页面
- 多学一招总没错吧?SpringBoot解决前后端分离的跨域问题
- 叮叮叮~~~~网络面试题(一)来了☺
- 前世今生:蚂蚁金服自研数据库OceanBase的道路与思考
- Shiro(二)通过shiro实现登录 连接数据库+集成Springboot
- echarts 按需引入模_【React】react项目引入echarts插件
- (转)DPDK收发包处理流程01 -- 网卡初始化
- NTKO控件使用总结——个人观点总结
- c#明华rf读卡器_RF通用开发包 明华RF读卡器 demo for c#(RF reader demo for c#) - 下载 - 搜珍网...
- 微信小程序卡券java_微信小程序领取卡券(java)
- javascript 使用zlib发送wss请求,接收blob,并解压
- window重命名图片不带括号
- 信息安全意识教育日历——By 安全牛
- 单片机控制电路的多图纸原理图和层次式设计
- 知识分享!COB封装流程介绍!-道合顺大数据Infinigo
- OKHttp 可能你从来没用过这样的拦截器
- DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN