使用Android L和Camera2 API处理相机预览图像数据

我正在开发一个Android应用程序,它正在处理来自摄像头的输入图像并将其显示给用户.这很简单,我使用setPreviewCallbackWithBuffer在相机对象上注册了一个PreviewCallback.
使用旧的相机API,这很容易并且运行顺畅

public void onPreviewFrame(byte[] data, Camera cam) {
    // custom image data processing
}

我正在尝试移植我的应用程序以利用新的Camera2 API,我不确定我该怎么做.我在L预览示例中使用了Camera2Video,可以录制视频.但是,样本中没有直接的图像数据传输,因此我不明白应该在何处获取图像像素数据以及如何处理它.

有人可以帮我或建议如何在Android L中获得PreviewCallback的功能,或者如何在将其显示到屏幕之前处理相机的预览数据? (相机对象上没有预览回调)

谢谢!

解决方法:

由于Camera2 API与当前的Camera API非常不同,因此阅读文档可能会有所帮助.

一个很好的起点是camera2basic示例.它演示了如何使用Camera2 API并配置ImageReader来获取JPEG图像并注册ImageReader.OnImageAvailableListener以接收这些图像

要接收预览帧,您需要将ImageReader的表面添加到setRepeatingRequest的CaptureRequest.Builder.

此外,您应该将ImageReader的格式设置为YUV_420_888,这将在8MP时为您提供30fps(Nexus 5的文档保证在8MP时为30fps).

上一篇:android – 将预览帧转换为位图


下一篇:Java 13新特性