解决UVCamera stopPreview阻塞崩溃以及无法识别摄像头等bug

UVCCamera是基于安卓的一个USB外接摄像头调用项目,该项目允许安卓设备在不需要root的情况下打开外接USB摄像头进行预览,获取视频帧.

最近在基于UVCCamera适配一款设备的时候出现了问题:该设备始终无法打开一款摄像头(项目必须要适配这款摄像头),作为对比,我的安卓手机就没有任何问题.作为一个负责任的开发人员,我只好硬着头皮肝下去.并最终解决了这个问题.

经过研究,发现UVCCamera项目确实有这些缺点:

  • 兼容性不是太好,经常出现不同的手机,或者不同摄像头上面表现不一致的问题;
  • 停止预览(stopPreview)时,偶尔会阻死,接口无法返回;
  • native层线程较多,比较杂乱.感觉并不需要这么多线程呀,这也是上一条阻死的原因;
  • 视频采集和显示具有强耦合,发现如果不设置surface,则不会启动预览线程,从而无法采集;
  • 视频格式转换时效率较低;

我在UVCCamera基础上,修改了上面的问题.修改方法如下:

  • 优化了libusb调用方法,提高了兼容性,在那个原先有故障的设备上测试通过,故障排除;
  • 解决了stopPreview阻死的问题;
  • native层使用轮询模式(之前是回调模式),一方面减少了线程数,一方面可以根据业务逻辑动态调节帧率;
  • 去掉采集对surface的依赖;
  • 使用libyuv进行格式转换,提高了效率.

目前项目处于内测阶段,先把apk附上.如果你也遇到usb摄像头无法正常工作,可以先装一下apk进行测试.apk可从github上下载最新的release版,下载地址:
https://github.com/tsinglink/uvccamera/releases

在这里插入图片描述

2022年1月10号更新
项目已经开源,地址:
https://github.com/tsinglink/uvccamera

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值