您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

如何在 Linux 中使用旧相机作为网络摄像头

时间:2023-03-22 14:43:42  来源:Linux中国  作者:Tom Oliver

今年,在我基本上放弃了 macBook,转而使用 NixOS 机器之后,我开始在与人进行视频通话时被要求“打开摄像头”。这是一个问题,因为我没有网络摄像头。我考虑购买一个,但后来我意识到我有一台完好无损的 2008 年产的佳能 EOS Rebel XS 数码单反相机放在书架上。这台相机有一个 mini-USB 接口,所以我自然而然地思考:一台数码单反相机、一个 mini-USB 接口和一台台式电脑,是否意味着我能拥有一个网络摄像头?

只有一个问题。我的佳能 EOS Rebel XS 不能录制视频。它可以拍摄一些漂亮的照片,仅此而已。所以这结束了?

还是有别的办法?

恰好有一个叫做 ​​gphoto2​​ 的神奇的开源软件。一旦安装,它允许你从计算机控制各种支持的相机,并拍摄照片和视频。

支持的相机

首先,了解你的设备是否得到支持:

$ gphoto2 --list-cameras

拍摄图像

你可以用它拍照

$ gphoto2 --capture-image-and-download

快门触发,图像会保存到你当前的工作目录中。

录制视频

我意识到了这里的潜力,所以尽管我的相机没有视频功能,我还是决定尝试 ​​gphoto2 --capture-movie​​ 命令。不知怎么,尽管我的相机不支持视频功能,​​gphoto2​​ 仍然能够生成一个 MJPEG 文件!

在我的相机上,我需要将其置于“实时预览”模式下,然后 ​​gphoto2​​ 才能录制视频。这包括将相机设置为纵向模式,然后按下 “设置Set” 按钮,使取景器关闭,相机屏幕显示图像。不幸的是,这还不足以将其用作网络摄像头。它仍然需要分配一个视频设备,例如 ​​/dev/video0​​。

安装 ffmpeg 和 v4l2loopback

毫不奇怪,有一个开源的解决方案来解决这个问题。首先,使用你的包管理器安装 ​​gphoto2​​、​​ffmpeg​​ 和 ​​mpv​​。例如,在 Fedora 、centos 、Mageia 和类似的 linux 发行版上:

$ sudo dnf install gphoto2 ffmpeg mpv

在 Debian、Linux Mint 及其类似发行版:

 
$ sudo apt install gphoto2 ffmpeg mpv

我使用的是 NixOS,这是我的配置文件:

# configuration.nix
...
environment.systemPackages = with pkgs; [
  ffmpeg
  gphoto2
  mpv
...
]

创建虚拟视频设备需要使用 ​​v4l2loopback​​ Linux 内核模块。在撰写本文时,该功能未包含在主线内核中,因此你需要自己下载和编译它:

$ git clone https://Github.com/umlaeute/v4l2loopback
$ cd v4l2loopback
$ make
$ sudo make install
$ sudo depmod -a

如果你像我一样使用 NixOS ,你可以在 ​​configuration.nix​​ 中添加额外的模块包:

[...]
boot.extraModulePackages = with config.boot.kernelPackages;
[ v4l2loopback.out ];
boot.kernelModules = [
  "v4l2loopback"
];
boot.extraModprobeConfig = ''
  options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
[...]

在 NixOS 上, 运行 ​​sudo nixos-rebuild switch​​,然后重启。

创建一个视频设备

假设你的计算机当前没有 ​​/dev/video​​ 设备,你可以借助 ​​v4l2loopback​​ 在需要时创建一个。

运行以下命令,将 ​​gphoto2​​ 中的数据发送到 ​​ffmpeg​​,使用设备如 ​​/dev/video0​​ 设备:

$ gphoto2 --stdout --capture-movie |
 ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0

你得到的输出是这样的:

ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11.3.0 (GCC)
  configuration: --disable-static ...
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Capturing preview frames as movie to 'stdout'. Press Ctrl-C to abort.[mjpeg @ 0x1dd0380] Format mjpeg detected only with low score of 25, misdetection possible!
Input #0, mjpeg, from 'pipe:':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 768x512 ...
Stream mApping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))[swscaler @ 0x1e27340] deprecated pixel format used, make sure you did set range correctly
Output #0, video4linux2,v4l2, to '/dev/video0':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Video: rawvideo (I420 / 0x30323449) ...
    Metadata:
      encoder         : Lavc58.134.100 rawvideoframe=  289 fps= 23 q=-0.0 size=N/A time=00:00:11.56 bitrate=N/A speed=0.907x

