linux 远程挂载摄像头_linux实现HUB分接两个摄像头读取视频

当进行多个USB视频捕捉时,不是每个USB插口都能插上一个USB摄像头。如果这样做的话,结果可能是屏幕一片空白,什么都没有,因为摄像头初始化会出错,导致程序不可正常运行。

这里首先涉及到USB的传输速度的问题。一个USB2.0的理论传输速度为480Mbps,也就是60MBps。当然,实际上不可能达到这个理论的最大值。一般只能达到这个值的70%左右,读入速度为30-42MBps,写入速度为25-30MBps。当我们用一个摄像头采集时,假设采集一帧的分辨率为 640*480(这个分辨率是大多数摄像头都支持的分辨率),图像是24位(3个字节表示一个像素点)的位图,采集帧率为30Fps,那么所需的带宽为 640*480*24*30bps,即640*480*24*30/8/1024/1024=26.37MBps。可见,当插上一个USB摄像头的时候,按照这种方式进行采集时,就已经占了读入的大半带宽,当插上两时,结果可想而知,要么很卡,要么程序就无法运行。

那这样的话,岂不是不能进行多个摄像头的同时采集?实际上,刚才说的传输速度,是针对一个USB Controller而言。在PC机上一般不可能只有一个USB Controller。所以,当多个摄像头插在不同的USB Controller上面时,就能进行流畅的视频采集了。在这里还有必要说下USB Controller的问题。一台电脑上面可能有多个USB插口,但是并不等同与有相同数目的USB Controller。以我的笔记本为例,上面有4个USB插口,而只有两个USB Controller。稍微查一下就能得知,一个USB Controller上面连了一个USB插口,另外一个USB Controller上面连了3个USB插口。为什么会这样呢,详细讲解下USB的结构。

我们知道,主板上的南桥是连接外设和北桥的。USB Controller就是接在了南桥上面。根据我的理解,一般是OHCI(OpenHost Controller Interface)或者UHCI(Universal HostController Interface)加上EHCI(Enhanced Host ControllerInterface)来作为一个USB Controller。OHCI或UHCI提供全速和低速的USB传输,而EHCI提供高速的USB传输。USB Controller会根据连接的设备来自动选取是OHCI(或UHCI)还是EHCI。然后一个USB Controller上面接Hub,Hub上面连了多个USB插口。我们电脑上面的USB插口就是Hub上面分出来的。

因此,不管有多少个USB插口在电脑上,只有连在了不同的USB Controller上面,才能保证视频的流畅性。这点可以借助驱动精灵来查看是否不同的摄像头接在了不同的USB Controller上面。驱动精灵的硬件检测选项单里面,点击详细信息,然后端口->USB,里面就有各种详细的连接情况。一般一个摄像头,名称为Composite Device,可是查看一个USB Controller上面是不是连接了多个Composite Device,以确保一对一的连接。这样才能保证连接端口没有出现问题。

回到zedboard,它只提供了一个USB Controller,因此使用两个摄像头时必须HUB分接。前面已经讲到一个USB摄像头如果采集的视频帧大小640*480,那么一个摄像头已经占据了USB Controller接口的大部分传输带宽,如果再开启一个摄像头,另一个摄像头肯定就不能正常打开了,程序当然就不能正常运行了。

要实现HUB分接两个摄像头,首先要解决的就是带宽不够的问题。解决的办法就是将两个摄像头采集的视频帧大小设置为320*240,这样带宽的问题就解决了。除了设置视频帧的采样大小,更重要的还是设置视频驱动的工作模式。由于项目中摄像头的驱动为UVC驱动的,因此,以UVC的驱动加载为例。

在内核编译过程中,如果将UVC驱动编译进入内核,摄像头采集视频时会默认申请USB接口的全部带宽。所以要将UVC驱动编译为模块,手动设置驱动的工作模式。关于内核的配置编译,参考上一篇参赛手记,这里不再详述。

将UVC驱动编译为模块后,生成uvcvideo.ko和videobuf2-vmalloc.ko,然后在zedboard控制台中输入

insmod videobuf2-vmalloc.ko

insmod uvcvideo.ko quirks=128

其中insmod uvcvideo.ko quirks=128将uvc视频驱动加载到内核中,并强制要求摄像头计算所需带宽,而不是申请USB接口的全部带宽。

通过以上限制,就解决zedboard的HUB分接两个摄像头的带宽矛盾。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 单片机控制有载调压分接开关的原理如下: 有载调压分接开关是一种能够在负载工作状态下进行电压分接的设备。其原理是通过改变输出电压的分接点,从而改变负载工作所需的电压大小。 单片机控制有载调压分接开关的过程如下: 1. 单片机通过输入模块接收输入信号,判断需要调节的电压大小。 2. 单片机根据输入信号,通过输出模块控制有载调压分接开关的分接点。 3. 有载调压分接开关根据单片机的控制,改变输出电压的分接点,从而实现对负载电压的调节。 需要注意的是,在有载状态下进行电压分接会产生电流急剧变化的情况,需要进行保护措施,避免对负载产生损害。 ### 回答2: 单片机控制有载调压分接开关是一种利用单片机进行电压调节和分接操作的控制方式。单片机作为控制中心,通过与有载调压分接开关相连接,实现对电路中的电压进行调整和分接的功能。 当需要对电路中的电压进行调整,单片机会根据事先设定的电压值,采集电路的实际电压,并与设定值进行比较。然后,单片机根据比较结果,通过控制有载调压分接开关的电路连接方式,调整电路中的电压。通过适地切换开关的接线情况,可以调节电路中的电压到设定值。 另外,在一些需要切换电路中不同的分接,单片机控制的有载调压分接开关也能胜任。单片机会根据特定的条件,通过控制开关的动作,切换电路中的不同分接点。通过这种方式,可以根据不同的需求,灵活选择电路中的分接点,实现对电路性能的优化。 总体来说,单片机控制有载调压分接开关具有灵活性高、精度高、响应速度快等特点。它可以广泛应用于各种需要对电路进行电压调整和分接操作的场合,例如工业自动化、电力系统、智能家居等领域。同,随着单片机技术的不断发展,它的控制功能和性能将会得到进一步的提升,为电路控制提供更加高效和便捷的解决方案。 ### 回答3: 单片机通过控制有载调压分接开关,可以实现对电路中的电压进行调节和切换。 有载调压分接开关是一种电子开关装置,可以通过调节分接点的位置改变电路中的电压。单片机可以通过控制开关的动作,实现电压的调节和切换。 在调节电压方面,单片机可以监测电路中的电压值,并根据要求通过控制开关的状态,调节分接点的位置,从而改变电路中的电压。单片机可以根据需要动态调节电压值,实现对电路的精确控制。 在切换电压方面,单片机可以根据不同的条件和需求,控制开关的操作,实现电路中不同电压值之间的切换。通过单片机的编程控制,可以自动切换电路中的电压,实现自动化电路控制的功能。 单片机控制有载调压分接开关的好处是可以实现电路的精确控制和自动化切换,提高电路的稳定性和可靠性。同,由于单片机具有高度集成和可编程的特点,可以实现多种控制算法和功能。这样,可以满足不同场景和需求下的电路控制要求。 总之,单片机控制有载调压分接开关是一种灵活、高效的电路控制方式,可以满足电路调节和切换的需要,提高电路控制的精确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值