主要变量

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视频拍摄功能总结相关推荐

  1. Android实现分享代码,Android 分享功能的实现代码

    Android 分享功能的实现代码 一个Activity中,取出设备上安装的所有支持分享动作的Activity,在grid中显示. 实例代码: /** * 分享activity */ public c ...

  2. Android P(3)---Android P 功能和 API

    Android P 功能和 API Android P 为用户和开发者引入众多新特性和新功能. 本文重点介绍面向开发者的新功能. 要了解新 API,请阅读 API 差异报告或访问 Android AP ...

  3. android支持平台,Android 平台功能

    Android 平台功能Android Platform Features 12/11/2019 本文内容 开发 Xamarin.Forms 适用于 Android 的应用程序需要 Visual St ...

  4. Android Q功能

    Finally, Android Q Beta 1 has been released and we are very eager to share what it has in store for ...

  5. Android P功能

    Android P Preview was launched a few months back and we're still in awe of the new features that hav ...

  6. android计算器开发论文,基于Android计算器功能的实现毕业设计论文

    <基于Android计算器功能的实现毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于Android计算器功能的实现毕业设计论文>相关文档资源请在帮帮文库(ww ...

  7. android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...

    想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...

  8. android 首字母 验证码,Android 验证码功能实现代码

    先给大家展示下效果图,如果大家感觉还不错,请参考实现代码 很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这里只是实现了跳转,并没有进 ...

  9. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

最新文章

  1. *103.编译的过程
  2. python全栈工程师百科_Python全栈工程师(列表、拷贝)
  3. nlp自然语言处理_不要被NLP Research淹没
  4. 快速了解Java集合框架
  5. dubbo指定服务提供者ip_使用指定IP调用Dubbo服务
  6. table中加表单元素怎么验证_使用element-ui +Vue 解决 table 里包含表单验证的问题...
  7. 十三不香了?不止去掉刘海,iPhone14或改用QLC闪存:最高2TB容量
  8. 2021高考文科成绩怎样查询,2021年本科分数线是多少?如何查询分数
  9. html点线面制作,openlayers 添加点线面 Demo(可直接运行)
  10. Docker部署nginx并修改配置文件
  11. Project file is incomplete. Expected imports are missing 错误解决方案
  12. workerman--测试
  13. 阿里云linux主机更新hostname
  14. 解析UML的要点与应用
  15. 国务院《政务信息资源共享管理暂行办法》带来哪些新商机?
  16. Atitit.redis操作总结
  17. usb keyboard找不到驱动程序_让台式机也能用上蓝牙,毕亚兹USB蓝牙适配器体验
  18. Windows服务器tomcat日志拆分(cronolog )
  19. 百度 BAE 项目部署
  20. android webView 全屏播放网络视频

热门文章

  1. android多线程下载图片
  2. 深入研究Java类加载机制
  3. button和sumbit提交表单的区别
  4. Firebug入门指南
  5. python numpy使用
  6. 完整SQL分页存储过程(支持多表联接)
  7. 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
  8. 树,二叉树,森林各种遍历总结:
  9. 设计模式:单例模式之饿汉式
  10. java:UDP通信