定义
libuvc 是一个面向 USB 视频设备的跨平台 C 语言库,建立在 libusb 之上,向应用程序提供对 UVC(USB Video Class,USB 视频类)设备的统一访问接口。它的作用对象是那些遵循标准 UVC 接口的摄像头,即插上电脑后无需厂商专用驱动即可被识别的一类设备[3]。
该库并不提供图形界面或应用程序,只提供编程接口。开发者调用它来完成设备枚举、模式协商、视频流接收和摄像头参数控制等操作,再自行构建上层应用[2]。在常见的软件包体系中,它被拆分为运行库、开发文件与文档三个部分,运行库提供应用程序运行所需的共享对象,开发包提供编译时所需的头文件与链接信息。
原理
libuvc 的底层是 libusb,后者负责在用户空间完成 USB 通信,因此 libuvc 无需内核驱动即可直接与设备交互[2]。UVC 设备通过等时传输(Isochronous Transfer)向主机发送视频数据,等时传输的特点是保证带宽与时序、但不保证重传,适合音视频这类对时延敏感而对丢包容忍的数据流[4]。
视频数据以帧为单位组织,每一帧被切成若干载荷包,每个包带有 12 字节的载荷头,其中包含表示帧起始的标志位、呈现时间戳等字段,接收端据此把包重新拼装成完整帧[5]。帧的格式可以是未压缩的 YUY2 等,也可以是 MJPEG 压缩格式,后者按 JPEG 逐帧压缩,典型压缩比约为 10∶1[4]。
带宽是设计中的关键约束。等时传输需要在开始推流时向总线申请带宽,全速 USB 大约只有 1 MB/s 的等时带宽,高速 USB 则约为 24 MB/s,因此高分辨率未压缩视频在低速总线上难以达到高帧率,MJPEG 压缩才使大尺寸画面具备实用性[6]。按 UVC 规范,所需带宽应从设备的 USB 描述符读取,而描述符中的估计值通常偏保守,这也是常规驱动下同一 USB 总线上很难并行运行多个高分辨率摄像头的原因之一[7]。
发展历程
libuvc 早期版本 0.0.5 已出现在 2014 年前后的机器人操作系统 ROS 软件索引中,当时的代码仓库位于 ktossell 名下,该索引记录其开发状态为不再维护[8]。0.0.6 版本的源码归档时间约为 2017 年,0.0.7 版本的源码归档时间为 2024 年 1 月。
发行版收录情况随版本推进而变化。Ubuntu 在 2020 年的 20.04 LTS 中提供的是 0.0.6-1,到 2024 年的 24.04 LTS 已更新为 0.0.7 系列[9][10]。Fedora 方面,0.0.7 的打包版本从 2024 年 9 月起陆续构建,后续在 Fedora 42 至 Rawhide 等分支中继续维护[11][1]。Debian 的 0.0.7 打包修订版本号在 2025 年至 2026 年间推进到 -4 及 -4+b1。
应用
libuvc 的主要用途是为 UVC 摄像头提供统一的访问层,使应用程序不必针对每个厂商的驱动差异做适配。在上层框架中,它常与 libusb 分层配合:以 Flutter 的 UVC 摄像头插件为例,底层由 Android USB Host API 完成设备发现与权限获取,libusb 接管实际 USB 通信,libuvc 则负责 UVC 协议层面的模式协商、帧流传输与摄像头控制[2]。
在机器视觉与眼动追踪等领域,也有项目基于 libuvc 构建自有采集后端。相关项目记录显示,通过自行估算等时带宽而非直接采用设备描述符中的保守值,可以在一条高速 USB 总线上同时运行多个摄像头,例如同时采集 720p@60fps 与两路 480p@120fps 的画面[7]。
该库同时在桌面与嵌入式环境分发。除 Linux 各大发行版外,macOS 与 Linux 平台可通过 Homebrew 安装,其依赖项为 libusb[3]。构建源码时需要 libusb 与 CMake,并可选开启示例程序与测试程序的编译选项[8]。
局限
libuvc 本身不包含图像编解码能力。获取到的 MJPEG 帧需要上层自行解码,未压缩的 YUY2 等格式也需要上层完成向 RGB 的色彩空间转换,库只负责把帧数据交付给调用者[2]。
等时带宽构成硬性上限。全速 USB 的等时带宽约 1 MB/s,未压缩数据在 320×240 分辨率下仅能达到约 6 fps 量级;若要提高分辨率或帧率,往往只能改用 MJPEG 压缩格式,且实际帧率还受摄像头自身能力、CPU 与内存等系统瓶颈制约[6][4]。
该项目的维护状态并不活跃。ROS 软件索引将对应仓库的开发状态标注为不再维护,上游文档站点也由其自行托管,同步发版节奏受上游进度制约[8]。此外,设备描述符中申报的带宽需求通常偏保守,若严格照此分配,单条总线上可并行运行的高分辨率摄像头数量会受到限制[7]。
参见
参考资料
- libuvc [引用日期2026-10-14]
- flutter_ffi_uvc | Flutter package [引用日期2026-10-14]
- libuvc [引用日期2026-10-14]
- EAN-USB-Video-Class-UVC-Output(PDF) [引用日期2026-10-14]
- xmos.com 上的 PDF 文件 [引用日期2026-10-14]
- VideoCamera [引用日期2026-10-14]
- usb-bandwidth-sync [引用日期2026-10-14]
- libuvc - ROS Repository Overview [引用日期2026-10-14]
- Ubuntu – Package Search Results -- libuvc0 [引用日期2026-10-14]
- Source Package: libuvc (0.0.7-1) [universe] [引用日期2026-10-14]
- libuvc-0.0.7-4.fc41.src.rpm [引用日期2026-10-14]