我正在寻找一种使用视频文件并对其进行流式传输的方法,使其看起来像真正的 UVC 设备。
我做了一些研究,发现UVC 小工具但我无法确定这是否符合我的要求。我必须使用 UVC,因为最终我希望能够通过 USB 从另一台设备传输视频,而无需在接收器上安装任何额外的软件。但目前只有一个可以在同一设备上运行并模拟 UVC 设备的工具就可以工作。
有没有可用的工具可以做到这一点?
答案1
USB 是不对称的:有 USB 主设备(您的 PC)和 USB 从设备(设备)。这就是为什么有两种不同类型的 USB 连接器,A 型用于主设备,B 型用于从设备,尽管硬件设计人员在各处使用 A 型连接器,这种区别变得越来越模糊,而 USB OTG 可以同时满足这两种需求。
Linux USB 小工具设备是代表 USB 从属控制器上的 USB 设备的内核模块。他们需要一个(从)主机控制器(HC)来连接;在代表设备的嵌入式 Linux 系统上,这将是 USB 控制器的驱动程序。在 PC 上没有硬件。
但是还有另一个内核模块可以模拟USB 从属控制器:dummy_hcd
.该模块将为要连接的小工具提供一个虚拟(从)主机控制器,以及一个虚拟(主)主机控制器,该控制器为您提供额外的 USB 总线,其中这些设备将在其中显示。
例子:
# modprobe dummy_hcd
# lsusb
...
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# modprobe g_serial
# lsusb
...
Bus 005 Device 002: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode)
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
您将获得两个新的设备节点,/dev/ttyGS0
分别来自g_serial
小工具和代表设备的/dev/ttyACM0
自动加载模块。cdc_serial
您可以通过向其中一个写入并从另一个读取来测试它们是否进行通信。
还有g_webcam
一个小工具 UVC 驱动程序。它创建了一个新/dev/video*
设备,就像/dev/ttyGS0
上面一样,您可以流式传输视频进入此设备使用该小工具。这就是您的uvc-gadget
用户空间程序所做的:它要么获取静态图像,要么输入另一个现有的“真实”UVC 设备,并将其流式传输到新创建的 中/dev/video*
,以便您可以向 USB 设备提供真实数据并查看它是否输出正确地安装在使用该设备的 USB 主设备上。
然而,它似乎不适用于总线dummy_hcd
(我刚刚尝试过):就像上面一样,第二 /dev/video*
设备应该由主端的 USB 内核模块创建用途网络摄像头。但那不会发生;相反,USB 系统在短时间内变得非常混乱,我无法再使用键盘和鼠标。
因此,要么g_webcam
是有问题,要么是视频子系统尝试创建具有相同标识符的两个设备然后中断,或者可能是其他原因。我不知道。
因此,它可能仅适用于具有真实(从属)主机控制器的真实嵌入式系统。
所以,是的,有一些可用的工具可以做到这一点,但不幸的是,如果您希望模拟设备出现在同一台计算机(普通 PC)上,则模拟是有问题的。它可能仍然可以在嵌入式系统上工作(您没有说明要在何处以及如何使用模拟设备)。