要查看来自网络摄像头的视频,请使用 ​​mpv​​ 命令:

$ mpv av://v4l2:/dev/video0 --profile=low-latency --untimed

Streaming a live feed from the webcam

Streaming a live feed from the webcam

自动启动你的网络摄像头

每次想使用网络摄像头时都需要执行一次命令有点麻烦。幸运的是,你可以在启动时自动运行此命令。我将其实现为一个 ​​systemd​​ 服务:

# configuration.nix
...
  systemd.services.webcam = {
    enable = true;
    script = ''
      ${pkgs.gphoto2}/bin/gphoto2 --stdout --capture-movie |
        ${pkgs.ffmpeg}/bin/ffmpeg -i - 
            -vcodec rawvideo -pix_fmt yuv420p -f v4l2  /dev/video0
    '';
wantedBy = [ "multi-user.target" ];
  };
...

在 NixOS 上,运行 ​​sudo nixos-rebuild switch​​,然后重新启动你的计算机。你的网络摄像头已经开启并处于活动状态。

要检查是否存在任何问题,可以使用 ​​systemctl status webcam​​ 命令。它会告诉你服务最后一次运行的时间,并提供其以前输出的日志。这对于调试非常有用。

迭代以使其变得更好

止步于此也许很诱人。但是,考虑到当前的全球危机,我们可能需要思考是否有必要一直开着网络摄像头。这让我感到不太理想,原因如下:

  • 这浪费电。
  • 这类事情涉及隐私问题。

我的摄像头有一个镜头盖,所以说实话,第二个原因并不真的让我感到困扰。当我不使用网络摄像头时,我总是可以把镜头盖上。然而,让一个耗电量大的单反相机整天开着(更不用说需要解码视频所需的 CPU 开销),对我的电费并没有任何好处。

理想情况是:

  • 我一直把相机插在电脑上,但是关闭的。
  • 当我想使用网络摄像头时,我按下相机的电源按钮将其打开。
  • 我的计算机会检测到相机并启动 systemd 服务。
  • 使用网络摄像头完成后,我再次将其关闭。

为了实现这一点,你需要使用一个自定义的 udev 规则。

udev 规则可以告诉你的计算机,当它发现某个设备已经可用时执行某个任务。这可以是外部硬盘甚至是非 USB 设备。在这种情况下,你需要通过其 USB 连接识别相机。

首先,指定 udev 规则被触发时要运行的命令。你可以用一个 shell 脚本来完成(​​systemctl restart webcam​​ 应该可以工作)。我运行的是 NixOS,所以我只需要创建一个派生包(一个 Nix 包),它会重新启动 systemd 服务:

# start-webcam.nix
with import <nixpkgs> { };
writeShellScriptBin "start-webcam" ''
  systemctl restart webcam
  # debugging example
  # echo "hello" &> /home/tom/myfile.txt
  # If myfile.txt gets created then we know the udev rule has triggered properly''

接下来,实际定义 udev 规则。查找摄像头的设备和厂商 ID。使用 ​​lsusb​​ 命令可以完成此操作。该命令可能已经安装在你的发行版上,但我不经常使用它,因此我只需要根据需要使用 ​​nix-shell​​ 安装它:

$ nix-shell -p usbutils

无论你的计算机上已经安装了它,还是刚刚安装,请运行 ​​lsusb​​ :

$ lsusb
Bus 002 Device 008: ID 04a9:317b Canon, Inc. Canon Digital Camera[...]

在此输出中,厂商 ID 为 ​​04a9​​,设备 ID 为 ​​317b​​。这已足以创建 udev 规则:

ACTION=="add", SUBSYSTEM=="usb",
ATTR{idVendor}=="04a9",
ATTR{idProduct}=="317b",
RUN+="/usr/local/bin/start-webcam.sh"

或者,如果你使用的是 NixOS:

# configuration.nix[...]let
  startWebcam = import ./start-webcam.nix;[...]
