Android9 UVC摄像头崩溃

文章讲述了作者在排查UVC摄像头初始化失败的问题时,从冲突问题入手,发现log显示可能是寻址问题,后经newbing提示关注配置文件,通过修改配置忽略特定ID的摄像头解决了崩溃。然而,后续仍有偶发崩溃,最终通过将AndroidManifest.xml中的ACCESS_SURFACE_FLINGER权限级别改为normal彻底解决。
摘要由CSDN通过智能技术生成

最近有个问题排查了很久,写个博客特来记录一下,uvc摄像头初始化失败,一开始以为是冲突问题,打了log发现一路跑到startPreview都没问题,然后看log又像是寻址问题,但是看不懂就没搞,最后问了new bing说是有可能配置文件的问题,于是我仔细看了配置文件,改了一下,ignore掉id为0的camera,也就是我在用的RGB摄像头的id,然后就好了,不崩溃了。

2023-5-17更新:

使用上述方法后camera仍然会偶现崩溃,在frameworks/base/core/res AndroidManifest.xml中将android.permission.ACCESS_SURFACE_FLINGER的protectionLevel修改为normal后解决

Android Studio支持UVC(USB Video Class)摄像头UVC是一种通用的USB视频设备驱动程序,它允许USB摄像头在没有特定驱动程序的情况下在各种操作系统上运行。 要在Android Studio中使用UVC摄像头,需要使用AndroidCamera2 API。使用Camera2 API,您可以捕获UVC摄像头的视频流并在Android设备上进行实时预览和处理。 以下是使用UVC摄像头的基本步骤: 1. 检查设备是否支持Camera2 API。您可以使用以下代码行检查: ``` PackageManager pm = getPackageManager(); boolean isCameraSupported = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); ``` 2. 获取CameraManager实例并列出可用的摄像头设备: ``` CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameraIds = cameraManager.getCameraIdList(); ``` 3. 打开UVC摄像头设备并创建CameraCaptureSession和CaptureRequest对象: ``` cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { // Create CameraCaptureSession and CaptureRequest objects } @Override public void onDisconnected(CameraDevice camera) { // Handle camera disconnected } @Override public void onError(CameraDevice camera, int error) { // Handle camera error } }, null); ``` 4. 在CameraCaptureSession中设置Surface,以便在Android设备上预览UVC摄像头的视频流: ``` Surface previewSurface = new Surface(textureView.getSurfaceTexture()); List<Surface> surfaces = Arrays.asList(previewSurface); cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { // Set up CaptureRequest for preview } @Override public void onConfigureFailed(CameraCaptureSession session) { // Handle session configuration failure } }, null); ``` 5. 捕获UVC摄像头的视频流并进行处理: ``` // Set up CaptureRequest for video capture CaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); captureRequestBuilder.addTarget(videoSurface); captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<>(30, 30)); cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null); ``` 这些是使用UVC摄像头的基本步骤。要深入了解如何使用Camera2 API捕获UVC摄像头的视频流,请参阅Android官方文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值