使用 Camera 2 捕获图像而不使预览不连贯 API

Capturing image without making preview choppy using Camera 2 API

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

有没有办法直接进入预览界面读取图像字节?我不在乎画质,流畅的用户体验才是最重要的。

如果相机设备是LEGACY级别的设备,很遗憾,这是意料之中的。

即使是 LIMITED 设备,相机也必须支持 BURST_CAPTURE 功能,以保证以较快的速度进行全分辨率拍摄。所有 FULL 级别或更好的设备都支持 BURST_CAPTURE.

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

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