Salut,

J'utilise vlc en ligne de commande afin de transformer une image en flux vidéo. J'utilise cette commande :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.