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

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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

以上是关于解决UVCamera stopPreview阻塞崩溃以及无法识别摄像头等bug的主要内容,如果未能解决你的问题,请参考以下文章

尝试在空对象引用上调用虚拟方法“void android.hardware.Camera.stopPreview()”

B站回应崩了

还在用 SimpleDateFormat 做时间格式化?小心项目崩掉!

还在用 SimpleDateFormat 做时间格式化?小心项目崩掉!

模块化车刀柄为什么可以解决车削加工中刀尖崩损导致刀柄损坏等问题

报错来了不要崩!nginx服务启动失败排错分析!