首页 > 解决方案 > 使用 Camera 2 API 捕获图像而不使预览不连贯

问题描述

我正在尝试修改基本的 Camera2 API 示例(https://github.com/googlesamples/android-Camera2Basic),以便它每 x 秒拍一张照片(然后在后台线程上处理它;我什至没有需要将图像保存到磁盘),同时显示流畅的预览。不幸capture()的是,调用捕获会话会冻结预览一两秒,导致用户体验不佳。

有没有办法直接进入预览表面并读取图像字节?我不在乎图像质量,流畅的用户体验是首要任务。

标签: androidandroid-cameraandroid-camera2

解决方案


如果相机设备是LEGACY级别的设备,不幸的是,这是意料之中的。

即使对于 LIMITED 设备,相机也必须支持BURST_CAPTURE功能,以保证以快速的速度进行全分辨率捕获。所有 FULL 级或更好的设备都支持 BURST_CAPTURE。

但是,即使在功能较低的设备上,您通常也可以流畅地以视频录制分辨率捕获未压缩的 YUV 帧。这意味着将具有 YUV_420_888 格式的ImageReader添加到您的会话配置中,然后处理由此产生的图像。不幸的是,LEGACY 设备上的 JPEG 总是很慢,并且一些 LEGACY 设备也没有足够的 CPU 能力来顺利生成 YUV 数据(因为必须在后台进行一些转换)。

有关更多详细信息,您可以检查StreamConfigurationMap的输出,并查看以 1/30 秒的最小帧持续时间运行的输出 YUV 分辨率;这些应该保证有限或更好的设备的平稳运行。


推荐阅读