在台式电脑上使用笔记本电脑的网络摄像头

Joh*_*Doe 24 networking webcam streaming video-streaming v4l

我想将笔记本电脑上的网络摄像头用作电脑上的视频设备,以将其用于视频会议等。

所以我不只是想流式传输视频。我实际上想通过网络“流式传输”整个设备。

因此,两台计算机,一台流式传输其网络摄像头,另一台将其作为视频设备接收。

两台计算机都运行正常的 Ubuntu 18.04,但我很快就会升级到 20.04

Raf*_*ffa 17

假设两台机器都连接在网络中,并且 PC 可以访问笔记本电脑的 IP。请按照以下步骤操作:

在笔记本电脑上

安装v4l-utilsffmpeg运行:

sudo apt install v4l-utils ffmpeg
Run Code Online (Sandbox Code Playgroud)

matroska像这样安装媒体容器:

sudo apt install libmatroska6v5
Run Code Online (Sandbox Code Playgroud)

运行以下命令以打开netcat相机流的侦听器:

ffmpeg -i /dev/video0 -codec copy -f matroska - | nc -l 9999
Run Code Online (Sandbox Code Playgroud)

在电脑上

安装v4l-utilsffmpeg运行:

sudo apt install v4l-utils ffmpeg
Run Code Online (Sandbox Code Playgroud)

安装v4l2loopback并加载虚拟摄像机:

  • 运行这个:
sudo apt install v4l2loopback-dkms v4l2loopback-utils
Run Code Online (Sandbox Code Playgroud)
  • 然后这个:
sudo modprobe -r v4l2loopback
Run Code Online (Sandbox Code Playgroud)
  • 然后这个:
sudo depmod -a
Run Code Online (Sandbox Code Playgroud)
  • 然后这个:
sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
Run Code Online (Sandbox Code Playgroud)

测试一下:

  • 将笔记本上的真实摄像头流式传输到 PC 上的虚拟摄像头(更改Laptop_IP为笔记本电脑的 IP):
nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)
  • 启动并播放虚拟摄像机:
ffplay /dev/video0
Run Code Online (Sandbox Code Playgroud)
  • 对着笔记本电脑的相机说奶酪

如果你能看到你的脸,那么它就起作用了。


麦克风?

要将麦克风输出也从笔记本电脑发送到 PC,请按照以下步骤操作:

在笔记本电脑上:

  • 运行这个:
arecord -f cd -c 1 | nc -l 7777
Run Code Online (Sandbox Code Playgroud)

在电脑上:

  • 运行这个:
sudo modprobe snd-aloop
Run Code Online (Sandbox Code Playgroud)
  • 然后这个:
arecord -l | grep -i loopback
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Run Code Online (Sandbox Code Playgroud)

我们将像这样在卡 1上使用设备 1(这通常是虚拟麦克风)hw:1,1

  • 然后运行这个(更改Laptop_IP为笔记本电脑的IP):
nc Laptop_IP 7777 | aplay -f cd -D hw:1,1 
Run Code Online (Sandbox Code Playgroud)
  • 在系统设置 -> 声音 -> 输入中选择新的麦克风设备。

测试麦克风并被告知会有声音延迟,因为没有使用压缩。


注意:

  • 这已经在两台运行最新相同版本的 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"
Run Code Online (Sandbox Code Playgroud)
  • 然后再次运行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
Run Code Online (Sandbox Code Playgroud)

ffplay /dev/video3
Run Code Online (Sandbox Code Playgroud)

故障排除:

如果您遇到问题v4l2loopback要测试流是否正在通过,您可以在 PC 上运行:

nc Laptop_IP 9999 | mplayer -
Run Code Online (Sandbox Code Playgroud)

或者

nc Laptop_IP 9999 | vlc -
Run Code Online (Sandbox Code Playgroud)

或者

nc Laptop_IP 9999 | ffplay -
Run Code Online (Sandbox Code Playgroud)

要将其与 Google 环聊一起使用:

感谢@janjaromirhorak,如以下引用的评论所示。

可能有更多方法可以做到这一点,但这是我在 Mozilla Firefox 中的方法:打开 Google Hangouts,开始视频通话并允许对麦克风和内部网络摄像头的请求。然后单击齿轮图标以打开一个设置对话框,您可以在其中选择要使用的网络摄像头。选择您的虚拟网络摄像头,接受权限请求并单击“完成”。此外,此设置似乎会持续到未来的视频通话中 - 下次我发现我的虚拟网络摄像头已被选中并正常工作时。:)