Android TV运行Camera2Basic遇CameraAccessException(CAMERA_ERROR3)报错求助
针对Android TV USB摄像头Camera2配置错误的解决方案
1. 检查USB摄像头的Camera2硬件支持等级
- 多数USB摄像头仅支持LEGACY级别的Camera2兼容模式(对应旧Camera API的适配层),而Camera2Basic示例默认依赖更高等级的特性,这是流配置失败的常见原因。
- 通过以下代码获取当前摄像头的支持等级:
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId); Integer hardwareLevel = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); Log.d("CameraDebug", "Hardware Level: " + hardwareLevel); - 如果返回值为
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,需修改代码禁用FULL/LIMITED等级专属特性,比如动态帧率调整、多流并发等。
2. 调整预览流的格式与分辨率
- 流配置失败往往是因为示例设置的格式或分辨率不被USB摄像头支持:
- 通过
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP获取摄像头支持的输出格式和分辨率列表,优先选择ImageFormat.YUV_420_888或PixelFormat.RGBA_8888下的低分辨率选项(如720p)。 - 替换示例中硬编码的分辨率值,改为从支持列表中筛选最优匹配项。
- 通过
3. 简化流配置逻辑
- Camera2Basic示例默认同时配置预览流和拍照流,部分USB摄像头在LEGACY模式下不支持多流并发:
- 先注释掉拍照流的配置代码,仅保留预览流,测试是否能正常启动摄像头。
- 若预览正常,再尝试添加拍照流,且确保两者的格式、分辨率都在摄像头支持范围内。
4. 完善权限与USB主机配置
- 确保应用已获取
CAMERA权限,Android TV的权限授予需在系统设置中手动确认(部分设备不会弹出权限弹窗)。 - 在
AndroidManifest.xml中添加USB主机权限,保证系统能识别USB摄像头:<uses-feature android:name="android.hardware.usb.host" />
5. 降级到Camera1 API兼容实现
- 若Camera2适配始终失败,可针对LEGACY等级的摄像头切换到Camera1 API实现:
- 保留Camera2的设备枚举逻辑,当检测到LEGACY等级时,使用Camera1的
Camera类实现预览和拍照功能,兼容性更稳定。
- 保留Camera2的设备枚举逻辑,当检测到LEGACY等级时,使用Camera1的
6. 排查设备端兼容性问题
- 将USB摄像头连接到普通Android手机测试,排除摄像头本身的故障。
- 检查Android TV系统更新,部分旧版本系统存在USB摄像头适配bug,更新系统可能解决问题。
内容的提问来源于stack exchange,提问作者Sebastian Corradi
相关产品推荐
相关产品推荐

