使用Android Studio开发应用时能否禁用安卓默认前后置摄像头以使用USB摄像头
安卓端Agora接入外接UVC摄像头方案说明
一、Agora无法选择USB摄像头的解决方法
Agora SDK本身支持外部自定义视频源输入,无需修改SDK内部代码即可实现UVC摄像头数据推流,可选两种方案:
方案1:调用原生自定义采集接口
- 适用场景:你可以直接调用Agora原生RtcEngine底层接口
- 实现逻辑:
- 初始化
RtcEngine时,调用setVideoSource(true)开启外部视频源模式,关闭SDK内置的摄像头采集逻辑 - 用你已接入的UVC摄像头库,持续获取USB摄像头输出的YUV/RGB格式帧数据
- 将帧数据按照Agora
ExternalVideoFrame结构体要求封装参数,调用pushExternalVideoFrame()方法将帧数据投喂给SDK即可完成推流
- 初始化
- 注意:需保证UVC采集的分辨率、帧率和你给Agora设置的视频编码参数匹配,避免花屏、卡顿问题
方案2:虚拟摄像头路由劫持
- 适用场景:你使用的是封装好的Agora二次库,无法调用底层自定义采集接口
- 实现逻辑:
- 开发安卓虚拟摄像头服务,将UVC库采集到的USB摄像头数据实时写入虚拟摄像头的输入缓冲区
- 将该虚拟摄像头注册为系统默认的前置/后置摄像头,Agora SDK调用系统摄像头接口取流时,实际获取到的就是USB摄像头的画面
- 注意:Android 10及以上系统需要用户手动授予虚拟摄像头专用权限才能正常使用
二、禁用安卓默认前后置摄像头的可行方法
分两种实现场景:
仅应用内屏蔽内置摄像头
不需要修改系统配置,直接在应用逻辑层处理即可:
- 调用系统
CameraManager的getCameraIdList()接口获取所有已注册的摄像头ID - 过滤掉
LENS_FACING_FRONT(前置)、LENS_FACING_BACK(后置)类型的摄像头ID,仅保留UVC外接摄像头的ID供采集逻辑调用即可
系统全局禁用内置摄像头
该场景需要特殊权限,仅适合定制化设备开发:
- 如果你开发的是定制行业终端,可以直接修改安卓系统源码
CameraService模块逻辑,屏蔽内置前后置摄像头的ID注册,所有上层应用都无法枚举到这两个设备 - 普通消费级设备可通过
DevicePolicyManager的setCameraDisabled()方法全局禁用摄像头,该功能需要应用被设置为设备管理员才能调用,普通第三方应用无法获取对应权限
内容的提问来源于stack exchange,提问作者chanaka_ayesh
相关产品推荐
相关产品推荐

