其他分享
首页 > 其他分享> > Android camera2学习总结

Android camera2学习总结

作者:互联网

前言

因为准备参加比赛的项目涉及到android 相机,所以记录一下这几天学到的有关camera2 API的使用。

GitHub地址
这是谷歌camera2的相机示例,网上大部分代码和讲解都是参考这个来的,我也是通过看这些代码和别人的博客来学习的。

上面的这个代码,谷歌已经没有更新维护了,最新的有关相机示例的GitHub仓库地址是这个:最新相机示例GitHub地址
这些示例使用的是kotlin语言,上面旧的使用java。

这里放一些我看过的比较不错的相关博客教程,也方便自己以后回顾:
Android Camera2 教程 · 第一章 · 概览
Android 音视频开发(三) – Camera2 实现预览、拍照功能
Android Camera2Demo学习

我的总结

首先,这是我学习后 画的camera 2 相机预览代码的流程图
你可以先看一遍谷歌camera2实例代码,然后再来对照这个图和我下面说的步骤,这样你对整个代码流程就比较清晰了。
从获取相机服务到展示预览画面,用到的部分camera2 API流程如图所示:

然后我再用文字描述一下:

第一步,在布局文件中添加TextureView控件,该控件用于展示预览画面。在代码中给该控件实例设置监听SurfaceTextureListener,在onSurfaceTextureAvailable()方法中(该方法会在SurfaceTexture准备好后调用)执行以下步骤;

第二步,获取相机服务得到相机管理类实例CameraManager;

第三步,调用cameraManager实例的getCameraIdList()方法,在得到的相机id列表中选择一个你要的相机id;

第四步,调用getCameraCharacteristics(cameraId)方法,传入相机id,得到装有该相机配置信息的CameraCharacteristics实例。通过characteristics.get(参数)方法可以获取该相机的朝向(前置,后置)、传感器方向、是否指支持camera2高级特性 等信息,以及通过characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(SurfaceTexture.class)可以得到相机支持的预览尺寸列表,进而选取最合适的预览尺寸;

第五步:调用cameraManager的
openCamera(cameraId,CameraDevice.StateCallback,handler)方法打开相机,在StateCallback的onOpened()方法中得到CameraDevice实例;

第六步:配置用于展示画面的surface,通过
new Surface(textureView.getSurfaceTexture())得到surface实例对象;

第七步:调用CameraDevice实例的createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)方法得到CaptureRequest.Builder,调用它的addTarget(surface)方法和surface进行绑定,再使用build()方法创建CaptureRequest实例对象;

第八步:调用cameraDevice的createCaptureSession()方法,在回调中拿到
CameraCaptureSession实例,用该实例的
setRepeatingRequest(captureReques,callback,handler)方法开始预览。

则此,你就能在手机上看到预览画面了,拍照功能我没有继续看,因为要做的项目没有拍照这个需求。

上面是我大概的思路总结,很多方面没有说到,例如 选取最优预览画面,修复预览方向等

关于各种类的更详细介绍,你可以看这篇博客:
Android Camera2 教程 · 第一章 · 概览

标签:总结,预览,camera2,相机,实例,Android,方法
来源: https://blog.csdn.net/weixin_44902943/article/details/112981277