Vous n'êtes pas identifié.
Bonjour tout le monde,
alors voila mon souci. Je code un programme de traitement vidéo et j'utilise mplayer pour la lecture ensuite. Pour l'instant je n'ai qu'un fichier qui fait l'intermédiaire. Ce que j'aimerais c'est récupérer le stdout de ma premiere partie de programme et le transmettre à mplayer, sachant que j'utilise mplayer en mode slave.
Je ne sais pas comment lui envoyer le bytesource...
Merci de votre aide.
Hors ligne
utilise le mode slave à travers un fichier fifo.. puis tu envoies les commandes avec echo "command" > ./le_fifo
pour passer un fifo je te laisse regarder le manpage sur le paramètre -input, et ainsi tu pourras faire du pipe avec le stdin d'MPlayer
Hors ligne
humm.. meme si c du HD?? ca va pas faire lourd??
Hors ligne
C'est toi qui veux passer par un pipe, c'est ce que tu dis dans le sujet: "Flux vidéo en stdin de mplayer"
En pratique le pipe est utile quand tu veux rediriger un flux de wget par exemple.. ou alors en même temps que la décompression d'un fichier.. y a d'autres raisons bien sûr.. mais si tu peux éviter le pipe.. alors oui.. évite le.. maintenant si tu veux travailler avec une bibliothèque pour pouvoir garder le contrôle sur les streams, dans ce cas attaque directement sur FFmpeg (libavformat/libavcodec). Ou alors utilises une lib plus haut niveau tel que libvlc.. elle a un plugin d'entrée basé sur mmap.
Hors ligne
oui c'est clair c'est ce que j'ai dit mais je cherche les meilleures solutions.
si tu veux j'ai ca: outSource = new StreamSource(System.out, StreamSource.W_MODE, false);
qui est le stdout de mon programme de decodage et je veux le transmettre au stdin de mplayer.
Tu me conseilles koi?
Hors ligne
Si tu veux vraiment transmettre à MPlayer, alors tu fork() mplayer (aucune idée si le fork est possible en Java.. si oui, ça sera "POSIX dependent"), puis tu fais du write() dans le pipe créé avant le fork() (en fait tu n'envoies pas dans le stdout de ton app Java, mais tu écris directement dans le pipe du fork; dit autrement, t'écris droit dans le stdin d'MPlayer). En C c'est simple, mais en Java j'ai des doutes. Ou alors tu dois passer par une lib non portable.
Maintenant si tu veux la manière shell.. alors t'oublies le fork, et tu fais un pipe '|' en shell entre ton app et mplayer.
app_java | mplayer -cache 8192 -
C'est sûrement la solution la moins élégante, mais la plus simple (rapide).
PS: et la meilleur solution c'est FFmpeg.
Hors ligne
j'aimerais tellement utiliser la solution ke tu me dis! mais en fait... je vais t'expliquer plus en detail...
le coté mplayer c'est une application java que j'ai codé avec une interface et qui utilise mplayer en backend slave.
donc j'utilise un process pour lancer la commande mplayer -slave ....
de l'autre coté j'ai une application qui décode un flux et le balance avec outSource = new StreamSource(System.out, StreamSource.W_MODE, false);
qu'en dis tu? :p impossible en java?
Hors ligne
A creuser.. essaie avec des threads Java : http://www-gtr.iutv.univ-paris13.fr/Cou … tth_sEc3.2
Hors ligne
oki... ca me règle l'export ca
me reste à trouver comment je peux insérer ce pipedreader dans la commande mplayer...
Hors ligne
re! je reviens dans ce projet que j'avais laissé de coté, j'étais sur un autre!! j'ai essayé les threads mais ca ne fait que compliquer les choses... je me suis dit que le fork peut être utile mais le souci c'est que pendant l'exécution de mplayer je dois pouvoir accéder à l'instance de mon appli java... tu crois que c'est possible avec le fork?
merci
Hors ligne