摄像头读取出现VIDIOC_STREAMON: No space left on device 错误

本文介绍了解决Linux系统中双USB摄像头因带宽限制导致的No space left on device错误的方法,包括调整USB总线、降低分辨率、修改驱动及改变数据采集方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下原因,linux中为usb camera提供了一个标准的V4L2的驱动以方便使用,只要符合驱动规范就可以实现即插即用usb camera设备,即免驱动安装。 但市面上的USB 摄像头都是2.0的。usb bus的 bandwidth是有限的,而V4L2驱动采用的是贪心原则,即camera会要求获取最大带宽;因此将两个camera接入一路usb bus,打开第二个camera(尤其是采用YUV格式打开)就会出现”No space left on device”的错误。

如果是QT读取USB摄像头出现如下错误,请先看解决方法四。

解决方法一:

接在不同的usb bus上,使用lsusb 命令查看bus信息, 类似“Linux Foundation 2.0 root hub”表示该总线为usb 2.0;

解决方法二:

降低打开视频流的分辨率,改为320x240;并对uvcvideo驱动设置参数,强制为camera分配带宽时计算所需带宽而非申请全部带宽;(只对YUYV格式有效,对有些camera此方法可以支持640x480分辨率)

sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128

或者添加 etc/modprobe.d/uvccamera0508.conf 文件,内容如下:

options uvcvideo quirks=128

重启设备,设置低分辨率访问即可。

解决方法三:

修改驱动,重新编译源码,但这种工作费时费力。所有最终并没有这么搞,但我还是从其它博客中拷贝了一给解决办法已供参考:

 

下载kernel源码
这个可能会很慢,我实在官网下载的,为此还给git配置了代理=-=
看造化了,不过好像去github上下载会好很多。。。

切换版本


#查看现在运行系统内核版本

uname

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值