
Camera1、Camera2 与CameraX
在 Android 相机开发领域,"Camera3" 始终是一个充满误解的术语 ------Google 从未发布过官方命名的 "Camera3 API",但随着计算摄影技术的演进,行业逐渐将CameraX (应用层简化方案)和厂商定制 HAL 框架(如高通 CamX)纳入 "第三代相机技术" 的范畴。
本文将先厘清概念误区,再从架构设计、功能特性、开发实践三个维度,全面对比 Camera1、Camera2 及两类 "准 Camera3" 技术的核心差异。
概念澄清
Android 相机技术的演进始终围绕 "功能扩展 " 与 "开发简化" 两个核心目标,不存在官方定义的 "Camera3 API",真实路径如下:
2008 Camera1 2014 Camera2 2019 CameraX 应用层封装 厂商HAL框架 如高通CamX
1. 术语定义澄清
| 术语 | 官方定位 | 常见误解来源 |
|---|---|---|
| Camera1 | Android 1.0-5.0 原生相机 API | 无 |
| Camera2 | Android 5.0+ 新一代相机 API | 无 |
| CameraX | Jetpack 组件(基于 Camera2 封装) | 被误称为 "Camera3"(应用层视角) |
| 高通 CamX | 厂商 HAL 层相机框架 | 被误称为 "Camera3"(底层适配视角) |
下文将以 "Camera1→Camera2→CameraX / 厂商 HAL 框架" 为脉络展开对比,并特别标注 "准 Camera3" 技术的独特价值。
核心技术深度解析
1. Camera1:初代相机 API(2008-2014)
核心架构
基于同步阻塞模型 ,通过android.hardware.Camera单类直接控制硬件,本质是对相机硬件的简单封装:
-
预览 / 拍照依赖
SurfaceHolder传递图像数据; -
参数配置通过
Camera.Parameters统一管理(如设置分辨率、闪光灯模式); -
所有操作在单线程执行,调用
takePicture()时会阻塞整个相机管线。
功能特性
| 能力维度 | 具体表现 | 局限性 |
|---|---|---|
| 基础功能 | 支持拍照、录像、预览 | 无连拍、HDR 等高级功能 |
| 参数控制 | 仅支持分辨率、闪光灯等基础设置 | 无法调节 ISO、曝光时间等专业参数 |
| 多设备支持 | 仅支持单摄像头独占访问 | 无法同时调用前后摄像头 |
| 数据处理 | 仅输出 JPEG 格式 | 不支持 RAW 格式、YUV 数据实时处理 |
典型代码示例(预览功能)
java
// Camera1实现预览仅需30行核心代码
SurfaceView surfaceView = findViewById(R.id.surface\_view);
SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open(); // 直接打开相机
try {
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90); // 固定旋转角度
mCamera.startPreview(); // 启动预览
} catch (IOException e) {
e.printStackTrace();
}
}
// 省略surfaceChanged/surfaceDestroyed实现
});
核心评价
- 优势:API 极简,开发成本低,兼容所有 Android 设备(API 1+);
- 劣势:性能差(延迟高、功耗大)、功能僵化,2014 年随 Android 5.0 被官方标记为 "过时"。
2. Camera2:专业级相机 API(2014 年至今)
Camera2(android.hardware.camera2)是 Android 5.0(API 21)推出的革命性重构方案,彻底颠覆了 Camera1 的设计逻辑,至今仍是专业相机应用的核心依赖。
核心架构
采用异步管道模型,通过 "相机服务 - 设备 - 会话" 三级架构实现硬件解耦:
- CameraManager:系统相机服务入口,负责枚举设备、查询能力;
- CameraDevice:单个相机设备实例,管理硬件资源;
- CameraCaptureSession:捕获会话,负责提交请求、管理缓冲区队列;
- CaptureRequest:捕获请求,可精细配置每帧的参数(如曝光、对焦)。
功能特性(相比 Camera1 的飞跃)
-
全参数手动控制
支持调节 ISO、曝光时间(纳秒级)、白平衡增益、对焦距离等专业参数,例如:
java
// Camera2设置手动曝光参数
CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(
CameraDevice.TEMPLATE_STILL_CAPTURE);
builder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, 10000000L); // 10ms
builder.set(CaptureRequest.SENSOR_SENSITIVITY, 400); // ISO 400
session.capture(builder.build(), callback, handler);
-
高级拍摄能力
支持零快门延迟(ZSL)、连拍(burst capture)、RAW 格式捕获、多帧 HDR 合成等,是夜景模式、人像模式等计算摄影功能的基础。
-
多流并行处理
可同时输出预览流、拍照流、视频流,例如预览时同步输出 YUV 数据用于人脸检测,输出 JPEG 用于拍照,且各流参数可独立配置。
-
硬件能力分级
按设备支持程度分为 4 个级别,解决兼容性碎片化问题:
- LEGACY:仅兼容 Camera1 功能(旧设备);
- LIMITED:支持部分高级功能(中端设备);
- FULL:完整支持所有核心功能(旗舰设备);
- LEVEL_3:支持 RAW 重处理、外部相机等进阶特性。
核心评价
- 优势:功能全面、性能卓越,可实现专业相机级体验;
- 劣势:开发复杂度极高(实现简单预览需 100 行 + 代码、5 个以上回调),硬件特性依赖厂商实现,不同机型差异显著。
3. 「准 Camera3」技术:CameraX 与厂商 HAL 框架
(1)CameraX:Jetpack 封装的应用层方案(2019 年推出)
CameraX 是 Google 基于 Camera2 开发的 Jetpack 库,定位为 "简化版 Camera3",核心解决 Camera2 的开发复杂度问题。
核心架构
采用用例驱动设计,屏蔽底层架构细节:
- Preview:预览用例,自动适配 SurfaceView/TextureView;
- ImageCapture:拍照用例,支持 JPEG/RAW 输出;
- ImageAnalysis:图像分析用例,提供 YUV 数据用于 AI 处理;
- VideoCapture:视频录制用例,集成 MediaCodec 编码。
核心优势
-
极致简化开发
实现预览功能仅需 10 行核心代码,自动处理生命周期:
java
// CameraX实现预览(Kotlin)
val preview = Preview.Builder().build()
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
preview.setSurfaceProvider(previewView.surfaceProvider)
// 绑定生命周期
cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT\_BACK\_CAMERA, preview)
}, ContextCompat.getMainExecutor(this))
-
设备自动适配
内置兼容性数据库,自动处理不同机型的硬件差异(如分辨率适配、旋转角度校正),支持 90% 以上的 Android 设备(API 21+)。
-
扩展能力丰富
通过
Camera2Interop可直接访问 Camera2 的底层参数,兼顾易用性与灵活性;支持第三方扩展(如 Google 的 HDR 扩展、厂商的美颜扩展)。
(2)高通 CamX:HAL 层厂商框架(底层适配方案)
高通 CamX 是替代旧版 mm-camera 的 HAL 层框架,常被误称为 "Camera3",但其定位是厂商级硬件适配工具,与应用层 API 无关。
核心特性
- 深度整合高通 SoC(如骁龙 8 Gen4)的 ISP、Hexagon DSP 等硬件;
- 支持多摄像头协同、计算摄影算法(如夜景多帧合成、人像分割);
- 提供标准化接口供应用层 API(Camera2/CameraX)调用。
多维度全面对比
| 维度 | Camera1 | Camera2 | CameraX(准 Camera3) | 高通 CamX(准 Camera3) |
|---|---|---|---|---|
| 技术定位 | 初代基础 API(已过时) | 专业级应用层 API | 简化版应用层 API(Jetpack) | 厂商级 HAL 层框架 |
| 最低支持版本 | API 1+ | API 21+ | API 21+(推荐 API 24+) | 随高通 SoC 适配(无统一标准) |
| 核心架构 | 同步阻塞模型 | 异步管道模型(三级架构) | 用例驱动模型(封装 Camera2) | 硬件抽象层(连接 Camera2 与硬件) |
| 参数控制 | 基础参数(分辨率 / 闪光灯) | 全参数手动控制(ISO / 曝光等) | 基础参数 + Camera2Interop 扩展 | 硬件级参数(ISP/DSP 配置) |
| 高级功能 | 无 | HDR/RAW/ 连拍 / ZSL | 内置 HDR / 人像 + 扩展插件 | 计算摄影 / 多摄协同 |
| 开发复杂度 | 极低(100 行内实现预览) | 极高(需处理多级回调) | 极低(用例化 API) | 极高(厂商级开发) |
| 兼容性 | 全设备兼容 | 碎片化(依赖硬件级别) | 自动适配 90%+ 设备 | 仅支持高通 SoC 设备 |
| 典型应用场景 | 旧应用维护、低端设备 | 专业相机 APP、计算摄影开发 | 新应用快速开发、Jetpack 集成 | 高通平台相机固件定制 |
选型建议与实战指南
1. 按开发场景选型
| 场景 | 推荐技术 | 核心理由 |
|---|---|---|
| 旧应用维护(需兼容 Android 4.4-) | Camera1 | 唯一兼容方案,无需重构 |
| 专业相机 APP(如手动相机) | Camera2 | 全参数控制 + 高级功能支持 |
| 新应用快速开发(如扫码 / 拍照) | CameraX | 开发效率高 + 自动适配 |
| 高通平台定制化开发(如固件) | 高通 CamX + Camera2 | 硬件深度优化 + 应用层灵活调用 |
2. 常见问题解析
(1)Camera2 拍照延迟高?
-
原因:未启用零快门延迟(ZSL),需手动配置
CaptureRequest.CONTROL_ENABLE_ZSL为true; -
前提:设备需支持
FULL硬件级别(可通过CameraCharacteristics查询)。
(2)CameraX 如何实现 RAW 拍摄?
通过Camera2Interop扩展 Camera2 能力:
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE\_MODE\_MAXIMIZE\_QUALITY)
.apply {
Camera2Interop.Extender(this).apply {
setCaptureRequestOption(CaptureRequest.STATISTICS\_LENS\_SHADING\_CORRECTION, true)
setCaptureRequestOption(CaptureRequest.JPEG\_ORIENTATION, 90)
// 配置RAW输出
setOutputFormat(ImageFormat.RAW\_SENSOR)
}
}.build()
(3)如何判断设备是否支持 Camera2 高级功能?
通过CameraCharacteristics查询硬件级别:
java
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA\_SERVICE);
String cameraId = manager.getCameraIdList()\[0];
CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
Integer level = chars.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
if (level >= CameraCharacteristics.INFO\_SUPPORTED\_HARDWARE\_LEVEL\_FULL) {
// 支持全量高级功能
}
总结
Android 相机技术的演进本质是 "从功能实现到体验优化" 的迭代:
- Camera1 解决了 "有无" 问题,但其同步架构已无法满足现代相机需求;
- Camera2 释放了硬件潜力,成为专业开发的基石,但复杂度过高;
- 被误称为 "Camera3" 的 CameraX 与高通 CamX,分别从应用层和 HAL 层填补了空白 ------CameraX 以 "简化" 为核心,高通 CamX 以 "硬件优化" 为核心。
对于开发者而言,新应用应优先选择 CameraX ,需高级功能时通过Camera2Interop扩展;维护旧应用可保留 Camera1,但建议逐步迁移至 CameraX;厂商级开发则需结合高通 CamX 等底层框架。
未来,随着 Google 对计算摄影的深化,CameraX 可能会正式接过 "Camera3" 的大旗,成为 Android 相机开发的终极方案。
