[Application externe] communication
Salut,
J'utilise vlc en ligne de commande afin de transformer une image en flux vidéo. J'utilise cette commande :
Code:
1 2
|
vlc -I dummy fake: vlc:quit --sout=\"#transcode:std\" --fake-duration=40 --fake-deinterlace --fake-deinterlace-module=blend --sout-transcode-vcodec=... --sout-ffmpeg-qmin=3 --sout-ffmpeg-qmax=3 --sout-standard-access=file --sout-standard-mux=raw --sout-standard-dst=/... --fake-width=1024 --fake-height=576 --fake-aspect-ratio=16:9 --fake-file=... |
Cette commande fonctionne très bien et je souhaiterais l'utiliser via java.
J'utilise donc ceci :
Code:
1 2 3 4 5 6 7 8
|
String command = "...";
Runtime runtime = Runtime.getRuntime();
String[] args = { "/bin/sh", "-c", command };
final Process exec = runtime.exec(args); |
Ce code fonctionne aussi très bien. L'inconvénient de cette méthode est qu'elle prend un fichier en entrée (avec l'option --fake-file )
J'aimerai donc que plutot que de prendre un fichier en entrée elle prenne un flux. J'ai donc fait ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
String command = "..."; // la meme commande mais sans l'option --fake-file
Runtime runtime = Runtime.getRuntime();
String[] args = { "/bin/sh", "-c", command };
final Process exec = runtime.exec(args);
FileInputStream fis = new FileInputStream(new file("image.png");
OutputStream os = exec.getOutputStream();
byte buffer[] = new byte[8192];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
} |
Mais elle ne fonctionne pas. Sur le flux d'erreur je peux lire qu'il manque l'option --fake-file...
Savez vous comment communiquer avec la commande grâce au flux outputstream ?
Merci.