发送网络摄像头输入以使用录制的剪辑进行缩放

Sending a webcam input to zoom using a recorded clip

我有一个我一直在努力的想法,但在我继续之前我想了解一些技术细节。

据我了解,Linux 通过 /dev/ 与底层硬件通信。我正在弄乱我的视频摄像头输入以进行缩放,我发现有人解释说我需要创建一个虚拟设备并将其安装到另一个名为 v4loop 的程序的输出。 我的问题是

1- Zoom 如何检测可用于输入的网络摄像头。我的 /dev 目录有 2 个名为 video 的“文件”(/dev/video0 和 /dev/video1),但 zoom 仅检测到一个网络摄像头。网络摄像头通信是否通过此视频文件完成?如果是,为什么简单地创建一个不会影响缩放输入选择。如果不是,zoom 如何检测输入并读取网络摄像头源?

2- 我可以创建一个虚拟设备并为其编写一个内核模块以从本地文件提供输入吗?我写过很多内核模块,我知道它们有读、写、释放方法。每当发出来自缩放的读取请求时,我都想解析视频。视频应该如何编码?它是 mp4 格式还是原始格式或其他格式?我应该以多快的速度发送输入(以千字节为单位)。我认为这是我的网络摄像头录制规格的一个功能。如果它是 1920x1080,并且每个像素是 3 个字节 (RGB),并且以 20 fps 的速度记录,我可以简单地计算每秒生成多少字节,但 Zoom 如何期望将输入馈入其中。假设它实时发送 strean,那么它应该每隔几毫秒读取一次输入。我如何获得此类信息?

提前谢谢你。这是一个学习实验,我只是想做一些我有动力去做的有趣的事情,同时学习更多关于Linux-硬件通信的知识。我还是个初学者,所以请放轻松。

显然,有两种类型的 /dev/video* 文件。一个用于元数据,另一个用于来自网络摄像头的实际流。在 /dev 目录中创建与流相同类型的虚拟设备确实导致 Zoom 将其识别为独立的网络摄像头,即使没有创建其元数据文件。我终于实现了我想要的,但我使用了更新 26.0.1 后添加的 OBS Studio 虚拟相机功能,目前它运行完美。