Salut à tous,
J'essaye de récupérer la video d'un sketch processing sous UbuntuStudio pour l'envoyer dans LPMT qui est un logiciel de projection mapping.
A l'aide d'un autre programme, v4l2loopback, il y a moyen de récupérer le flux d'un pipeline à l'aide de commande de ce type :
yuv4mpeg_to_v4l2 /dev/video1 < /tmp/pipe
Je ai seulement trouvé le moyen de récupérer un flux dans Processing à l'aide de Gstreamer, pas de l'envoyer.
Est-ce que je dois abandonner cette piste ?
Hors ligne
Je suis pas du tout au fait avec processing mais pourquoi envoyer la sortie de ton vloopback dans un pipe ?
LPMT semble d'après ce que j'ai rapidement vu sur leur site pouvoir prendre des caméras donc un périphérique v4l2 (la sortie de ton /dev/video1) .
EDIT :
En fait en te relisant je comprends Processing vers un "Pipe" vers un périf. v4l2loopback vers LPMT . .
Là pour processing je sais pas trop mais ce que je sais c'est que j'ai essayé des manip. du genre .
gephex vers un "fifo" (named-pipe) >> sortie fifo vers un vloopback >>> vloopback vers Puredata .
Un des soucis c'est que le "pipe" est bloquant : il n'écrit que si le client est lancé en lecture et souvent réciproquement .
çà marche impec avec 2 instances de gephex celà dit .
Dernière modification par sakramh (2013-05-07 15:40:59)
Hors ligne
Si il y a moyen de ne pas pas passer par v4l2loopback, c'est encore mieux.
Tu penses qu'il y a moyen en ligne de commande de sortir un sketch processing vers un /dev/video1 ?
Hors ligne
Ben çà dépend du logiciel récepteur ... le plus simple étant un FIFO avec la restriction qu'il faut que le tuyau soit ouvert des 2 cotés .
sinon Gstreamer (avec ou sans v4l2 ) si le soft récepteur le permet .
J'ai un peu regardé hier du coté de MJPEG-Tools (basé sur des tuyaux aussi ) mais j'ai pas tout compris encore .
(je suis sur ce genre de problématique aussi : comment faire communiquer plusieurs softs de traitement entre eux sans monter une usine à gaz et en utilisant les outils existant (pas avoir à coder en dur soi même) . (j'arrive tout juste à hacker 2/3 lignes de bash ou c/c++ ) .
Là hier il m'est venu (parce que çà doit pas être bien compliqué ) écrire un code tel que :
Dernière modification par sakramh (2013-05-08 11:09:02)
Hors ligne
Ok merci
J'ai un peu aussi regarder du côté de processing pour enregistrer une image, l'ouvrir dans LPMT puis l'écraser à chaque nouvelle frame de Processing mais LPMT ne rafraichit pas les images donc le mieux pour moi serait une pipeline.
J'essaye ce soir et je te tiens au courant.
Hors ligne
tu as essayé d'écrire dans un "FIFO" ?
tu lui donne un nom trompeur genre myfim.mpeg de façon que LPMT ne fasse pas trop la gueule .
Lancer le client lecteur(ici lmpt) avant l'écrivain .
Mais bien sûr cette fois envoyer un stream uyv4mpeg2 .
Dernière modification par sakramh (2013-05-09 15:55:10)
Hors ligne
citation :
Lancer le client lecteur(ici lmpt) avant l'écrivain .
je rectifie
je viens de faire l'essai suivant (enfin concluant) :
1- lancement du soft qui génére un stream yuv4mpeg (chez moi Gephex) vers un FIFO (namedpipe) appelé movie.mpeg
2- vlc >> ouvrir un fichier >> movie.mpeg
3- çà marche !!!
4- ne PAS fermer vlc avant le soft qui génère sinon il reçoit un SIGPIPE qui le bloque .
5- arrêter ou mettre en pause etc ... le générateur de stream avant donc ... en ce cas le lecteur reste sur la dernière image reçue et attends sagement que çà revienne .
6- essai concluant avec VLC, serait étonnant que pas avec un soft du genre . En ce cas engueuler les développeurs .
Dernière modification par sakramh (2013-05-08 15:30:08)
Hors ligne
EDIT AGAIN !!!
mouais çà marche pas à tous les coups en fait . (çà m'agace !!!)
en tout cas pas avec Mplayer .
Il doit y avoir un ordre précis à respecter mais j'arrive pas à trouver lequel .
Dernière modification par sakramh (2013-05-08 15:47:55)
Hors ligne
Salut,
J'ai essayé pas mal de truc mais j'ai toujours la même erreure dans LPMT :
OF: OF_LOG_WARNING: GStreamer: cannot query time duration
** (LPMT:6352): WARNING **: gstvideo: failed to get caps of pad sink:sink
OF: OF_LOG_ERROR: GStreamer: cannot query width and height
deleting video player
après avoir créer une pipeline avec la comande suivante :
v4l2loopback-ctl set-caps "video/x-raw-yuv, width=200, height=200" /dev/video1
suivie de :
./mysketch >> /dev/video1
Il doit rester le truc avec le FIFO et la création du fichier mais je ne sais pas comment faire.
Hors ligne
man mkfifo #chezmoi mkfifo /home/moi/film.mpeg
c'est un fichier vide qui fera toujours 0 octet . en fait il existe sur le système de fichier (ici mon disque) mais virtuellement .
c'est dans le kernel qu'il existe vraiment .
çà fonctionne mais c'est bloquant si un des cotés n'est pas ouvert ou se ferme .
Je cherche aussi une solution avec gstreamer . Je pense qu'il ne faut pas utiliser v4l2-ctl ni v4l2vloopback-ctl .
Sauf à maîtriser entièrement .
Parce que çà fixe les propriétés du /dev/videox pendant sa durée de vie .
Et que donc le pipeline Gstreamer ne fonctionnera pas si ses arguments ne sont pas exactement les mêmes .
Il m'a semblé qu'en lançant gst-launch ....! mes pipes ! et v4l2src ... ! mes pipes !.... cela initialise le vloopback avec les bon paramètres de size fps format .
Sinon on peut aussi créer un VRAI fichier /home/moi/movie.mpeg dans lequel on écrit vraiment .
çà çà roule . Mais le souci c'est que ce fichier grossit très vite avec un stream yuv4meg en 640x480 .
J'ai tenté de l'effacer (le vider) périodiquement avec un simple > movie.mpeg mais en ce cas le lecteur signale qu'il n'y a plus les headers .
Sinon si on laisse tourner sur un gros GROS GROS disque çà peut être une solution une heure ou deux .
j'imagine que tu as vu çà : https://github.com/umlaeute/gst-v4l2loopback
reste à trouver le moyen d'envoyer processing vers Gstreamer .
Dernière modification par sakramh (2013-05-08 23:35:06)
Hors ligne
----exemples relevés sur http://github.com/umlaeute/v4l2loopback/wiki----
citation :
--- FORCING FPS ---
$ v4l2loopback-ctl set-fps 25 /dev/video0
or
$ echo '@100' | sudo tee /sys/devices/virtual/video4linux/video0/format
--- FORCING A GSTREAMER (0.10) CAPS ---
$ v4l2loopback-ctl set-caps "video/x-raw-yuv, width=640, height=480" /dev/video0
--- SETTING STREAM TIMEOUT ---
$ v4l2-ctl -d /dev/video0 -c timeout=3000
(will output null frames by default)
$ v4l2loopback-ctl set-timeout-image service-unavailable.png /dev/video0
this currently requires GStreamer 0.10 installed
---- d'autre part----
j'ai compilé https://github.com/umlaeute/gst-v4l2loopback
( faire make install en tant que simple user et non root, çà sera installé dans /home/.gstreamer-0.10/plugins et reconnu par gst-inspect )
du coup une commande du genre :
gst-launch videotestsrc ! videoscale ! video/x-raw-yuv,width=640,height=480 ! v4l2loopback device=/dev/video0
donne un résultat bien mieux lisible dans par exemple Gem ou VLC (pas de grosses barres vertes non décodées)
que la commande habituelle du genre:
gst-launch videotestsrc ! videoscale ! video/x-raw-yuv,width=640,height=480 ! v4l2sink device=/dev/video0
décidément va falloir ouvrir une rubrique GStreamer
OF: OF_LOG_WARNING: GStreamer: cannot query time duration
me laisse penser que LMPT s'attend à un fichier vidéo et non à un stream
Dernière modification par sakramh (2013-05-09 16:01:25)
Hors ligne
Ben mon gars !
grâce à toi et au développeur de v4l2loopback , gros succès ce jour !
J'étais intrigué par ta commande yuv4meg_to_v4l2 < file . Je voyais vraiment pas de quel soft elle était tirée . J'avais cherché un peu partout (mjpeg-tools etc..)
Et puis en fouinant les sources de https://github.com/umlaeute/ je tombe dessus et tout s'éclaire .
Je compile le machin et je lance .
Donc si LMPT sait lire un périphérique V4L2 et Processing écrire dans un FIFO çà doit rouler .
note : juste un petit "loup" . Pas réussi à construire le module v4l2loopback sur le kernel 3.8 rt . Obligé de rester sur le 3.2
et çà m'a permis de réviser mes notions de redirection, pipe sur Unix aussi .
et aussi cela s'affiche aussi avec un :
gst-launch v4l2src device=/dev/video0 ! xvimagesink
Dernière modification par sakramh (2013-05-11 11:28:24)
Hors ligne
Tu veux parler de ce bug :
https://bugs.launchpad.net/ubuntu/+sour … ug/1112644
Tu sais si il vont le corriger rapidement ? C'est un problème du kernel ou de v4l2loopback ?
Hors ligne
J'ai pas fouillé . Mais c'est bien le même bug . Affecte le kernel 3.8 x86-64 Debian aussi . J'ai la chance d'avoir gardé le 3.2 sur lequel le module s'est bien construit . Quand à la correction ... Debian va attendre celle Ubuntu et réciproquement . Y'a même des chances que çà soit Ubuntu qui corrige en premier vu que le bug affecte les utilisateurs de "Skype" .
Tu en en es où , toi ?
C'est que du bonheur ce petit utilitaire yuv4mpeg_to_v4l2 . Pas de latence, pas de bouffe ressources, et surtout pas de blocage du fifo quand un des 2 cotés est fermé .
Dernière modification par sakramh (2013-05-13 18:18:09)
Hors ligne
Je suis passé sur ubuntuStudio 13.04 en effaçant ma 12.04,
donc la pour le moment j'attends que que le bug soit résolu.
Mais ça ne fait rien, le principale c'est que je sais que ça fonctionne
je peux envisager de concevoir mon projet avec ces outils.
En attendant il y a beaucoup d'autres choses à régler avant que ce ne soit fini.
Hors ligne
Pages: 1 2