Redian新闻
>
在 OBS 中将摄像头锁定到特定的 USB 端口 | Linux 中国

在 OBS 中将摄像头锁定到特定的 USB 端口 | Linux 中国

科技
 
导读:为了使复杂的摄像头设置标准化,你可以对 Linux 文件系统中摄像头的位置分配施加一些特殊规则。   
本文字数:3880,阅读时长大约:5分钟

如果在 Linux 上用多个摄像头 使用 OBS 进行直播🔗 opensource.com,你可能会注意到摄像头会在开机时按照它们被检测到的顺序加载。通常情况下你不需要特别在意,但如果你有一个固定的直播设置和复杂的 OBS 模板,你需要知道现实世界中哪个摄像头将会显示在虚拟世界的哪个屏幕上。换句话说,你不希望今天将一个设备分配为“摄像头 A”,而明天它却成为“摄像头 B”。

为了使复杂的摄像头设置标准化,你可以对 Linux 文件系统中摄像头的位置分配施加一些特殊规则。

udev 子系统

在 Linux 上处理硬件外设的系统称为 udev。它检测和管理你接入计算机的所有设备。你可能没有意识到它的存在,因为它不会吸引太多注意力。尽管当你插入 USB 闪存驱动器以在桌面上打开它或连接打印机时,你肯定与它交互过。

硬件检测

假设你有两个 USB 摄像头:一个在电脑左侧,另一个在右侧。左侧摄像头拍摄近景,右侧摄像头拍摄远景,并且在直播过程中你需要切换两个摄像头。在 OBS 中,你将每个摄像头添加到 (Sources) 面板中,并直观地将它们命名为 “camLEFT” 和 “camRIGHT”。

设想一种最坏的场景,你有两个 相同的 摄像头:它们是同一品牌、同一型号。这是最坏的情况,因为当两个硬件设备完全相同时,它们几乎不可能有任何独特的 ID,以便你的电脑能够将它们区分开来。

不过,这个难题有解决办法,只需要一些简单的终端命令进行一些调查。

1、获取厂商和产品 ID

首先,将一个摄像头插入你想要它分配到的 USB 端口。然后输入以下命令:

  1. $ lsusb
  2. Bus 006 Device 002: ID 0951:1666 Kingston Technology DataTraveler G4
  3. Bus 005 Device 003: ID 03f0:3817 Hewlett-Packard LaserJet P2015 series
  4. Bus 003 Device 006: ID 045e:0779 Microsoft Corp. LifeCam HD-3000
  5. Bus 003 Device 002: ID 8087:0025 Intel Corp. 
  6. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
  7. Bus 001 Device 003: ID 046d:c216 Logitech, Inc. Dual Action Gamepad
  8. Bus 001 Device 002: ID 048d:5702 Integrated Technology Express, Inc. 
  9. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  10. [...]

你通常可以专门搜索字符串 cam 以缩小结果范围,因为大多数(但不是所有)摄像头都会报告为 “camera”。

  1. $ lsusb | grep -i cam
  2. Bus 003 Device 006: ID 045e:0779 Microsoft Corp. LifeCam HD-3000

这里有很多信息。ID 被列为 045e:0779。第一个数字是供应商 ID,第二个数字是产品 ID。把它们写下来,因为稍后你会需要它们。

2、获取 USB 标识符

你还获取了摄像头的设备路径:总线 3,设备 6。在 Linux 中有一句话:“一切皆文件”,实际上,USB 设备被描述为以 /dev/bus/usb/ 开始,以总线(本例中为 003)和设备(本例中为 006)结尾的文件路径。查看 lsusb 输出中的总线和设备号。它们告诉你该摄像头位于 /dev/bus/usb/003/006

你可以使用 udevadm 命令获取此 USB 设备的内核代号:

  1. $ sudo udevadm info --attribute-walk /dev/bus/usb/003/006 | grep "KERNEL="
  2.    KERNEL=="3-6.2.1"

这个例子中的内核 USB 标识符是 3-6.2.1。把你系统中的标识符记下来,因为之后也会用到它。

3、为每个摄像头重复该过程

将另一个摄像头(如果你有多个摄像头,则为每个摄像头)连接到要分配给它的 USB 端口。这与你用于另一个摄像头的 USB 端口是不同的!

重复该过程,获取供应商和产品 ID(如果摄像头是相同的品牌和型号,则应与第一个摄像头相同)以及内核 USB 标识符。

  1. $ lsusb | grep -i cam
  2. Bus 001 Device 004: ID 045e:0779 Microsoft Corp. LifeCam HD-3000
  3. $ sudo udevadm info --attribute-walk dev/bus/usb/001/004 | grep "KERNEL="
  4.    KERNEL=="1-6"

在这个例子中,我已经确定我的摄像头连接到了 1-6 和 3-6.2.1(第一个是我的机器上的 USB 端口,另一个是插在我的机器上的显示器插口的集线器,这就是为什么一个比另一个更复杂的原因)。

编写一个 udev 规则

你已经有了所需的一切,因此现在可以编写一个规则,告诉 udev 在特定的 USB 端口找到一个摄像头时给它一个一致的标识符。

