-1

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

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

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

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

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

4

1 回答 1

0

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

于 2021-08-09T07:17:26.487 回答