我想将笔记本电脑上的网络摄像头用作电脑上的视频设备,以将其用于视频会议等。
所以我不只是想流式传输视频。我实际上想通过网络“流式传输”整个设备。
因此,两台计算机,一台传输其网络摄像头,另一台将其作为视频设备接收。
两台电脑都运行正常的 Ubuntu 18.04 但是我很快就会升级到 20.04
我想将笔记本电脑上的网络摄像头用作电脑上的视频设备,以将其用于视频会议等。
所以我不只是想流式传输视频。我实际上想通过网络“流式传输”整个设备。
因此,两台计算机,一台传输其网络摄像头,另一台将其作为视频设备接收。
两台电脑都运行正常的 Ubuntu 18.04 但是我很快就会升级到 20.04
假设两台机器都连接在网络中,并且 PC 可以访问笔记本电脑的 IP。请按照以下步骤操作:
在笔记本电脑上
安装
v4l-utils
并ffmpeg
运行:像这样安装
matroska
媒体容器:运行以下命令以打开
netcat
摄像头流的侦听器:在电脑上
安装
v4l-utils
并ffmpeg
运行:安装
v4l2loopback
并加载虚拟相机:测试它:
Laptop_IP
为笔记本电脑的 IP):如果你能看到你的脸,那么它就起作用了。
麦克风?
要将麦克风输出也从笔记本电脑发送到 PC,请按照以下步骤操作:
在笔记本电脑上:
在电脑上:
输出将是这样的:
我们将像这样在卡 1上使用设备 1(这通常是虚拟麦克风)
hw:1,1
Laptop_IP
为笔记本电脑的 IP):测试麦克风并被告知会有声音延迟,因为没有使用压缩。
注意:
如果测试失败,则可能是因为您的 PC
/dev
目录中有其他虚拟的相机设备或以其他方式存在。要解决此问题,请运行
ls /dev/video*
并注意有多少。然后在测试中的两个命令中使用其后数字较大的一个。这样做是这样的:跑
sudo modprobe -r v4l2loopback
然后运行
ls /dev/video*
并记下现有的摄像机,例如/dev/video0 /dev/video1 /dev/video2 ... etc
然后运行:
然后再次运行
ls /dev/video*
一个新的相机/dev/video3
将像这样添加/dev/video0 /dev/video1 /dev/video2 /dev/video3
在最后两个命令中使用新相机,而不是
/dev/video0
像这样:和
故障排除:
如果您遇到问题,要测试流是否通过
v4l2loopback
,您可以在 PC 上运行:或者
或者
要在 Google Hangouts 中使用它:
感谢@janjaromirhorak,如下面引用的评论中所示。
所以你想把相机借给另一台机器。可能会迟到,但这个问题似乎有解决方案。
我看到的常见问题是,大多数会议/聊天应用程序仅支持本地摄像头设备(无网络或本地文件流)。
您只缺少一件:
v4l2loopback
gst-launch-1.0
)、ffmpeg、vlc、... 将视频从 cam 设备流式传输到网络gst-launch-1.0
)、ffmpeg、vlc、... 接收视频并将其传送到环回设备然后在桌面(PC2)中设置会议/聊天应用程序,使用在步骤(1)中创建的 V4L2 环回设备作为相机。
参考:
vlc
使用vlc是实现这一目标的一种方法。
第 1 步 - 设置
在 Debian、Ubuntu 或 Linux Mint 上安装 VLC:
要在 Fedora 上安装 VLC,首先启用 RPM Fusion 的免费存储库,然后运行:
要在 CentOS 或 RHEL 6 上安装 VLC,首先设置 EPEL 存储库,然后使用以下命令:
第 2 步 - 在 VLC 中验证网络摄像头
确保您的 Linux 系统和 VLC 检测到您的网络摄像头。
为此,您需要知道网络摄像头的名称。在下面的示例中,网络摄像头被命名为
/dev/video0
.然后你必须从你的网络摄像头测试视频。这是您需要使用的命令,不要忘记将“video0”替换为您的设备名称。
如果 VLC 成功检测到您的网络摄像头,您应该能够看到您的视频流。
第 3 步 - 在 VLC 上配置网络摄像头流式传输
您已在 VLC 中成功检测到您的网络摄像头,接下来是配置网络摄像头流式传输。
在此示例中,网络摄像头通过 HTTP 以 WMV 格式进行流式传输。要为网络摄像头流配置 VLC,首先启动 VLC。
在 VLC 菜单中选择“流媒体”。
在屏幕上选择网络摄像头或音频设备的名称,例如 /dev/video0 用于网络摄像头,hw:0,0 用于音频。勾选“显示更多选项”复选框并记下“MRL”和“编辑选项”字段中的值字符串。这些字符串将在本教程后面使用。单击“流”按钮。
验证视频源,例如 v4l2:///dev/video,然后单击“下一步”继续。
选择网络摄像头流式传输的目的地,即流式传输方法/目标。在我们的示例中,我们从下拉列表中选择 HTTP,然后单击“添加”。
接下来,指定流服务的端口号和路径。对于端口号,输入 8080;我们假设端口号未被占用,对于路径 - “/stream.wmv”。对于转码,从下拉列表中选择“视频 - WMV + WMA (ASF)”配置文件。点击下一步”。
下一个屏幕显示自动生成的流输出字符串。记下它并单击“流”按钮。
此时,VLC 应该开始通过 HTTP 从您的网络摄像头流式传输视频。流式流量直接发送到 TCP 端口号 8080 的 localhost,因此您将无法在 VLC 窗口中看到任何内容。
要验证 VLC 是否在 TCP 端口 8080 上正确运行,请运行以下命令并查找 VLC。
第 4 步 - 从网络摄像头观看流媒体视频
一旦流媒体服务器开始运行,网络摄像头实时源可在
http://:8080/stream.wmv
您可以使用 VLC 播放器或 MPlayer 访问网络摄像头源,如下所示。
如果您正在测试来自同一主机的提要,请改用环回地址 127.0.0.1。
如果我理解正确,您的意思是让一台计算机上的视频设备从另一台计算机上的物理设备获取输入。即使我这里没有资源来测试它,我想这是可能的。我记得前段时间做了类似的事情,但不是视频。根据this(也是this;都是旧帖),也可以做视频。
总之
这些帖子中的解决方案和评论使用
dd
,ffmpeg
或 netcat (nc
) 来转储/流式传输视频,mplayer
或vlc
查看隧道视频,甚至使用tee
.如果您首先尝试上述帖子中提供的任何解决方案并报告反馈,这将是继续前进的良好起点。
没有测试创建本地设备以完全访问它,就像网络摄像头在本地连接一样。 这(旧帖子)表明使用SSHFS可能会成功。YMMV,取决于您打算将隧道视频用于什么用途。
参考
通过 SSH 或 tcptunnel 管道视频设备?
我可以通过 ssh 管道 /dev/video
通过管道和 SSH 观看远程网络摄像头?
SSHFS
您可以尝试使用 DroidCam。我在一个地方没有带笔记本电脑的 PC,所以我刚刚在 Android 手机和 Ubuntu 19.10 上对其进行了测试。您可以尝试使用 Wifi Server 选项。
安装 Ubuntu:
你可以从终端运行它:
droidcam &
在防火墙中允许它:
对于 20.04,此 droidcam 安装指南无法使用。但我发现这里描述的不同方式。
我的建议会有所不同,因为所有选项都已经给出。
安装TeamViewer并使用它连接到笔记本电脑,这个想法的问题是笔记本电脑的摄像头必须对准您,即使您使用台式电脑也是如此。即使两台计算机不在同一网络上,这也将起作用。TeamViewer 有免费(非商业)使用和付费(商业)使用。
使用远程连接 您可以在带有 Ubuntu 的 Dekstop 计算机上使用远程连接。