创建并打开一个名为 /etc/udev/rules.d/50-camera.conf 的文件,并输入这两个规则,使用适合你自己系统的厂商和产品 ID 和内核标识符:

  1. SUBSYSTEM=="usb", KERNEL=="1-6", ATTR{idVendor}=="045e", ATTR{idProduct}=="0779", SYMLINK+="video100"
  2. SUBSYSTEM=="usb", KERNEL=="3-6.2.1", ATTR{idVendor}=="045e", ATTR{idProduct}=="0779", SYMLINK+="video101"

这些规则告诉 udev,当在特定的 USB 位置找到与特定供应商和产品 ID 匹配的设备时,创建一个名为 video100 和 video101 的符号链接(有时也称为“别名”)。符号链接大多是任意的。我使用较大的数字,这样它们就容易被发现,并且数字不能与现有设备冲突。如果实际上有超过 101 个摄像头连接到计算机上,请使用 video200 和 video201 以确保安全(记得联系我!我很想了解  项目的情况)。

重启

重新启动计算机。你现在可以让摄像头保持连接在计算机上,但实际上这并不重要。一旦 udev 加载了规则,它就会遵循这些规则,无论设备是否在启动期间附加或稍后插入。

许多人说 Linux 从不需要重启,但是 udev 在引导期间加载其规则,而且此外,你想保证你的 udev 规则在重新启动时也起作用。

计算机重新启动后,请查看摄像头注册的 /dev/video 目录:

  1. $ ls -1 /dev/video*
  2. /dev/video0
  3. /dev/video1
  4. /dev/video100
  5. /dev/video101
  6. /dev/video2
  7. /dev/video3

正如你所看到的,在 video100 和 video101 有条目。今天,这些是指向 /dev/video2 和 /dev/video3 的符号链接,但明天它们可能是指向 /dev/video1 和 /dev/video2 或任何其他基于 Linux 检测和分配文件的组合。

两个摄像头角度

你可以在 OBS 中使用这些符号链接,这样 camLEFT 始终是 camLEFT,camRIGHT 始终是 camRIGHT。

(题图:MJ/9bb70b6d-9f49-493a-8daf-5546d207781f)


via: https://opensource.com/article/22/1/cameras-usb-ports-obs

作者:Seth Kenlon 选题:lujun9972 译者:hanszhao80 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :Hans zhao
🌟🌟🌟
翻译: 19.0 篇
|
贡献: 368 天
2022-05-02
2023-05-05
https://linux.cn/lctt/hanszhao80
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM | Linux 中国为什么程序员喜欢为 Linux 打包 | Linux 中国In China’s Weight Loss Camps, a Dangerous Obsession With Numbers大家最喜欢的 Linux 终端字体 | Linux 中国榜样的力量,写在女神节之日Ubuntu 23.04 “Lunar Lobster” 的最佳新功能 | Linux 中国救回225失踪儿童“一定找到你”十周锁定美国16特定地区!“小美人鱼” 国殇日首映票房夺冠!揭爱立信贿赂 吹哨人获2.79亿奖金Agustín Hernández:中美洲建筑背景下的未来主义巨构RH,美式复古新派家具【39/50】最近的日常和出游的穿穿搭搭TUXEDO Stellaris 16(Gen5)是目前所能找到的终极 Linux 笔记本电脑 | Linux 中国Garuda Linux “Raptor” 230305 版本发布 | Linux 中国在 Linux 上用 Kdenlive 编辑视频 | Linux 中国如何在 Ubuntu 和其他 Linux 下安装 IDLE Python IDE | Linux 中国"一定找到你"!10周锁定美国16特定地区,救回225名失踪儿童!满街都是摄像机!芝新规:公车、路灯都装摄像头 违停就罚单在 Linux 命令行上使用 dict 文字工具 | Linux 中国终端基础:在 Linux 中删除文件和文件夹 | Linux 中国如何在 Linux 中使用旧相机作为网络摄像头 | Linux 中国blendOS 的目标:取代所有的 Linux 发行版 | Linux 中国如何在 Linux 系统中使用 Ventoy 创建多重引导的 U 盘 | Linux 中国Blink 家用安防 智能摄像头1-5摄像头套装5.5折!2节电池续航2年!Alpine Linux 3.18 发布 | Linux 中国「一定找到你」 10周锁定美国16特定地区 救回225失踪儿童使用 ChatGPT AI 从英文文本生成 Linux 命令 | Linux 中国7 个超轻量级 Linux 发行版 | Linux 中国Arch Linux 的最佳 GUI 包管理器 | Linux 中国株连之后该是恩荫世袭了吧?Linux 上 5 款最好的 EPUB 阅读器 | Linux 中国如何在 Linux 中合并 PDF 文件 | Linux 中国Kali Linux 推出用于防御性安全加固的 “Kali Purple” | Linux 中国新书推出《一段未知的旅程》终端基础:在 Linux 中创建文件 | Linux 中国“一定找到你” !10周锁定美国16特定地区,救回225失踪儿童世界上只有两个 Linux 发行版:Arch Linux 与其它 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。