CameraX ProcessCameraProvider vs CameraController - 什么时候使用哪一个?

CameraX ProcessCameraProvider vs CameraController - which one to use when?

有人可以澄清一下,什么时候应该使用 androidx.camera.view.CameraController 什么时候应该使用 androidx.camera.lifecycle.ProcessCameraProvider? 两者似乎都能够 start/stop 相机使用生命周期事件,处理不同的用例(预览、拍照、图像分析)。两者也适用于 androidx.camera.lifecycle.PreviewView.

ProcessCameraProvider 是 CameraX 生命周期工件的一部分。它提供对 some/all 设备摄像头的访问,允许将摄像头的生命周期(当它 opens/closes 时)附加到 lifecycleOwner,并具有应用程序进程的范围(它是单例) . 就其使用方式而言,它是 CameraX 中的低级 API,在某种意义上,当您使用它时,您需要初始化它、创建和配置您的用例(即 PreviewImageAnalysisImageCapture),将它们绑定到 LifecycleOwner,然后如果您愿意,可以通过访问绑定相机的 CameraInfo 与相机进行交互和 CameraControl 个实例。 是的,您可以在这种情况下使用 PreviewView,但您必须手动将其附加到 Preview 用例。

CameraController 是 CameraX 视图工件的一部分,它建立在核心 APIs CameraX 提供的基础上,提供一个简单的 API,可以轻松插入应用程序并准备好使用。 CameraX 的视图工件主要提供 PreviewViewCameraController,后者处理所有相机设置,否则如果您使用 API 之类的 ProcessCameraProvider,则需要手动进行。此外,CameraController 处理设备旋转(以确保其用例以正确的方向从相机接收帧),并提供所见即所得的体验,确保其用例的输出与 PreviewView 显示的相匹配,并在其附加的 PreviewView 上处理触摸事件(点击对焦、捏合缩放)。您可以查看 this article 以了解它开箱即用的功能。

您选择使用哪个API取决于您的使用需求,CameraControllerprovides/handlesCameraX的许多核心功能都适合您,但在用例配置方面不太灵活。因此,如果您需要对用例进行更高级的控制(例如设置它们的分辨率),您可能必须使用 ProcessCameraProvider.

手动设置