对UVCCamera的改进----解决某些设备无法识别摄像头等bug

Posted John0551

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对UVCCamera的改进----解决某些设备无法识别摄像头等bug相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

目前项目处于内测阶段,先把apk附上.如果你也遇到usb摄像头无法正常工作,可以先装一下apk进行测试.
下载地址:
链接: https://pan.baidu.com/s/1sNl_3ywb11-J5lW6T9DcKQ 提取码: henn

以上是关于对UVCCamera的改进----解决某些设备无法识别摄像头等bug的主要内容,如果未能解决你的问题,请参考以下文章

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

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

UVCCamera && AndroidUSBCamera示例运行错误的解决办法

UVCCamera && AndroidUSBCamera示例运行错误的解决办法

UVCCamera && AndroidUSBCamera示例运行错误的解决办法

UVCCamera向USB设备发送命令