dem*_*pap 15 linux drivers v4l camera
据我所知,设备驱动程序是软件的一部分,它能够与连接到计算机的特定类型的设备进行通信。
对于 USB 网络摄像头,负责的驱动程序是支持任何 UVC 兼容设备的 UVC。这意味着使操作系统或其他计算机程序能够访问硬件功能,而无需知道所使用硬件的精确细节。
出于这个原因,我通过运行安装了 UVC Linux 设备驱动程序:
opkg install kernel-module-uvcvideo
Run Code Online (Sandbox Code Playgroud)
网络摄像头已被 Linux 内核识别:dev/video0
. 但是,我仍然无法使用 FFmpeg 执行视频流,因为我缺少 V4L2 API。我通过配置内核安装了 V4L2。
我的查询是:
LinuxTV 指:uvcvideo 驱动程序实现仅遵循 V4L2 API。这意味着 UVC 是 V4L2 API 的一部分吗?
Jon*_*ham 18
令人惊讶的是,您可以找到关于 Video4Linux2 的文档之多——但实际上没有任何文档解释Video4Linux是什么。
首先,Video4Linux2是一个Linux驱动框架。框架驱动程序实际上并不直接控制设备。相反,它们提供了某种设备类别的抽象模型,在本例中为供应用程序使用的视频设备。驱动程序框架提供三个主要好处:
因此,V4L2 驱动程序是驱动 UVC 驱动程序的高级驱动程序,它驱动 USB 驱动程序,而 USB 驱动程序可能正在驱动更低级别的硬件驱动程序。
这种 Matryoshka 模型在 Linux 内核驱动程序树中非常常见。V4L2 是更复杂的示例之一,因为某些相机设备需要访问多个层中的大量子设备,这些子设备控制相机并在各种组件(如图像处理器)之间路由相机的输出。
您仍然可以使用设备文件和“ioctl”系统调用直接从用户空间访问 UVC 驱动程序,而无需通过 V4L2 驱动程序,您仍然可以使用它的设备文件和“ioctl”直接从用户空间访问底层 USB 驱动程序。
作为提供广泛设备通用功能的通用框架,V4L2 没有为您提供UVC 驱动程序可以提供的所有功能(假设您的设备实际上提供了比支持 V4L2 所需的更多的 UVC 功能) .
因此,如果您有一个确实提供 UVC 规范中指定的所有功能的 UVC 设备,那么为了实际使用其中一些功能,您需要通过设备文件和“ioctl”系统直接访问 UVC 驱动程序调用,假设 Linux 内核 UVC 驱动程序实际上支持所有 UVC 规范。
然而,的意义
uvcvideo 驱动程序实现仅遵循 V4L2 API
是在当前的 Linux 内核中 UVC 驱动程序实际上并没有提供比 V4L2 所需的更多的 UVC 功能支持。
内核中的 V4L2 支持本身不提供 UVC 或 USB 支持或较低级别的 USB 硬件支持。
USB 视频类 (UVC) 是USB 网络摄像头等应符合的规范。这样,它们可以用于任何支持 UVC 兼容设备的系统。
V4L2 是 linux 内核视频子系统,linux UVC 实现依赖于该子系统。换句话说,在内核中UVC 支持需要 V4L2,但反之则不然。