在 Linux 上创建假网络摄像头流

这篇文章是关于在 Linux 上创建假网络摄像头流的——这是一个相当大的话题,不是吗! 现在,您是否曾经参加过会议,并在您宁愿去其他地方时播放视频? 曾经希望循环播放一个可以作为网络摄像头源的视频吗? 让我通过完整的教程来实现您的愿望,教您如何设置并与您的朋友玩一些很酷的恶作剧!

在 Linux 上创建假网络摄像头流的步骤

让我们开始在 Linux 上创建我们的假网络摄像头流的步骤。

1.安装重要的依赖

首先,我们需要安装两个非常重要的依赖项。

第一个是 v4l2环回 这允许我们创建“虚拟视频设备”,我们将需要它来设置我们的假网络摄像头。 要在 Debian/Ubuntu 上安装它,请运行:

$ sudo apt install v4l2loopback-dkms 

接下来,我们需要 ffmpeg 这将使我们能够将我们想要的视频作为可以安装的网络摄像头源进行流式传输:

$ sudo apt install ffmpeg 

有了这个,我们可以进入下一步。

2. 添加内核模块

接下来,我们需要添加 v4l2环回 内核模块来模拟虚拟视频设备。 这可以通过以下方式完成:

$ sudo modprobe v4l2loopback card_label="My Fake Webcam" exclusive_caps=1 

在这里,提到了两个额外的参数:

  • 卡片标签 :每个设备的卡片标签。 在这里,我们将设备名称设置为 “我的假网络摄像头”
  • exclusive_caps :决定是否独占输出/捕获能力。 此处将其设置为值 1 将启用它,并且通常需要修复 Chrome/WebRTC 问题。

一旦我们加载了内核模块,我们现在可以运行我们的主程序。

3. 将视频流链接到假网络摄像头

首先,我们需要列出所有可用的视频设备:

$ ls -1 /dev/video* /dev/video0 /dev/video1 /dev/video2 

接下来,我们需要检查这些视频设备中的哪些正在运行。 这可以通过以下方式完成:

$ ffplay /dev/videoX 

此处,X 表示来自先前输出的设备编号。 例如,根据给定的示例,X 的值可以为 0、1 或 2。对于正常运行的设备,它应该生成一个带有网络摄像头的窗口,反映它捕获的任何内容。 确认正常工作的设备后,请记下设备编号并继续下一步。

接下来,我们需要“伪造”我们的网络摄像头提要:

$ ffmpeg -stream_loop -1 -re -i /path/to/video -vcodec rawvideo -threads 0 -f v4l2 /dev/videoX 

让我们把命令分成几部分:

  • ffmpeg :使我们能够将视频作为网络摄像头源流式传输的程序
  • -stream_loop -1 :这决定了视频应该循环播放的次数。 为其分配负值 -1 让它无限循环,直到我们继续播放 close 我们的程序。
  • -关于 : 这指定程序以本机帧速率读取输入
  • -一世 : 指定输入文件名。 后面是我们要流式传输的视频文件的路径
  • -vcodec :这指定了视频编解码器,也就是流处理。
  • 原始视频 : 这个告诉 ffmpeg 使用原始视频解复用器。 该多路分配器允许读取原始视频数据。
  • -线程 :要使用的线程数。 通常设置为 0 被认为是最优的。
  • -F : 此标志用于强制输入/输出文件的格式。 在我们的例子中,我们强制输出 v4l2 格式
  • /开发/视频X :它指定了上面定义的功能视频设备。

执行此命令后,它应该启动假流。 但是,您可能需要关闭并重新打开视频才能启动虚假流。 您还可以通过编写像这样的脚本来自动化整个过程 这个.

假流 Rick Astley 永远不会在 Google Meet 上给你

4. 删除虚假的网络摄像头流

完成伪流后,使用以下命令删除先前加载的内核模块:

$ sudo modprobe --remove v4l2loopback 

这应该禁用假网络摄像头。

结论

因此,我们看到了如何创建一个假网络摄像头并循环播放任何视频。 这在视频通话期间会特别方便,并且是一个非常方便的技巧。