AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1225088
Accepted
John Doe
John Doe
Asked: 2020-04-08 09:24:00 +0800 CST2020-04-08 09:24:00 +0800 CST 2020-04-08 09:24:00 +0800 CST

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

  • 772

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

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

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

两台电脑都运行正常的 Ubuntu 18.04 但是我很快就会升级到 20.04

networking webcam streaming v4l video-streaming
  • 6 6 个回答
  • 15623 Views

6 个回答

  • Voted
  1. Best Answer
    Raffa
    2020-04-15T23:21:42+08:002020-04-15T23:21:42+08:00

    假设两台机器都连接在网络中,并且 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,开始视频通话并允许对麦克风和内部网络摄像头的请求。然后单击齿轮图标以打开设置对话框,允许您选择要使用的网络摄像头。选择您的虚拟网络摄像头,接受许可请求并单击“完成”。此外,此设置似乎会持续到未来的视频通话中 - 下次我发现我的虚拟网络摄像头已经被选中并可以正常工作。:)

    • 18
  2. user.dz
    2020-04-14T08:09:57+08:002020-04-14T08:09:57+08:00

    所以你想把相机借给另一台机器。可能会迟到,但这个问题似乎有解决方案。

    我看到的常见问题是,大多数会议/聊天应用程序仅支持本地摄像头设备(无网络或本地文件流)。

    您只缺少一件:

    v4l2loopback

    1. 在 Desktop(PC2) 中创建 V4L2 环回设备
    2. 在笔记本电脑(PC1)中,使用 GStreamer( gst-launch-1.0)、ffmpeg、vlc、... 将视频从 cam 设备流式传输到网络
    3. 在 Desktop(PC2) 中,使用 GStreamer( gst-launch-1.0)、ffmpeg、vlc、... 接收视频并将其传送到环回设备

    然后在桌面(PC2)中设置会议/聊天应用程序,使用在步骤(1)中创建的 V4L2 环回设备作为相机。

    参考:

    • 通过终端将真实网络摄像头重定向到虚拟网络摄像头
    • 使用视频环回设备伪造网络摄像头?
    • v4l2环回
    • gst-launch:网络流式传输
    • 3
  3. WinEunuuchs2Unix
    2020-04-12T10:24:15+08:002020-04-12T10:24:15+08:00

    vlc

    使用vlc是实现这一目标的一种方法。

    第 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 中成功检测到您的网络摄像头,接下来是配置网络摄像头流式传输。

    在此示例中,网络摄像头通过 HTTP 以 WMV 格式进行流式传输。要为网络摄像头流配置 VLC,首先启动 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。

    $ 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。

    • 2
  4. sancho.s ReinstateMonicaCellio
    2020-04-14T06:53:20+08:002020-04-14T06:53:20+08:00

    如果我理解正确,您的意思是让一台计算机上的视频设备从另一台计算机上的物理设备获取输入。即使我这里没有资源来测试它,我想这是可能的。我记得前段时间做了类似的事情,但不是视频。根据this(也是this;都是旧帖),也可以做视频。

    总之

    这些帖子中的解决方案和评论使用dd,ffmpeg或 netcat ( nc) 来转储/流式传输视频,mplayer或vlc查看隧道视频,甚至使用tee.

    如果您首先尝试上述帖子中提供的任何解决方案并报告反馈,这将是继续前进的良好起点。

    没有测试创建本地设备以完全访问它,就像网络摄像头在本地连接一样。 这(旧帖子)表明使用SSHFS可能会成功。YMMV,取决于您打算将隧道视频用于什么用途。

    参考

    1. 通过 SSH 或 tcptunnel 管道视频设备?

    2. 我可以通过 ssh 管道 /dev/video

    3. 通过管道和 SSH 观看远程网络摄像头?

    4. SSHFS

    • 2
  5. Gryu
    2020-04-14T08:04:41+08:002020-04-14T08:04:41+08:00

    您可以尝试使用 DroidCam。我在一个地方没有带笔记本电脑的 PC,所以我刚刚在 Android 手机和 Ubuntu 19.10 上对其进行了测试。您可以尝试使用 Wifi Server 选项。

    安装 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 安装指南无法使用。但我发现这里描述的不同方式。

    • 1
  6. Arak Rachael
    2020-04-18T22:21:33+08:002020-04-18T22:21:33+08:00

    我的建议会有所不同,因为所有选项都已经给出。

    1. 安装TeamViewer并使用它连接到笔记本电脑,这个想法的问题是笔记本电脑的摄像头必须对准您,即使您使用台式电脑也是如此。即使两台计算机不在同一网络上,这也将起作用。TeamViewer 有免费(非商业)使用和付费(商业)使用。

    2. 使用远程连接 您可以在带有 Ubuntu 的 Dekstop 计算机上使用远程连接。

    • 0

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve