Problème avec Process.getInputStream()
Bonjour,
Après plusieurs jours de torture mentale, je me résous à venir vous casser un peu les pieds.
J'évolue sous Windows 7 64bits, avec un environnement Java 1.0.8_60 64bits.
Dans mon programme, je cherche à récupérer le flux d'un process représentant le lancement d'un programme exécutable externe.
En l'occurrence, je dois utiliser mencoder.exe. Pour ceux qui ne connaissent pas, il s'agit d'un des éléments de MPlayer, player multimédia opensource bien connu.
Je me sers de ce dernier pour produire une vidéo à partir d'un ensemble d'images Jpeg.
Voilà pour le contexte.
Et maintenant, le problème :
Lorsque je lance mencoder.exe à la main, en ligne de commande avec tous ses paramètres pour la production de la vidéo, tout se passe à la perfection. Je remarque que ce petit programme est verbeux par la présence de nombreuses lignes dans ma fenêtre DOS. Bref, ça m'arrange car cette verbosité va me permettre d'éffectuer un suivi de la tâche de création vidéo en examinant le flux des messages de la console.
Ce flux est récupérable en gros de deux manières, soit directement auprès d'une instance de la classe Process, par sa méthode getInputStream(), soit en utilisant ProcessBuilder afin de rediriger le flux vers notre programme.
Seulement voilà, quelle que soit la solution "découte" adoptée, ça ne fonctionne pas correctement.
Prenons un exemple avec 300 photos. Je demande à mencoder.exe d'en faire une vidéo mpeg4 en ligne de commande, pas de problème. Mais si j'exécute mencoder.exe avec les mêmes paramètres soit par Runtime.exec soit par ProcessBuilder.start, je récupère bien le flux de sortie console, et ce dernier contient bien la même chose que ce que je vois en ligne de commande, mais pour une raison qui me dépasse totalement, le flux s'interrompt après avoir en gros récupérer les 40 première lignes de verbosité ?!.... alors qu'avec 300 images, on obtient normalement un peu plus de 300 lignes.
J'ai alors tenté de lancer mencoder différemment, en créant un batch qui lance mencoder. Et dans ce cas, mon code lance le batch, il ne lance plus directement mencoder.exe, mais là aussi, le flux s'interrompt, et toujours au même endroit. J'ai alors remplacé mon lot de 300 photos par 300 autres, même résultat, avec toujours une interruption de flux sans erreur après réception du même nombre de lignes de verbosité...
Si quelqu'un a une idée ?
Dés que je serai rentré à la maison, j'ajouterai quelques pièces jointes pour montrer la différence de verbosité obtenue dans les deux cas, et le code employé.:D
Merci à vous...