Forum Programmation.shell gst-launch, v4l2loopback et autres joyeusetés

Posté par  . Licence CC By‑SA.
Étiquettes :
3
9
avr.
2020

Bonjour,

Pour le cadre général : je travaille sur un produit (fonctionnant sous Linux) qui fait de la reconnaissance vidéo (basée sur openCV). Il utilise en temps normal une webcam, et pour des tests automatisés, je voudrais envoyer des vidéos de tests, que le produit verrait à travers une fausse webcam via le module v4l2loopback.

J'arrive à faire fonctionner v4l2loopback via un stream de test. Ceci fonctionne :

gst-launch-1.0 -v videotestsrc pattern=ball ! v4l2sink device=/dev/video0

Je force les dimensions et le format du stream, ceci fonctionne toujours (je me prépare pour la suite) :

gst-launch-1.0 -v videotestsrc pattern=ball ! decodebin ! videoconvert ! videoscale ! "video/x-raw,format=YUY2,width=320,height=240" ! v4l2sink device=/dev/video0

Maintenant je voudrais envoyer une video de test, et là je galère. Je change simplement la source avec un fichier :

gst-launch-1.0 -v filesrc location=test.avi ! avidemux ! decodebin ! videoconvert ! videoscale ! "video/x-raw,format=YUY2,width=320,height=240" ! v4l2sink device=/dev/video0

J'obtiens l'erreur suivante :

ERREUR : de l’élément /GstPipeline:pipeline0/GstAviDemux:avidemux0 : Internal data stream error.
Information de débogage supplémentaire :
../gst-plugins-good/gst/avi/gstavidemux.c(5780): gst_avi_demux_loop (): /GstPipeline:pipeline0/GstAviDemux:avidemux0:
streaming stopped, reason not-negotiated (-4)
ERREUR : le pipeline refuse de passer en phase de préparation.
Définition du pipeline à NULL…
Libération du pipeline…

Pourtant le pipeline a l'air correct, car si je modifie juste le sink final pour un simple affichage, ça marche :

gst-launch-1.0 -v filesrc location=test.avi ! avidemux ! decodebin ! videoconvert ! videoscale ! "video/x-raw,format=YUY2,width=320,height=240" ! autovideosink

Quelque-chose de curieux tout de même avec cette dernière commande, le message qui arrive régulièrement dans la console :

BALISE TROUVÉE  : découverte par l’élément « autovideosink0-actual-sink-xvimage ».
    codec vidéo: MPEG-4 Video (Simple Profile)
          débit: 2499979
  débit minimum: 188544
  débit maximum: 7636416

… comme si le decodebin ne servait à rien, ce qui expliquerait alors que le flux ne peut pas aller dans v4l2loopback.

Une idée ?

Merci !

  • # avidemux

    Posté par  . Évalué à 4.

    Bon, sans trop avoir compris pourquoi, il semble que avidemux ne sert à rien en fait.

    Ceci fonctionne :

    gst-launch-1.0 -v filesrc location=~/test.avi ! decodebin ! videoconvert ! videoscale ! "video/x-raw,format=YUY2,width=320,height=240" ! v4l2sink device=/dev/video0

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: avidemux

      Posté par  . Évalué à 2.

      Je rajoute : selon les vidéos de test, il vaut mieux aussi rajouter videorate. En effet, v4l2loopback n'accepte que des framerate entiers, et parfois la source a un framerate fractionnaire.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.