David Schlachter

Visioconférences sur FreeBSD

En 2019 j'ai participé à deux vidéoconférences de travail, un chiffre qui a augmenté jusqu'à 15 heures par semaine en 2020. Faire ça sur FreeBSD, ça n'a pas été évident ! Je décris sur cette page de différentes approches aux visioconférences sur FreeBSD et les meilleures solutions que j'ai trouvées à date.

Résumé : La virtualisation et la compatibilité binaire avec Linux pourraient répondre à vos besoins, mais les clients Web sont la façon la plus facile de faire une vidéoconférence sur FreeBSD.

Matériel

J'utilise deux caméras (la webcam interne d'un Lenovo T480 et celle d'un Pixel 3a grâce à DroidCam), une carte son USB et un microphone à condensateur. La carte son est prise en charge en natif et la webcam interne fonctionne avec webcamd.

La qualité d'une caméra de téléphone est bien supérieure que celle de la webcam interne, mais Droidcam doit créer un dispositif de rebouclage vidéo pour l'utiliser. DroidCam utilise le module noyau v4l2loopback sur Linux qui n'a pas été porté à FreeBSD. Donc, même si DroidCam pour Linux est open-source, il est peu probable qu'il soit porté sans v4l2loopback (de même pour tout autre programme pour utiliser une caméra hors du système).

Virtualisation et la compatibilité binaire avec Linux

Bien qu'il n'y ait pas d'applications natives de visioconférence pour FreeBSD, vous pouvez utiliser les versions Linux (par exemple, Zoom, Teams et Skype) dans une machine virtuelle. L'entrée et la sortie audio fonctionnent dans VirtualBox et aussi très bien dans bhyve. Le principal défi est de rendre accessible votre webcam à la machine virtuelle.

VirtualBox sur FreeBSD est limité au renvoi de dispositifs USB 1.1. Si votre webcam est à faible bande passante, cela pourrait être suffisant. L'avantage serait de pouvoir renvoyer un seul dispositif à la machine virtuelle.

Si vous utilisez bhyve, vous pouvez renvoyer un contrôleur USB à la machine virtuelle par PCI passthrough. Ceci n'est possiblement pas faisable sur un portable, particulièrement si vous devez utiliser d'autres dispositifs USB sur l'hôte (par exemple, un clavier ou une souris). (Les portables n'ont typiquement qu'un seul contrôleur USB, alors tous les dispositifs USB seraient gérés par la machine virtuelle.) Cependant, si vous avez un ordinateur de bureau avec une carte USB PCI, le PCI Passthrough serait une bonne façon d'accéder à la webcam dans la machine virtuelle (mais la mise en veille pourrait être problématique).

Plutôt que d'accéder la webcam par USB, il est aussi possible d'utiliser un tube pour transférer la vidéo à un dispositif virtuel (avec v4l2loopback) sur Linux. De cette façon, vous pouvez utiliser votre webcam dans la machine virtuelle sans lui donner tous vos dispositifs USB. (Si vous utilisez bhyve, je rajoute que la résolution est limitée à 1920x1080 (voir man 8 bhyve), ce qui pourrait vous décevoir si vous utilisez un moniteur à haute résolution).

Si utiliser une machine virtuelle ne vous intéresse pas, j'ai réussi à faire marcher le client Linux de Zoom avec la compatibilité binaire avec Linux de FreeBSD. Il m'a fallu installer plusieurs fichiers de bibliothèque de CentOS 7 dans /compat/linux à partir des fichiers RPM pour pouvoir le faire. Cependant, même si je pouvais exécuter le client Zoom, me connecter et lancer une réunion, la caméra et le microphone ne marchaient pas. La compatibilité binaire aurait été une bonne solution si j'avais réussi à faire fonctionner la caméra, ce qui était possible avec Skype auparavant.

Les clients web

Plusieurs plateformes de visioconférence ont un client web qui fonctionne sur FreeBSD. Depuis l'implémentation de Audio Worklets dans la version 76, Firefox supporte le client web de Zoom. Les clients web de Skype et Microsoft Teams sont compatibles avec Chrome.

Pour utiliser un client web, il faut tout d'abord configurer la webcam. En bref : installez webcamd, v4l-utils et libv4l. Consultez man 8 webcamd et n'oubliez pas d'ajouter votre utilisateur au groupe webcamd. Vous pouvez tester la configuration avec pwcview. Avec la webcam configurée, je peux l'utiliser sans problème dans Firefox 79 et Chrome 83 installés avec pkg. Le microphone fonctionne dans Chrome sans configuration particulière.

Pour utiliser le microphone dans Firefox : théoriquement vous pouvez sélectionner parmi plusieurs systèmes de son, mais je n'ai pas réussi à utiliser que sndio dans firefox-79.0,1. Après avoir installé sndio avec pkg, il faut lancer son daemon tout simplement en exécutant la commande sndiod (l'option -d est disponible pour l'exécuter en avant-plan). Avec le service sndio démarré, le microphone marche bien dans Firefox.