services.udev.extraRules = ''
  ACTION=="add",  
  SUBSYSTEM=="usb", 
  ATTR{idVendor}=="04a9", 
  ATTR{idProduct}=="317b",  
  RUN+="${startWebcam}/bin/start-webcam"'';[...]最后,在你的 ​​start-webcam​​ systemd 服务中删除 ​​wantedBy = ["multi-user.target"];​​ 这一行。(如果保留它,则无论相机是否开启,该服务都会在下次重启时自动启动。)

重复使用旧技术

我希望这篇文章能让你在放弃一些旧技术之前三思而后行。Linux 可以为技术注入活力,无论是你的电脑还是数码相机或其他外围设备等简单的东西。



Tags:摄像头   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
注意网络安全!广州市消委会教您选购智能摄像头
近年来,智能家居技术和产业快速发展,智能摄像头不仅能实现录像功能,还能实现移动追踪侦测、自动巡检、人形侦测等功能,为人们提供了多种安防需求。为向消费者提供真实可用的商品...【详细内容】
2024-02-28  Search: 摄像头  点击:(38)  评论:(0)  加入收藏
一探究竟:红外热像仪与红外摄像头有何不同?
红外热像仪和红外线摄像头是用于探测和记录红外辐射的设备,但它们在工作原理、应用领域和功能特点等方面存在一些区别。首先,让我们来了解一下红外辐射。红外辐射是指处于电磁...【详细内容】
2024-02-22  Search: 摄像头  点击:(31)  评论:(0)  加入收藏
用手机怎么检测房间有没有摄像头?很简单实用,有手机的都试试
随着人们对隐私保护的重视程度不断提高,越来越多的人开始关注如何保护自己的隐私。其中,防止被偷拍是非常重要的一环。那么,用手机怎么检测房间有没有摄像头呢?首先,我们需要了解...【详细内容】
2024-02-20  Search: 摄像头  点击:(35)  评论:(0)  加入收藏
如果手机摄像头被“控制”,多半出现这4个问题,望相互告知!
随着智能手机的普及,手机摄像头已经成为我们日常生活中不可或缺的拍照工具。然而,有时候我们会发现手机摄像头似乎被“控制”了,出现了各种奇怪的问题。本文将列举出如果手机摄...【详细内容】
2024-01-18  Search: 摄像头  点击:(51)  评论:(0)  加入收藏
快速学会!手机这样查,房间摄像头无处遁形!
首先,我们需要了解摄像头的常见位置。摄像头通常会被放置在房间的角落、电视机上方、空调出风口等隐蔽位置。因此,在入住酒店、民宿或租住公寓时,要特别注意这些位置,仔细检查是...【详细内容】
2024-01-08  Search: 摄像头  点击:(54)  评论:(0)  加入收藏
家用摄像头怎么复位重新连接?步骤详解来了,看完去试一下
现在家庭中安装摄像头是越来越多了,通过摄像头不仅可以实时看到家里的情况,也可以通过摄像头进行语音,非常的方便。有时候家里少了东西,也可以进行回放,查看是否被别人拿走了。摄...【详细内容】
2024-01-03  Search: 摄像头  点击:(70)  评论:(0)  加入收藏
如何检查房间里是否有隐藏摄像头
随着科技的发展,隐藏摄像头已经变得越来越普遍,而且越来越难以被发现。如果你怀疑你的房间里可能被安装了隐藏摄像头,以下是一些检查的方法:1. 观察房间的细节首先,仔细观察房间...【详细内容】
2023-12-20  Search: 摄像头  点击:(94)  评论:(0)  加入收藏
笔记本自带摄像头的正确打开方式
随着科技的进步,笔记本已经成为我们日常生活和工作中不可或缺的工具。除了基本的文字处理和计算功能,现代笔记本还集成了许多方便实用的硬件设备,其中就包括摄像头。然而,不少用...【详细内容】
2023-10-30  Search: 摄像头  点击:(331)  评论:(0)  加入收藏
特斯拉利用车内摄像头监测驾驶员是否瞌睡
IT之家 10 月 18 日消息,特斯拉开始推出其新的“驾驶员瞌睡警告”功能,该功能利用车内摄像头监测驾驶员的状态。多年来,特斯拉在其自动驾驶辅助功能(包括 Autopilot 和 FSD)中并...【详细内容】
2023-10-18  Search: 摄像头  点击:(77)  评论:(0)  加入收藏
把Android手机变成电脑摄像头,开发者倒苦水:40行代码搞定,但需要40个项目文件支持!
编译 | 苏宓出品 | CSDN(ID:CSDNnews)开发一款 App,难不难?软件工程师 Thomas SIMON 闲暇之余用实践回答道:其实说难也不难。当他拿起一个 Android 手机,想要将其作为电脑摄像头和...【详细内容】
2023-08-21  Search: 摄像头  点击:(187)  评论:(0)  加入收藏
▌简易百科推荐
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  老毛桃    Tags:WiFi密码   点击:(6)  评论:(0)  加入收藏
手机WiFi信号满格却接收消息延迟?这里有妙招帮你解决!
在现代社会,手机已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。然而,有时我们会遇到一些令人烦恼的问题,比如明明手机WiFi信号满格...【详细内容】
2024-04-03  蔡前进    Tags:手机WiFi   点击:(5)  评论:(0)  加入收藏
SASE技术应用落地的五个关键趋势
在Gartner 最新发布的《2023网络技术成熟度曲线》报告中认为,SASE技术已经开始走出最初的技术炒作期,将逐步迈向新一轮的实用落地阶段。在Gartner发布的《Hype Cycle for Ente...【详细内容】
2024-04-01    安全牛  Tags:SASE   点击:(10)  评论:(0)  加入收藏
提示“该网站安全证书存在问题,连接可能不安全”如何解决
在你输入网址并浏览网页时,如果你的浏览器弹出一个警告,提示“网站的安全证书存在问题”,或是显示一个红色的锁标志,这些都是网站不安全的警示。这些提示通常是由HTTPS协议中的S...【详细内容】
2024-03-18  倏然间    Tags:网站安全证书   点击:(8)  评论:(0)  加入收藏
如何有效排除CAN总线错误
控制器局域网(CAN)控制器局域网(CAN)是现代车辆中电子元件无缝运行的基础。在远程信息处理领域,CAN总线系统的效率至关重要,其能够实现支撑当今汽车技术的复杂功能。然而,CAN总...【详细内容】
2024-02-20    千家网  Tags:CAN   点击:(46)  评论:(0)  加入收藏
网络连接受限或无连接怎么办?这里提供几个修复办法
可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。排除和解决“连接受限或无连接”错误此错误可能由计算机上...【详细内容】
2024-02-06  驾驭信息纵横科技    Tags:网络连接受限   点击:(43)  评论:(0)  加入收藏
如何将Mac连接到以太网?这里有详细步骤
在Wi-Fi成为最流行、最简单的互联网连接方式之前,每台Mac和电脑都使用以太网电缆连接。这是Mac可用端口的标准功能。如何将Mac连接到以太网如果你的Mac有以太网端口,则需要以...【详细内容】
2024-02-03  驾驭信息纵横科技    Tags:Mac   点击:(66)  评论:(0)  加入收藏
简易百科之什么是端口映射
端口映射,也称为端口转发,是一种网络通信中的技术手段,通过将内网中的一个端口上的数据流量转发到另一个端口,使得外部网络能够访问到内部网络中的特定服务。在实现上,端口映射通...【详细内容】
2024-01-26    简易百科  Tags:端口映射   点击:(155)  评论:(0)  加入收藏
ip因频繁登陆已被禁止访问 无法显示图片 怎么办
首先,我们要明白,部分网站为了有效遏制数据爬取和非法攻击,保证访问速度和普通用户查询,会在系统中增加网络安全设备,加强安全防护机制,并提前设置安全访问规则。因此,一旦用户的行...【详细内容】
2024-01-20  何福意思    Tags:ip   点击:(63)  评论:(0)  加入收藏
电脑连上wifi却上不了网怎么办
当电脑连接上 WiFi 却无法上网时,可能会让人感到困惑和沮丧。这个问题通常会有多种可能的原因,包括网络配置问题、路由器故障、无线适配器问题等。在面对这个问题时,可以尝试以...【详细内容】
2024-01-16  编程资料站    Tags:wifi   点击:(69)  评论:(0)  加入收藏
站内最新
站内热门
站内头条