【发布时间】:2022-03-31 15:52:04
【问题描述】:
我正在关注这个codelab 来创建一个cameraX 应用程序。
它在我的手机上运行良好。 但我正在开发的应用程序是用于安卓媒体播放器的。它没有任何内置摄像头,只连接了一个外部 USB 摄像头。
这是我启动相机的代码。
private void startCamera() {
ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(viewFinder.getSurfaceProvider());
imageCapture = new ImageCapture.Builder().build();
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
cameraProvider.unbindAll();
cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA,preview,imageCapture);
} catch (ExecutionException e) {
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
} catch (InterruptedException e) {
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
catch (IllegalArgumentException e){
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}, ContextCompat.getMainExecutor(this)
);
}
它抛出 IllegalArgumentException 说没有连接相机。
在cameraProvider.bindToLifecycle(this, CameraSelector.DEFAULT_BACK_CAMERA,preview,imageCapture);
仅限 CameraSelector.DEFAULT_FRONT_CAMERA 和 CameraSelector.DEFAULT_BACK_CAMERA
可用。
如何访问外接摄像头?
Open Camera 来自 Play 商店的应用运行良好。
【问题讨论】:
-
OpenCamera 是开源的。你为什么不自己检查应用程序的源代码他们如何访问相机?
-
AFAIK,CameraX 目前不支持外接摄像头(USB 或其他)。
-
sourceforge.net/p/opencamera/code/ci/master/tree/app/src/main/… 他们正在使用 Camera2 APIs 。我正在寻找 cameraX 解决方案。
-
@CommonsWare 好的。
-
我想知道您是否可以通过使用
CameraSelector.Builder().addCameraFilter()构建自定义CameraSelector来做到这一点,其中CameraFilter选择外部摄像头的摄像头ID。您可以使用 Camera2 互操作获取相机 ID:Camera2CameraInfo.from(cameraInfo).getCameraId()。
标签: android android-camera android-camerax