Joh*_*Doe 24 networking webcam streaming video-streaming v4l
我想将笔记本电脑上的网络摄像头用作电脑上的视频设备,以将其用于视频会议等。
所以我不只是想流式传输视频。我实际上想通过网络“流式传输”整个设备。
因此,两台计算机,一台流式传输其网络摄像头,另一台将其作为视频设备接收。
两台计算机都运行正常的 Ubuntu 18.04,但我很快就会升级到 20.04
Raf*_*ffa 17
假设两台机器都连接在网络中,并且 PC 可以访问笔记本电脑的 IP。请按照以下步骤操作:
安装v4l-utils并ffmpeg运行:
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-utils并ffmpeg运行:
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)
测试一下:
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)
测试麦克风并被告知会有声音延迟,因为没有使用压缩。
注意:
如果测试失败,则可能是因为您的 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,开始视频通话并允许对麦克风和内部网络摄像头的请求。然后单击齿轮图标以打开一个设置对话框,您可以在其中选择要使用的网络摄像头。选择您的虚拟网络摄像头,接受权限请求并单击“完成”。此外,此设置似乎会持续到未来的视频通话中 - 下次我发现我的虚拟网络摄像头已被选中并正常工作时。:)