本文介绍: 预览。使用PreviewView,它是一种支持裁剪、缩放和旋转的view,相机处于活动状态时,图片预览会流式传输到它的surface。图片拍摄。提供自动白平衡、曝光、延迟、闪光灯和对焦等功能,支持把图片放到内存缓存区和写文件。图像分析。应用会对每个帧运行analyze()方法,可以进行图像处理、视觉或机器学习。可以通过设置阻塞和非阻塞的模式处理分析流水线无法满足CameraX帧率要求。视频拍摄。录制视频流和音频流,对其压缩合并后写入磁盘。CameraX不是本文重点此处不做详细介绍。
1. 相关的API
Android有三套关于摄像头的API(库),分别是Camera、Camera2和CameraX,其中Camera已废弃,在Android5.0以后推荐使用Camera2和CameraX,Camera2推出是用来替换Camera的,它拥有丰富的API可以为复杂的用例提供深入的控制功能,同样的它使用起来也相对麻烦。而CameraX是在Camera2基础上构建的更高层次的库,旨在简化相机操作,提供更方便的API,降低学习曲线。
2. 选择使用场景
如果对相机的底层控制要求很高,需要自定义功能、处理原始图像数据等,那么 Camera2
是一个更合适的选择;如果想要更轻松地实现基本的相机功能,降低开发难度,CameraX
是一个更适合的选择。
3. CameraX简介
CameraX着重于用例,它能支持下面常见用例:
CameraX不是本文重点此处不做详细介绍。
4. Camera2
4.1 设计架构
摄像头可以看做是数据源,可以向摄像头注册多个业务流,摄像头会把每帧的数据同时输出到每个流水线,这些流水线可以并行对数据进行处理,每个流水线可以有自己的输出格式,传入的原始数据会通过每个与流水线相关联的隐士逻辑转换成相应的输出格式。摄像头需要使用CameraCaptureSession接受每个原始帧的帧配置,CameraCaptureSession用来记录绑定到摄像头的所有流水线,创建会话后无法添加或移除流水线。它会维持一个CaptureRequest队列,这些队列会成为活跃配置。CaptureRequest会讲配置添加到队列,选择一个或者多个可用的流水线从摄像头接收帧。
4.2 预览
4.3 拍照
4.4 视频
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。