Aller au contenu principal

Virtual Camera

Virtual Camera est un prototype qui consiste à ajouter la possibilité à Unreal Engine d'utiliser les caméras virtuelles.

Introduction

Lorsque nous avons travaillé sur le retrait de fond d'écran (Background Removal), nous avons dû utiliser un serveur RTSP pour diffuser le flux. Seulement, cette architecture est intéressante lorsque l'on veut faire du réseau mais dans le cadre d'un travail purement local, cela peut vite devenir plus gênant que productif.

Les caméras virtuelles permettent de faire du local, ce sont des caméras non réelles qui peuvent être modifiées pour afficher ce que l'on veut. Une caméra virtuelle est par exemple celle proposée par le logiciel OBS en l'installant.

Etapes

Comprendre le problème

Pour ne pas passer par le flux RTSP, il est nécessaire d'utiliser les caméras virtuelles. On peut manuellement leur envoyer un flux vidéo et elles agissent comme une caméra réelle.

En installant OBS, ils installent par défaut une caméra virtuelle, qui peut être exploitée par exemple avec Python et pyvirtualcam. Cela fonctionne assez bien.

Cependant, le problème majeur de ce prototype est la compatibilité des caméras virtuelles et Unreal Engine. En effet, Unreal Engine ne supporte pas les caméras virtuelles. Avec ce problème technique, il est nécessaire de trouver une solution qui pourrait permettre à Unreal Engine d'ajouter les caméras virtuelles.

Plugin Unreal Engine

Malgré l'absence de compatibilité avec Unreal Engine, il existe un plugin qui permet de lire les sorties des caméras virtuelles : https://github.com/Temaran/UE4Webcamera.

Malheureusement, le plugin a une version antérieure à la version que nous avons utilisée durant nos développements ce qui fait qu'il y a un immense problème de compatibilité. Le plugin est en 4.10 et nous avons travaillé en 4.27 / 5.

Une bonne partie des fonctionnalités n'est plus à jour ou tout simplement supprimée. Il a donc fallu que nous tentions de mettre à jour le plugin nous-mêmes.

Finalement, le plugin a été mis à jour et est disponible à cette adresse : https://gitlab.intech.lu/intechvr/plugin-virtual-camera-ue.

Compatibilité des caméras virtuelles

L'ultime étape est bien entendu de tester ce plugin afin de bien récupérer le flux vidéo de la caméra virtuelle OBS modifiée. Mais nous avons rencontré un autre problème technique : celui de l'incompatibilité de certaines caméras virtuelles et de l'API Windows. Le plugin utilise les fonctionnalités de Windows pour fonctionner, ce qui le rend théoriquement pas compatible avec d'autres systèmes d'exploitation et surtout si la caméra virtuelle n'est pas reconnue par Windows alors elle ne peut pas fonctionner.

Dans notre cas nous avons eu le deuxième souci, la caméra proposée par OBS n'est pas compatible avec l'API Windows, il est donc impossible de récupérer son flux à cause d'un filtrage fait par OBS lui-même lors de la création de la caméra virtuelle, ce qui nécessiterait de modifier le code source d'OBS.

Nous avons donc appris que certaines caméras virtuelles ne fonctionnaient pas toutes de la même façon. Cette différence fait que certaines caméras virtuelles ne peuvent tout simplement pas fonctionner avec le plugin.

On a dû trouver d'autres caméras virtuelles pour faire fonctionner le plugin correctement. Heureusement, il existe des plugins sur OBS de caméras virtuelles : https://obsproject.com/forum/resources/obs-virtualcam.949/.

Nous avons utilisé le lien ci-dessus. Nous avons crée une nouvelle caméra virtuelle, différente de la caméra proposée par défaut par OBS.

Bibliothèque Python

La bibliothèque Python pyvirtualcam n'est pas faite pour lire d'autres caméras que celle d'OBS de base ce qui nous a encore conduit à une impasse technique. On a tenté de modifier la bibliothèque Python sans réussite, nous avons tout simplement abandonné cette idée et nous sommes plutôt partis sur une architecture un peu bricolage.

Pour faire fonctionner le plugin, nous avons utilisé la caméra de base d'OBS avec le flux modifié et une seconde caméra virtuelle utilisée par le plugin qui récupère le flux de la caméra virtuelle de base. Cela fonctionne mais ce n'est pas ce que nous avions prévu initialement.

Nous avons testé plusieurs autres caméras virtuelles comme SnapCamera ou Akvirtualcamera avec plus ou moins de succès mais aucune ne peut être modifiée de la même façon que l'on peut avec OBS.

Documentation technique