【Android FrameWork】延伸阅读:Camera1、Camera2 与CameraX

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 的飞跃)
  1. 全参数手动控制

    支持调节 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);
  1. 高级拍摄能力

    支持零快门延迟(ZSL)、连拍(burst capture)、RAW 格式捕获、多帧 HDR 合成等,是夜景模式、人像模式等计算摄影功能的基础。

  2. 多流并行处理

    可同时输出预览流、拍照流、视频流,例如预览时同步输出 YUV 数据用于人脸检测,输出 JPEG 用于拍照,且各流参数可独立配置。

  3. 硬件能力分级

    按设备支持程度分为 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 编码。
核心优势
  1. 极致简化开发

    实现预览功能仅需 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))
  1. 设备自动适配

    内置兼容性数据库,自动处理不同机型的硬件差异(如分辨率适配、旋转角度校正),支持 90% 以上的 Android 设备(API 21+)。

  2. 扩展能力丰富

    通过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_ZSLtrue

  • 前提:设备需支持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 相机开发的终极方案。

相关推荐
Digitally12 小时前
如何快速高质量地将安卓手机照片传输到U盘
android·智能手机
一殊酒12 小时前
【前端开发】Uniapp:Android/IOS云打包
android·ios·uni-app
2501_9159184112 小时前
构建可靠的 iOS 日志导出体系,从真机日志到系统行为的多工具协同实践
android·ios·小程序·https·uni-app·iphone·webview
不知名的前端专家13 小时前
uniapp 安卓原生Excel读写插件 支持U盘读写、数据库读写、读写监听进度等功能
android·uni-app·excel
summerkissyou198713 小时前
Audio-音频-播放的方式
android·音视频
2501_9159090613 小时前
没有 Mac 怎么上架 iOS 应用 跨平台团队的可行交付方案分析
android·macos·ios·小程序·uni-app·iphone·webview
代码or搬砖14 小时前
公共字段抽取自动填充
android·java·数据库
_李小白1 天前
【Android FrameWork】第二十四天:Activity生命周期是如何运行的
android
ytttr8731 天前
基于C#的CAN总线数据解析BMS上位机
android·unity·c#