Camera2 API---------随笔记录

Camera2 API---------随笔记录

Camera2 demo流程图
在这里插入图片描述

预览操作:

启动后台线程 ----- 给textureView设置监听 ----onAvaliable的时获取相机信息, 确定预览尺寸--------开启相机, 需要传入回调cameraDevice.stateCallback------onOpened中开启预览---- captureRequestBuilder设置相机参数,------设置 target surface ( texture.getSurface())----- 创建cameraCaptureSession,传入回调 stateCallback---- onConfigured时setRepeatingRequest重复捕获会话图像---------------------------至此预览就完成了

capturerequestBuilder 设置相机参数-----设置target ( imageReader. getSurface)------cameraCaptureSession. capture() 传入 captureCallback------然后可以在onComplete中做一些后续处理
同时, 拍照得到的图片会下发到imageReader的surface中, imageReader有个监听 onImageAvaliableListener, 在这里可以做一些图片保存的操作

SurfaceView ImageReader MediaRecorder 从surface获取数据之后怎么工作的?
深层逻辑都调用了native代码
surfaceView/ TextureView 内部都有一个canvas, 在从surface获取到数据之后, 可以绘制出来
ImageReader内部相当于有个队列, 其构造方法中要传入 宽, 高, 图片格式, 以及最大缓存图片数量,新的图片通过surface传到imageReader, 同时我们通过 acquireLatestImage或者 acquireNextImage方法从队列中取出图片, 如果我们取的速度(处理图片的速度)小于数据源生产图片的速度, 最终就会产生丢帧
acquireNextImage 从队列中获取下一帧, 没有则返回null;acquireLatestImag从队列中获取最新一帧, 并且将老的丢弃, 内部其实也调用了acquireNextImage, 但是加了 丢弃 旧 image的操作, 所以比较推荐
MediaRecorder, 是一个用来录制音频、视频的类:它有 initial (初始状态), 已初始化状态, 数据源配置状态, prepare(就绪状态), recording(录像状态),released, error 7种状态,我们在使用时需要严格按照状态图中的函数调用顺序, 否则会报异常

因此, 我们录像时, 首先setupMediaRecorder(){
setAudioSource()
setVideoSource( surface ) //进入已初始化状态
setOutputFormat() // 进入数据源配置状态
setAudioEncoder()
setVideoEncoder()

prepare()// 进入prepare状态
}

然后,当按下录像按钮时, 调用mediaRecorder.start() 方法, 进入recording 状态
MediaRecorder内部也有一个surface, camera将一帧帧的图片下发到 surface, 然后surface作为mediaRecorder–video的数据源
到 surface, 然后surface作为mediaRecorder–video的数据源

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值