Envoi de vidéo à travers v4l2loopback ou shmdata#

Il peut arriver qu’une carte de capture ne soit pas compatible avec l’API de Video4Linux2. C’est le cas par exemple des cartes Blackmagic, qui distribue des pilotes propriétaires pour leurs cartes de capture. Celles-ci ne sont donc pas compatibles avec Splash directement, mais il est malgré tout possible de les utiliser. L’astuce est de transmettre les données à travers v4l2loopback ou shmdata, et de lire la carte de capture avec FFmpeg ou GStreamer.

Transmission à travers v4l2loopback#

Le but de v4l2loopback est de simuler un périphérique compatible V4L2 (similaire à une webcam ou à une carte de capture, qui est alors alimenté logiciellement. Tout d’abord vous devez l’installer et le charger dans votre ordinateur. Sur Ubuntu :

sudo apt install v4l2loopback-utils
sudo modprobe v4l2loopback

Un nouveau périphérique devrait apparaître en tant que /dev/videoX, X étant l’ID du périphérique. Considérons que vous n’avez aucun autre périphérique V4L2, le chemin devrait être /dev/video0.

Vous pouvez alors lancer un pipeline GStreamer (en considérant que celui-ci soit installé, ce qui est en dehors du contexte de cette documentation), et alimenter le périphérique avec un flux de test, ou un flux issu d’une carte de capture Blackmagic :

# Test stream
gst-launch-1.0 -v videotestsrc ! v4l2sink device=/dev/video0

# Capture from a Blackmagic card
gst-launch-1.0 -v decklinkvideosrc ! v4l2sink device=/dev/video0

Puis dans Splash vous pouvez créer un media V4L2 et capturer le flux depuis le périphérique /dev/video0

Transmission à travers shmdata#

Shmdata est une bibliothèque semblable à Syphon sur macOS, mais plus générique puisqu’elle peut transporter n’importe quel type de données. Tout d’abord vous devez vous assurer de l’avoir installé sur votre système et que Splash a été compilé avec son support. Téléchargez le ici et suivez le readme pour la compiler et l’installer. Puis recompilez et installez Splash tel que décrit dans la page Installation.

Vous pouvez alors lancer un pipeline GStreamer et envoyer le flux à travers Shmdata :

# Test stream
gst-launch-1.0 -v videotestsrc ! shmdatasink socket-path=/tmp/gst-feed

# Capture from a Blackmagic card
gst-launch-1.0 -v decklinkvideosrc ! shmdatasink socket-path=/tmp/gst-feed

Puis dans Splash vous pouvez créer un objet “video through shared memory” et spécifier /tmp/gst-feed comme chemin. Le flux vidéo devrait apparaître instantanément.