我想将笔记本电脑上的网络摄像头用作电脑上的视频设备,用于视频会议等。
因此,我不仅仅想传输视频。我实际上想通过网络传输整个设备。
因此,两台计算机,一台传输其网络摄像头的数据,另一台将其作为视频设备接收。
两台计算机都运行正常的 Ubuntu 18.04,但我很快就会升级到 20.04
答案1
假设两台机器都连接到网络,并且 PC 可以访问笔记本电脑的 IP。请按照以下步骤操作:
在笔记本电脑上(带网络摄像头)
安装v4l-utils
并ffmpeg
运行:
sudo apt install v4l-utils ffmpeg
matroska
像这样安装媒体容器:
sudo apt install libmatroska6v5
运行以下命令打开netcat
摄像头流的监听器:
ffmpeg -i /dev/video0 -codec copy -f matroska - | nc -l 9999
在电脑上
安装v4l-utils
并ffmpeg
运行:
sudo apt install v4l-utils ffmpeg
安装v4l2loopback
并加载虚拟相机:
sudo apt install v4l2loopback-dkms v4l2loopback-utils
sudo modprobe -r v4l2loopback
sudo depmod -a
sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
测试一下:
将笔记本电脑上的真实摄像头传输到 PC 上的虚拟摄像头(更改
Laptop_IP
为笔记本电脑的 IP):nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video0
启动并播放虚拟相机:
ffplay /dev/video0
说奶酪到你的笔记本电脑的摄像头。
如果你能看到你的脸,那么它就起作用了。
麦克风?
要将麦克风输出从笔记本电脑发送到 PC,请按照以下步骤操作:
在笔记本电脑上:
arecord -f cd -c 1 | nc -l 7777
在电脑上:
sudo modprobe snd-aloop
arecord -l | grep -i loopback
输出将会像这样:
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
我们将使用设备 1(这通常是虚拟麦克风)卡 1像这样hw:1,1
然后运行此命令(更改
Laptop_IP
为笔记本电脑的 IP):nc Laptop_IP 7777 | aplay -f cd -D hw:1,1
在系统设置->声音->输入中选择新的麦克风设备。
测试麦克风,并注意由于未使用压缩,因此会有声音延迟。
注意
- 这已经过测试并且运行在两台机器上完美Ubuntu 19.10 的最新版本。
如果测试失败,则可能是因为您的 PC/dev
目录中有其他虚拟相机设备或以其他方式存在。
要解决此问题,请运行ls /dev/video*
并记下有多少个。然后在测试中的两个命令中使用后面数字较大的那个。操作如下:
跑步
sudo modprobe -r v4l2loopback
然后运行
ls /dev/video*
并注意现有的摄像头,例如/dev/video0 /dev/video1 /dev/video2 ... etc
然后运行:
sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
然后再次运行,将添加
ls /dev/video*
一个新的相机,如下所示/dev/video3
/dev/video0 /dev/video1 /dev/video2 /dev/video3
在最后两个命令中使用新相机,而不是
/dev/video0
像这样:nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video3 ffplay /dev/video3
故障排除
测试流是否正在通过如果您遇到问题v4l2loopback
,您可以在 PC 上运行:
nc Laptop_IP 9999 | mplayer -
或者
nc Laptop_IP 9999 | vlc -
或者
nc Laptop_IP 9999 | ffplay -
要将其与 Google Hangouts 一起使用:
谢谢@janjaromirhorak如图所示此评论引述如下。
可能还有其他方法可以做到这一点,但这是我在 Mozilla Firefox 中的方法:打开 Google Hangouts,开始视频通话并允许麦克风和内置网络摄像头的请求。然后单击齿轮图标打开设置对话框,您可以在其中选择要使用的网络摄像头。选择您的虚拟网络摄像头,接受权限请求,然后单击“完成”。此外,此设置似乎会持续到未来的视频通话 - 下次我发现我的虚拟网络摄像头已被选中并正在运行。:)
答案2
所以你想借用相机给另一台机器。可能有点晚了,但这个问题似乎有解决办法。
我看到的常见问题是,大多数会议/聊天应用程序仅支持本地摄像头设备(没有网络或本地文件流)。
你只缺少一件:
v4l2loopback
- 在桌面(PC2)中创建 V4L2 环回设备
- 在笔记本电脑(PC1)中,使用 GStreamer(
gst-launch-1.0
)、ffmpeg、vlc 等将视频从摄像头设备传输到网络 - 在桌面(PC2)中,使用 GStreamer(
gst-launch-1.0
)、ffmpeg、vlc 等接收视频并将其传送到环回设备
然后在桌面(PC2)中设置会议/聊天应用程序,使用步骤(1)中创建的 V4L2 环回设备作为摄像头。
参考:
答案3
甚高频
步骤 1 - 设置
要在 Debian、Ubuntu 或 Linux Mint 上安装 VLC:
$ sudo apt-get install vlc
要在 Fedora 上安装 VLC,首先启用 RPM Fusion 的免费存储库,然后运行:
$ sudo yum install vlc
要在 CentOS 或 RHEL 6 上安装 VLC,首先设置 EPEL 存储库,然后使用以下命令:
$ cd /etc/yum.repos.d/
$ sudo wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo
$ sudo yum install vlc
第 2 步 - 在 VLC 中验证网络摄像头
确保您的网络摄像头可以被 Linux 系统和 VLC 检测到。
为此,您需要知道网络摄像头的名称。在下面的示例中,网络摄像头名为/dev/video0
。
$ ls /dev/video*
/dev/video0
然后,您必须测试网络摄像头的视频。这是您需要使用的命令,请不要忘记将“video0”替换为您的设备名称。
$ vlc v4l2:///dev/video0
如果您的网络摄像头被 VLC 成功检测到,您应该能够看到您的视频流。
步骤 3 - 在 VLC 上配置网络摄像头流
您已成功在 VLC 中检测到您的网络摄像头,接下来是配置网络摄像头流。
在此示例中,网络摄像头以 WMV 格式通过 HTTP 进行流式传输。要配置 VLC 进行网络摄像头流式传输,请先启动 VLC。
$ vlc
在 VLC 菜单中选择“流媒体”。
在屏幕上选择您的网络摄像头或音频设备的名称,例如,网络摄像头为 /dev/video0,音频为 hw:0,0。勾选“显示更多选项”复选框,并记下“MRL”和“编辑选项”字段中的值字符串。这些字符串将在教程的后面使用。单击“流”按钮。
验证视频源,例如 v4l2:///dev/video,然后单击“下一步”继续。
选择网络摄像头流媒体的目标,即流媒体方法/目标。在我们的示例中,我们从下拉列表中选择 HTTP,然后单击“添加”。
接下来,指定流媒体服务的端口号和路径。对于端口号,请输入 8080;我们假设端口号未被占用,对于路径 - “/stream.wmv”。对于转码,从下拉列表中选择“视频 - WMV + WMA (ASF)”配置文件。单击“下一步”。
下一个屏幕显示自动生成的流输出字符串。记下它并单击“流”按钮。
此时,VLC 应该开始通过 HTTP 从您的网络摄像头流式传输视频。流式传输流量直接发送到 TCP 端口号 8080 的本地主机,因此您将无法在 VLC 窗口中看到任何内容。
要验证 VLC 是否在 TCP 端口 8080 上正常运行,请运行以下命令并查找 VLC。
$ sudo netstat -nap | grep 8080
步骤 4 - 通过网络摄像头观看流媒体视频
一旦流媒体服务器开始运行,网络摄像头实时直播即可在
http://:8080/stream.wmv
您可以使用 VLC 播放器或 MPlayer 访问网络摄像头源,如下所示。
$ vlc http://:8080/stream.wmv
$ mplayer http://:8080/stream.wmv
如果您正在测试来自同一主机的供稿,请改用环回地址 127.0.0.1。
答案4
您可以尝试使用 DroidCam。我没有带笔记本电脑的 PC,所以我只在 Android 手机和 Ubuntu 19.10 上测试了它。您可以尝试使用 Wifi 服务器选项。
Ubuntu 的安装:
sudo apt install linux-headers-`uname -r`
sudo apt install v4l2loopback-dkms v4l2loopback-utils
sudo modprobe v4l2loopback
wget https://www.dev47apps.com/files/600/droidcam-64bit.tar.bz2 -O droidcam.tar.bz2
tar xjvf droidcam.tar.bz2
cd droidcam-64bit/
sudo ./install
echo -e '[Desktop Entry]\n Version=1.0\n Name=DroidCam\n Exec=droidcam\n Icon=droidcam\n Type=Application\n Categories=Application' | sudo tee /usr/share/applications/droidcam.desktop
您可以从终端运行它:droidcam &
在防火墙中允许它:
sudo ufw allow 4747
对于 20.04,此 droidcam 安装指南无法使用。但我找到了另一种方法这里。