一、Camera2的API了解
1.Camera2中的API的重要的类:
CameraManager:系统服务,所有摄像头设备的管理者,我们可以通过它去获得Camera设备对象。
CameraDevice:一个CameraDevice对应一个摄像头设备。其中的StateCallback是成功打开了摄像头的回调。
CameraCharacteristics:它是系CameraDevice的属性描述类。
CameraCaptureSession:系统与摄像头之间的会话,通过CameraDevice创建。其中的StateCallback是session创建成功后的回调。CaptureCallback是captureRequest创建成功后的回调。
CameraRequest:session创建成功后,通过它定制你想要对摄像头进行的操作。(包括预览、拍照、录制等功能)
2.Camera2API的调用流程
在这其中,
CameraManager是系统服务,其主要功能有:
获取某颗Camera的特性(能力) | getCameraCharacteristics(const):查询某个Camera的能力。 getCameraExtensionCharacteristics():查询某个Camera的Extension能力(扩展能力)。 |
是否支持多颗Camera同时创建session | getConcurrentCameraalds():获取同时配置session的Camera列表。 isConcurrentSessionConfiguratonSupported():指定的Camera和SessionConfiguration是否支持同时配置session。 |
枚举Camera | getCameraaldList():获取当前可用的CameraID列表。 |
打开Camera | openCamera():打开指定ID的Camera设备 |
监控Camera是否可用 | registerAvailabilityCallback():注册一个Callback来监听Camera可用状态。 unregisterAvailabilityCallback():注销一个Callback |
Torch控制 | registerTorchCallback():注册一个Callback来监听Torch Flash的模式状态。 unregisterTorchCallback():注销Callback。 setTorchMode():打开/关闭指定Camera的Flash Torch模式。 |
CameraCharacteristics是用来描述CameraDevice的属性/能力的。
例如:
1.获取key对应的value值
2.获取所有Cameracharacteristic支持的key列表
3.获取所有体验capturerequest支持的key列表
4.获取所有captureresult支持的key列表
5.获取当前logical Camera对应的physical Camera列表
6.获取初始化session是可设置的key列表,是capturerequest支持的key列表的子集
7.获取physical Camera可独立设置的key列表
8.获取需要camera权限才能访问的key列表
9.获取指定usecase下,推荐使用的stream配置信息
CameraDevice代表一个已打开的Camera设备,其功能主要有:
关闭相机 | close():以最快的速度关闭相机 |
获取相机ID(Camera ID) | getID():获取当前CameraID |
创建CaptureRequest | createCapturerequest(int templateType):根据templateType创建capturerequest.Builder createReprocessCaptureRequest(TotalCaptureResult inputResult):根据TotalCaptureResult 创建用于在处理的capture request.Builder |
创建CameraCaptureSession | createCaptureSession(SessionConfiguration config):根据sessionConfiguration创建Capture Session.Builder。 createExtensionSession():创建CameraExtensionSession。 isSessionConfigurationSupported():指定的SessionConfiguration是否支撑。 |
音频限制 | setCameraAudioRestriction(int mode):设置音频限制模式,可屏蔽来自ringtones,alarmsornotifications的震动和声音 getCameraAudioRestriction():获取当前音频使用技术. |
CameraCaptureSession 代表一个具体的相机会话
它实现的功能有:
1.送CaptureRequest给Camera底层
2.停止Repeating CaptureRequest
3.切换到离线会话
4.图像数据再处理(Reprocess)
5.启动性能优化(包括:延迟surface、预分配Buffer)
6.动态更新 Output Configuration
7.关闭会话
3.总结
从打卡相机到预览到拍照的整个流程为: