标签: v4l2loopback

为什么多个消费者可以从网络摄像头访问 *单个 * v4l2-loopback 流

我最近需要一个网络摄像头同时由 3 个应用程序共享(一个网络浏览器、一个视频会议应用程序和 ffmpeg 来保存流)。

不可能简单地共享 /dev/video* 流,因为一旦一个应用程序正在使用它,其他应用程序就不能使用它,并且其他任何东西都会导致“设备或资源繁忙”或等效。

所以我转向 v4l2-loopback,目的是将网络摄像头镜像到 3 个环回。

使用 3 个环回确实按预期工作,但真正让我惊讶的是,我实际上不需要3 个环回,而只需要 1 个。

如果我创建一个环回并使用 ffmpeg 提供它,那么所有 3 个应用程序可以同时使用单个镜像环回,而不会出现“设备或资源繁忙”问题。

所以这比我计划的要好,而且没有我需要帮助的实际问题。

但我的问题是,环回怎么可能呢?为什么不直接使用原始来源?

创建单环回的示例命令:

sudo modprobe v4l2loopback video_nr=30 exclusive_caps=1 card_label="loopback cam"

使用 ffmpeg 将 /dev/video5 镜像到环回 (/dev/video30) 的示例命令。这将默认为原始,但最近构建的 ffmpeg 可以使用像 MJPEG 这样的替代流,不管怎样,行为都是相同的:

ffmpeg -f v4l2 -i /dev/video5 -codec copy -f v4l2 /dev/video30

这样做后,尝试使用多个应用程序访问 /dev/video30,以下是一些示例:

ffmpeg -f v4l2 -i /dev/video30 -codec libx264 recordstream.mp4
ffplay -f video4linux2 -i /dev/video30
Run Code Online (Sandbox Code Playgroud)

相关的系统信息:

  • Ubuntu 20.04
  • 内核:5.4.0-31-通用
  • 包:v4l2loopback-dkms …

ffmpeg video v4l camera v4l2loopback

9
推荐指数
1
解决办法
1054
查看次数

如何创建虚拟网络摄像头?

我想参加一些视频会议,但我没有网络摄像头,会议软件需要一个。

所以我的问题是,我可以创建一个虚拟的吗?我不在乎凸轮会投射什么,我只需要看起来有一个。

chrome v4l camera v4l2loopback

8
推荐指数
1
解决办法
9633
查看次数

如何创建一个 v4l2 设备,它是网络摄像头的裁剪版本?

我有一个罗技网络摄像头 C930e /dev/video0。我可以用它来进行视频会议(例如 jitsi)。然而,这个网络摄像头的视频太高太宽了。我想要一个“裁剪”的版本/dev/video0,不显示墙上的海边图片。

首先,我尝试设置v4l2选项来实现这一点,但没有成功:

$ v4l2-ctl -d /dev/video0 --get-cropcap
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 640, Height 360
    Default     : Left 0, Top 0, Width 640, Height 360
    Pixel Aspect: 1/1

$ v4l2-ctl -d /dev/video0 --get-selection target=crop_bounds
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 360, Flags:

$ v4l2-ctl -d /dev/video0 --set-selection target=crop_bounds,flags=crop,top=10,left=10,width=100,height=100
VIDIOC_S_SELECTION: failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

之后,我遵循了另一个想法:我尝试使用v4l2loopback创建另一个设备/dev/video2。之后我会尝试使用ffmpeg连接/dev/video0到 …

v4l camera v4l2loopback

5
推荐指数
1
解决办法
4096
查看次数

添加和删​​除 v4l2-loopback 设备?

我的机器上运行着不同的 lxc 容器,并且还连接了一个网络摄像头。我希望所有 lxc 容器都可以访问此相机。我遇到了“v4l2-loopback”设备,并找到了一种添加设备的方法;

modprobe v4l2loopback devices=3
Run Code Online (Sandbox Code Playgroud)

我将来自 /dev/video0 的流定向到所需的虚拟视频设备。我的问题是如何在运行时添加和删除这些 v4l2loopback 设备?每当启动/删除任何 lxc 容器时,我都想添加/删除设备。有任何想法吗?

谢谢!

lxc v4l v4l2loopback

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

v4l ×4

v4l2loopback ×4

camera ×3

chrome ×1

ffmpeg ×1

lxc ×1

video ×1