java.lang.IllegalArgumentException:找不到相机设备支持的表面组合 - Id:0。可能试图绑定太多用例。
为什么bindToLifecycle()
只能选择 imageCapture
or videoCapture
?
CameraX.bindToLifecycle(lifecycleOwner, mPreview, imageCapture,videoCapture)
java.lang.IllegalArgumentException:找不到相机设备支持的表面组合 - Id:0。可能试图绑定太多用例。
为什么bindToLifecycle()
只能选择 imageCapture
or videoCapture
?
CameraX.bindToLifecycle(lifecycleOwner, mPreview, imageCapture,videoCapture)
您绑定的用例比您设备的相机支持的多。并非所有设备都可以支持两个 ImageAnalyzer。
尝试减少您的分析仪,
CameraX.bindToLifecycle(lifecycleOwner, mPreview, imageCapture or videoCapture)
我已经用很多设备进行了测试,到目前为止,在我测试的设备中,只有 Google Pixel 1 可以与三个分析仪一起使用。
要建议 hack,请删除 imageCapture 分析器,尝试从 imageCapture 的预览中获取图像并使用 videoCapture。
希望能帮助到你。
现在没有videoCapture
用例。
如官方文档中所述,可用的用例是预览、分析和图像捕获(及其组合)。
当我尝试使用不同的设置创建 imageCapture、videoCapture、mPreview 或分析器时,我遇到了同样的错误。
尝试在构建器中设置相同的参数,例如,如果您愿意:
setLensFacing(CameraX.LensFacing.BACK)
在所有设置生成器中设置相同。这可以解决您的错误,但我仍然不知道该库是否支持此功能 jet。
一种解决方法是将Preview与VideoCapture绑定,并将Preview与ImageCapture分别绑定。绑定Preview、ImageCapture和VideoCapture目前在一些设备上似乎是一个问题。在两者之间切换时要小心先unbindAll。
这可能是因为在1.0.0-Beta10 中还没有正式支持VideoCapture UseCase。
fun startVideoCapture() {
...
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelected,
previewUseCase,
videoCaptureUseCase
)
}
fun startImageCapture() {
...
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelected,
previewUseCase,
imageCaptureUseCase
)
}
正如 Ye Min Htut 指出的那样,考虑更少的用例。对我来说,这就足够了:
CameraX.bindToLifecycle(viewLifecycleOwner, cameraSelector)
我希望它可以帮助那里的人=)