Linux 作为 USB UVC 设备

Linux as a USB UVC device

要使 Linux 设备 (Raspberry Pi) 在另一台计算机上表现得像 UVC 设备,需要什么?本质上,我想使用 ffmpeg 的输出来表现得像另一台计算机的网络摄像头输入。

你大概需要一个支持 USB OTG 的树莓派,树莓派 3 不具备这个能力。 然后你将需要一个自定义内核驱动程序来模拟真实设备的 UVC 驱动程序,我不知道有任何项目直接这样做。

我能想到的最简单的方法是通过 RTMP 流式传输录制的图像,而不是尝试模拟 UVC,因为这不是一件小事。

What is needed for making a Linux device (Raspberry Pi) behave like a UVC device for another computer?

这实际上可以在没有自定义内核的 Pi Zero 上完成。在 config.txt 中设置 dtoverlay=dwc2 以获得 OTG 支持后,重新启动并 运行:

sudo modprobe g_webcam
./uvc-gadget -d

这些是通过流式传输合成数据使您的 Pi 充当网络摄像头的第一步,您可以在 Skype、FaceTime 或其他网络摄像头查看器中对其进行测试。 Here 是 uvc-gadget 用户空间程序及其常用推荐补丁的来源。

Essentially, I would like to use output from ffmpeg to behave like a webcam input for another computer.

这部分可能涉及更多。现有的 uvc-gadget 程序应该可以播放通过 GStreamer 捕获的网络摄像头记录,更多讨论在 this post 中。对于 FFmpeg 的任意输入,您可能必须将自己的输出插件代码与 uvc-gadget 集成。

如果您使用压缩:注意 FFmpeg 已经可以输出各种容器格式的 mjpeg,但该数据仍必须转换为 UVC 负载 mjpeg 格式。