Android视频拍摄功能总结
主要变量
WindowSurface mDisplaySurface //对Surface的包装
WindowSurface mEncoderSurface
渲染器: FullFrameRect -->
1.初始化
1.1 初始化Camera
1.2 在SurfaceView.surfaceCreate()
1.2.1 初始化OpenGL ES 2.0
根据 mEGLDisplay , EGLContext 这2个变量初始化 EglCore
1.2.2 将Surface和OpenGL ES 2.0绑定
调用 EGL14.eglCreateWindowSurface(surface) 绑定
EGL14.eglCreateWindowSurface(surface) 封装在 EglCore
surface = SurfaceView.Holder.surface
最终创建出 WindowSurface mDisplaySurface
1.2.3 创建渲染器
初始化 片元着色气 , 顶点着色气 和 着色器运行时所需的变量名 ---> 生成mFullFrameBlit
mFullFrameBlit 保有每帧绘制时所需的变量
mFullFrameBlit 可以生成一个纹理ID
1.2.3 生成一个Texture
SurfaceTexture mCameraTexture = mFullFrameBlit.createTextureObject --->
1.2.4 添加 帧更新监听器(onFrameAvailable)
1.2.5 将Camera和Texture绑定
Camera.setPreviewTexture(mCameraTexture)
1.2.6 打开Camera,此时onFrameAvailable就会被循环调用
2.帧的更新过程(onFrameAvailable的调用)
2.1 更新SurfaceView
抓住camera的下一帧
把这一帧更新到SurfaceView
首先我们吧这个Surface打住,以便可以进行读写操作。
当 mCameraTexture.updateTexImage() ,从Camera中获取数据更新到Texture
OpenGL ES 2.0 的渲染器,根据这个TextureID做渲染
完了以后将OpenGl ES 2.0 中的数据移到Surface中 EGL14.eglSwapBuffers(mEGLDisplay, eglSurface)
2.2 录像输出到MediaCodec.Surface
大致流程跟
首先我们吧这个Surface打住,以便可以进行读写操作。
这里注意:我们不需要调用updateTexImage()
OpenGL ES 2.0 的渲染器,根据这个TextureID做渲染
交给MideaCodec做编码(这是一个异步操作)
添加一个时间轴
完了以后将OpenGl ES 2.0 中的数据移到Surface中
3.开始拍摄
3.1 初始化MediaCodec
3.2 将Surface和OpenGL ES 2.0绑定
1.2.2 Surface = MediaCodec.getInputSurface()
3.2 打开拍摄标记为,用以判断是否执行2.2
4.结束拍摄
4.1 MediaCode.stop()
转载于:https://www.cnblogs.com/jarvisyin/p/6486192.html
Android视频拍摄功能总结相关推荐
- Android实现分享代码,Android 分享功能的实现代码
Android 分享功能的实现代码 一个Activity中,取出设备上安装的所有支持分享动作的Activity,在grid中显示. 实例代码: /** * 分享activity */ public c ...
- Android P(3)---Android P 功能和 API
Android P 功能和 API Android P 为用户和开发者引入众多新特性和新功能. 本文重点介绍面向开发者的新功能. 要了解新 API,请阅读 API 差异报告或访问 Android AP ...
- android支持平台,Android 平台功能
Android 平台功能Android Platform Features 12/11/2019 本文内容 开发 Xamarin.Forms 适用于 Android 的应用程序需要 Visual St ...
- Android Q功能
Finally, Android Q Beta 1 has been released and we are very eager to share what it has in store for ...
- Android P功能
Android P Preview was launched a few months back and we're still in awe of the new features that hav ...
- android计算器开发论文,基于Android计算器功能的实现毕业设计论文
<基于Android计算器功能的实现毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于Android计算器功能的实现毕业设计论文>相关文档资源请在帮帮文库(ww ...
- android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...
想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...
- android 首字母 验证码,Android 验证码功能实现代码
先给大家展示下效果图,如果大家感觉还不错,请参考实现代码 很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这里只是实现了跳转,并没有进 ...
- 基于百度地图实现Android定位功能实现(详解+教程)
基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...
最新文章
- *103.编译的过程
- python全栈工程师百科_Python全栈工程师(列表、拷贝)
- nlp自然语言处理_不要被NLP Research淹没
- 快速了解Java集合框架
- dubbo指定服务提供者ip_使用指定IP调用Dubbo服务
- table中加表单元素怎么验证_使用element-ui +Vue 解决 table 里包含表单验证的问题...
- 十三不香了?不止去掉刘海,iPhone14或改用QLC闪存:最高2TB容量
- 2021高考文科成绩怎样查询,2021年本科分数线是多少?如何查询分数
- html点线面制作,openlayers 添加点线面 Demo(可直接运行)
- Docker部署nginx并修改配置文件
- Project file is incomplete. Expected imports are missing 错误解决方案
- workerman--测试
- 阿里云linux主机更新hostname
- 解析UML的要点与应用
- 国务院《政务信息资源共享管理暂行办法》带来哪些新商机?
- Atitit.redis操作总结
- usb keyboard找不到驱动程序_让台式机也能用上蓝牙,毕亚兹USB蓝牙适配器体验
- Windows服务器tomcat日志拆分(cronolog )
- 百度 BAE 项目部署
- android webView 全屏播放网络视频