是否可以将预览、图像分析和视频捕获与 CameraX 结合起来?

Gio*_*gos 10 android android-camera2 android-camerax

可以同时绑定PreviewImageAnalysis、吗?VideoCapture成对组合时,所有可能的组合(即Preview+ ImageAnalysisPreview+VideoCaptureImageAnalysis+ VideoCapture)都工作得很好,但将所有三个组合在一起会引发以下异常。

java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 1.  May be attempting to bind too many use cases.
    at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:193)
    at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:943)
    at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:293)
    at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:229)
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方法可以让我使用ImageAnalysis并同时录制视频?

Edd*_*ala 2

由于相机硬件管道的缩放器单元限制,同时输出的数量受到限制。

一般来说,高端设备之外不支持 3 个并行 YUV 输出。

您可以在此处查看许多表格: https://developer.android.com/reference/android/hardware/camera2/CameraDevice#createCaptureSession(android.hardware.camera2.params.SessionConfiguration)

并查看在各种硬件级别上可以设置哪些类型的并行输出(这些用例运行的是 PRIV 和 YUV)。

只要分析以 640x480 或更低的分辨率运行,完整的设备就可以做到这一点。但 LEGACY 和 LIMITED 不能。

也就是说,您可以使用 ImageAnalysis 帧来驱动预览,但它肯定不太方便 - 可能需要使用 NDK 或其他麻烦。

  • 在某些情况下,无法使用“ImageAnalysis”进行预览。例如,在进行图像识别时,您需要非常小的帧以最大程度地减少延迟。我最终使用了“Camera2”并将 3 个表面传递给“CameraDevice.createCaptureSession()”,分别用于预览、图像分析和视频捕获。一切进展顺利,现在最重要的问题是:如果我可以用“Camera2”做到这一点,为什么我不能用“CameraX”做到这一点? (3认同)