[JAVA] Processus et exécution

Enzyme59 -  
 Utilisateur anonyme -
Bonjour,

je travaille actuellement sur un petit programme web (en Java Servlet et sur Apache Tomcat) destiné à convertir des vidéos.

L'utilisateur est au début sur un formulaire HTML qui lui demande le chemin d'accès au fichier à convertir, ainsi que le(s) format(s) désiré(s).

N'étant pas un expert en codecs, je me contente de créer un nouveau processus en exécutant le moteur de conversion bien connu ffmpeg, au moyen d'une ligne du type :

Process proc = Runtime.getRuntime().exec("ffmpeg -i "+input+" -f "+format+" "+output);

...par exemple. (je schématise)

Mon principal souci est que le traitement de la vidéo ne démarre pas si je ne lance pas un System.exit(0), ce qui a pour effet de fermer Tomcat, et m'empêche de rediriger l'utilisateur vers une autre page. De plus, ce programme ayant pour objectif final d'être mis en ligne, je me vois mal fermer le serveur web pour chaque utilisateur ! Aussi, j'aimerais savoir si quelqu'un ici aurait une solution pour que le processus de ffmpeg s'exécute correctement tout en évitant de fermer la JVM (et donc Tomcat). J'ai cherché sur la Javadoc et un peu partout sur le web, sans résultat.

Deuxième problème : si je lance plusieurs processus consécutifs, ffmpeg plante, et seul le premier s'exécute. Je pensais au départ que c'était une cause supplémentaire de mon premier problème, mais en vérité, si j'exécute une seule ligne de commande comme la suivante :

ffmpeg -i blabla.avi -f flv blabla.flv -f ipod blabla.mp4

...par exemple (toujours), que ce soit dans mon programme ou directement dans la console, le bug se produit à l'identique (dans mon cas, il déclenche le "débogueur" de Visual Studio). Manque de mémoire ? SI quelqu'un avait une idée pour ça aussi...

En attente de vos réponses, je vous remercie d'ores et déjà de m'avoir lu. Cordialement,

Enzyme59
A voir également:

7 réponses

Enzyme59
 
Un petit up pour préciser que la conversion multiple fonctionne en réalité très bien, comme un idiot j'essayais à chaque fois avec le format iPod, et c'est ce dernier qui provoque un bug...
0
Utilisateur anonyme
 
Pourquoi n'utilises-tu pas la classe Thread ? Ca permettrait de lancer ta conversion dans un autre processus.
0
Enzyme59
 
Hum, ça ne m'a pas l'air d'une mauvaise idée, mais je ne visualise pas très bien comment faire... créer une classe héritant de Thread et mettre dans le run() mon Process proc = ... ?
0
Enzyme59
 
Je viens de le faire, et le souci reste le même. Peut-être parlais-tu d'une autre utilisation du Thread ? Pourrais-tu m'en dire plus à ce sujet ?

Désolé pour les doubles posts au fait...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Bin non :-( j'aurai fait ce que tu as fait. Déclarer une classe héritant de Thread qui ferait la conversion dans la méthode run et qui préviendrait la classe qui l'a appelée lorsqu'elle a terminé
0
Enzyme59
 
Le truc c'est que pour faire ma conversion je suis obligé d'avoir recours à un objet Process, que je le mette dans un Thread ou non. Et comme le processus créé par cet objet ne veut apparemment pas démarrer tant que la JVM continue de tourner...
0
Utilisateur anonyme
 
A mon avis ton problème vient en effet du Process. Il doit attendre la terminaison de ton premier processus avant de démarrer. Je ne vois pas comment tu vas t'en sortir en utilisant Process comme classe :-(
0