uvc和v4l2简介

uvc和v4l2简介

对这块不是特别理解,看了几篇博客,还是一知半解,先记录下,以后有机会深入后,再来更新;

UVC
UVC全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。
UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分。插入摄像头后就可以工作,而无须编译或安装额外的驱动。
V4L2
简单的讲V4L2就是用来管理UVC设备的并且能够提供视频相关的一些API。那么这些API怎么使用或者能被谁使用呢。在Linux系统上有很多的开源软件能够支持V4L2。常见的又FFmpeg、opencv、Skype、Mplayer等等。

首先介绍两个概念:

UVC:

USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机。

最新的UVC版本为UVC 1.5,由USB-IF(USB Implementers Forum)定义包括基本协议及负载格式 [1] [2].

这是wikipedia的解释。

这个链接是Linux中对UVC支持的相关描述。http://www.ideasonboard.org/uvc/

V4L2:

Video4Linux或V4L是一个视频截取及设备输出API,以及Linux的驱动程序框架,支持很多USB摄像头、电视调谐卡以及其他设备。Video4Linux与Linux内核紧密集成,Video4Linux取名的灵感来自Video for Windows(有时候会缩写为“V4W”),但两者在技术上并没有任何关系[1][2]。

从两个的介绍也能看出来这两者之间的关系。

简单的讲V4L2就是用来管理UVC设备的并且能够提供视频相关的一些API。那么这些API怎么使用或者能被谁使用呢。在Linux系统上有很多的开源软件能够支持V4L2。常见的又FFmpeg、opencv、Skype、Mplayer等等。

这样一个UVC能够进行视频显示的话应该满足三个条件:

1 UVC的camera硬件支持

2 UVC驱动支持,包括USB设备驱动以及v4l2的支持

3 上层的应用程序支持

linux UVC驱动是为了全面的支持UVC设备。它包括V4L2内核驱动程序和用户空间工具补丁。这个视频设备或者USB视频类的USB设备类的定义定义了在USB上的视频流的功能。UVC类型的外设只需要一个通用的驱动支持就能够正常工作,就像USB 大容量存储设备一样。

UVC的linux  kernel驱动程序和支持的硬件设备都在这里有相关的描述:http://www.ideasonboard.org/uvc/。

判断一个摄像头是否属于UVC规范可以使用如下方法:

1 使用lsusb命令或其他硬件信息查看工具,找出摄像头的设备号(Vendor ID)和产品号(Product ID)。

2 查找是否有视频类借口信息

lsusb -d VID:PID -v | grep "14 Video"

如果兼容UVC,则会输出类似信息

bFunctionClass 14 Video

bInterfaceClass 14 Video

bInterfaceClass 14 Video

bInterfaceClass 14 Video

如果没有以上信息,则是non-UVC设备。

 

你可能感兴趣的:(uvc)