Android 弃用UVC,采用原生自带Api同时打开双路USB Camera

最终实现的效果如下:

开发板:RK3566

系统:Android11

需求:同时打开两个外接USB相机,屏幕上左右画面要和仪器上左右相机对应 

背景:在项目初期用了UVCCamera的库打开了两个摄像头,对so包也做了一点更改,因为不懂C,尝试改了一点(UVCPreview.cpp里stopPreview方法中加了判断,防止插拔闪退),在RK3566上运行正常且可以热插拔,RK3568上运行正常,插拔闪退。因为我们是用3566,所以就没在3568上研究。后来生产的时候,厂家给的安卓板子有问题,USB信号老是会中断,导致摄像头黑屏,然后闪退,板子厂商后来给换了hub芯片,测了几台,目前正常。担心UVC的库不稳定,且CPU占有率很高(4核占了300%的cpu,应该是软解码导致),所以想用原生的Camera1来打开USB相机,于是,就有了以下方案的尝试。在文章末尾会给两种方式的资源包,仅供参考

1. 实现同时打开两个USB相机

首先获取了摄像头的个数

Camera.getNumberOfCameras()

 发现获取到的数量是0,然后拿了别的USB摄像头是可以的,跟厂商反馈,给了好几版固件试了,终于能获取到数量了,满怀信心的打开,发现只能同时打开一个,想打开另外一个,就得把另一个关掉。怀疑是带宽的问题,电子和其他同事都觉得不应该,只是两个相机不会占用太多带宽。

继续和摄像头厂商反馈,他让我确定我调用的是图像什么格式的,debug获取预览格式是NV21

camera.getParameters().getPreviewFormat()

 关于NV21图像格式属于YUV颜色空间中的YUV420SP格式,简言之就是YUV的一种格式,默认作为Android系统摄像头输出图像格式。

跟厂商反馈后,他们表示要降低30帧可以实现,目前我们对于帧率暂时没太多要求,可以接受。最后固件里给了,1280x720,640x480,640x400的三种分辨率。三种分辨率都可以同时打开两个摄像头,第一步需求完成。

2.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值