Verrouillez votre appareil photo sur un port USB spécifique dans OBS


  • FrançaisFrançais


  • Si vous diffusez avec OBS avec plusieurs caméras sous Linux, vous remarquerez peut-être que les caméras sont chargées lorsqu’elles sont détectées lors du démarrage. Vous n’y réfléchissez probablement pas beaucoup, normalement, mais si vous avez une configuration de streaming permanente avec des modèles OBS complexes, vous devez savoir quelle caméra du monde physique va apparaître sur quel écran dans le monde virtuel. En d’autres termes, vous ne voulez pas affecter un appareil en tant que caméra A aujourd’hui uniquement pour qu’il devienne la caméra B demain.

    Pour standardiser une configuration de caméra complexe, vous pouvez imposer des règles spéciales sur la façon dont les caméras sont attribuées à des emplacements dans le système de fichiers Linux.

    Le sous-système udev

    Le système traitant des périphériques matériels sous Linux s’appelle udev. Il détecte et gère tous les appareils que vous branchez sur votre ordinateur. Vous n’êtes probablement pas au courant car il n’attire pas trop l’attention sur lui-même, même si vous avez certainement interagi avec lui lorsque vous branchez une clé USB pour l’ouvrir sur votre bureau ou connectez une imprimante.

    Détection de matériel

    Supposons que vous ayez deux caméras USB : une à gauche de votre ordinateur et une à droite. La caméra de gauche prend un gros plan, la caméra de droite prend un plan long et vous basculez entre les deux pendant votre diffusion. Dans OBS, vous ajoutez chaque caméra à votre Sources panneau et, intuitivement, appeler un came GAUCHE et l’autre camDROITE.

    En supposant le pire des cas, supposons que vous ayez deux des même appareils photo : ils sont de la même marque et du même numéro de modèle. C’est le pire des cas, car lorsque deux éléments matériels sont identiques, il y a peu de chances que chacun ait un identifiant unique pour que votre ordinateur les différencie l’un de l’autre.

    Il existe cependant une solution à ce casse-tête, et cela nécessite juste une petite enquête à l’aide de commandes de terminal simples.

    1. Obtenez les identifiants du fournisseur et du produit

    Tout d’abord, branchez une seule caméra sur le port USB auquel vous souhaitez qu’elle soit affectée. Ensuite, lancez cette commande :

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

    Vous pouvez généralement rechercher spécifiquement la chaîne “cam” pour affiner les résultats, car la plupart des caméras (mais pas toutes) sont signalées comme une caméra.

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

    Il y a beaucoup d’informations ici. L’ID est répertorié comme 045e:0779. Le premier numéro est l’ID du fournisseur et le second est l’ID du produit. Notez-les car vous en aurez besoin plus tard.

    2. Obtenez l’identifiant USB

    Vous avez également obtenu le chemin du périphérique vers la caméra : bus 3, périphérique 6. Il y a un dicton dans Linux qui dit que “tout est un fichier”, et en effet les périphériques USB sont décrits à udev comme un chemin de fichier commençant par /dev/bus/usb/ et se terminant par le bus (003 dans ce cas) et le dispositif (006 dans ce cas). Regardez les numéros de bus et d’appareil dans le lsusb sortir. Ils vous disent que cette caméra est située sur /dev/bus/usb/003/006.

    Vous pouvez utiliser le udevadm commande pour obtenir l’indicatif du noyau pour ce périphérique USB :

    $ sudo udevadm info
    --attribute-walk
    /dev/bus/usb/003/006 | grep "KERNEL="

       KERNEL=="3-6.2.1"

    L’identifiant USB du noyau dans cet exemple est 3-6.2.1. Notez l’identifiant de votre système car vous en aurez également besoin plus tard.

    3. Répétez l’opération pour chaque caméra

    Connectez l’autre appareil photo (ou les autres appareils photo, si vous en avez plus de deux) au port USB auquel vous souhaitez qu’il soit affecté. C’est différent que le port USB que vous avez utilisé pour l’autre appareil photo !

    Répétez le processus, en obtenant l’ID du fournisseur et du produit (si les caméras sont de la même marque et du même modèle, ils doivent être les mêmes que le premier) et l’identifiant USB du noyau.

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

       KERNEL=="1-6"

    Dans cet exemple, j’ai déterminé que mes caméras sont connectées à 1-6 et 3-6.2.1 (le premier est un port USB sur ma machine, l’autre est un concentrateur branché sur le moniteur branché sur ma machine , c’est pourquoi l’un est plus complexe que l’autre.)

    Écrire une règle udev

    Vous avez tout ce dont vous avez besoin, vous pouvez donc maintenant écrire une règle pour dire à udev de donner à chaque caméra un identifiant cohérent lorsqu’elle se trouve sur un port USB spécifique.

    Créez et ouvrez un fichier appelé /etc/udev/rules.d/50-camera.conf, et entrez ces deux règles, en utilisant les ID de fournisseur et de produit et les identificateurs de noyau appropriés pour votre propre système :

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

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

    Ces règles indiquent à udev que lorsqu’il trouve un périphérique correspondant à un fournisseur et à un ID de produit spécifiques à ces emplacements USB spécifiques, il doit créer un lien symbolique (parfois également appelé “alias”) nommé video100 et video101. Les liens symboliques sont pour la plupart arbitraires. Je leur donne des nombres élevés, ils sont donc faciles à repérer et parce que le nombre ne doit pas entrer en conflit avec les appareils existants. Si vous avez réellement plus de 101 caméras connectées à votre ordinateur, utilisez video200 et video201 juste pour être en sécurité (et entrer en contact ! J’aimerais en savoir plus sur cette projet).

    Redémarrer

    Redémarrez votre ordinateur. Vous pouvez laisser les caméras attachées pour le moment, mais cela n’a pas vraiment d’importance. Une fois qu’udev a chargé une règle, elle suit ces règles, qu’un périphérique ait été connecté pendant le démarrage ou qu’il soit branché plus tard.

    Beaucoup de gens disent que Linux n’a jamais besoin de redémarrer, mais udev charge ses règles pendant le démarrage, et en plus, vous voulez prouver que vos règles udev fonctionnent à travers les redémarrages.

    Une fois que votre ordinateur est de nouveau opérationnel, jetez un œil à /dev/video, où les caméras sont enregistrées :

    $ ls -1 /dev/video*
    /dev/video0
    /dev/video1
    /dev/video100
    /dev/video101
    /dev/video2
    /dev/video3

    Comme vous pouvez le voir, il y a des entrées à video100 et video101. Aujourd’hui, ce sont des liens symboliques vers /dev/video2 et /dev/video3, mais demain ils pourraient être des liens symboliques vers /dev/video1 et /dev/video2, ou toute autre combinaison basée sur le moment où Linux a détecté et leur a attribué un fichier.

    Vous pouvez cependant utiliser les liens symboliques dans OBS, de sorte que camLEFT soit toujours camLEFT et camRIGHT soit toujours camRIGHT.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code