2010-09-13 8 views
2

Je veux ouvrir un tube nommé en utilisant Java et extraire le contenu de cette archive (rar/zip/etc ..) dans un tube nommé, puis lancer Mplayer avec l'emplacement de ce tube et lire le film .JAVA IPC sur Windows

J'ai essayé d'ouvrir IPC en Java en utilisant ce projet CLIPC mais, mon code est en train de geler dans fifo.openWriter(); ligne

FIFO fifo = new FIFO("jtpc_fifo"); 
fifo.create(); 
fifo.openWriter(); 

j'ai essayé, de créer un petit serveur Socket en java qui attend une connexion et envoyer le contenu du fichier vidéo en tant que données brutes, mais je ne sais pas comment dire mplayer pour obtenir des données brutes sur le réseau.

Je veux utiliser une pipe, parce que je pense que la meilleure solution aucun fichier physique et pour être manipulés, son volatile et la plus souple

C'est ce que je suis en train maintenant, d'utiliser des prises mais la socket serveur java accepte la connexion seulement après mplayer échoue sur délai


mplayer http://localhost:5555/file.raw 

try{ 


    String file = "D:\\tmp\\lie.to.me.201.the.core.of.it-sitv.mkv"; 

    ServerSocket socket = new ServerSocket(5555); 
    System.out.println("UnrarTest.main() START"); 
    Socket s = socket.accept(); 
    System.out.println("UnrarTest.main() ACCEPT"); 


    final InputStream sin = s.getInputStream(); 
    new Thread(){ 
    public void run(){ 
     try{ 
     while(true){ 
      if(sin.available() > 0){ 
      int read = sin.read(); 
      System.out.println((char)read); 
      } 
     } 
     }catch(Exception ee){ 
     ee.printStackTrace(); 
     } 
    } 
    }.start(); 


    final OutputStream sout = s.getOutputStream(); 
    final FileInputStream fin = new FileInputStream(file); 
    new Thread(){ 
    public void run(){ 
     try{ 
     while(fin.available() > 0){ 
      int in = fin.read(); 
      System.err.println(in); 
      sout.write(in); 
     } 
     }catch(Exception ee){ 
     ee.printStackTrace(); 
     } 

    } 
    }.start(); 

}catch(Exception e){ 
    e.printStackTrace(); 
} 

Répondre

1

Je ne suis pas sûr à quel point les tuyaux sont pris en charge par CLIPC sur la plate-forme Win32 (ou Win32 lui-même, d'ailleurs). Pour économiser votre temps, utilisez les sockets, ils sont supportés sur Java/Win32.

+0

Je prends cela à l'esprit, je ne sais pas si mplayer peut prendre des données brutes d'une socket, il a besoin d'un protocole familier pour obtenir des données sur le réseau – shay

+0

Désolé, j'ai oublié que vous avez déjà considéré les sockets. Avez-vous essayé quelque chose comme 'mplayer -demuxer rawvideo -rawvideo w = LARGEUR: h = HAUTEUR http: // localhost: port/fichier.raw'? –

+0

cela ne fonctionne pas pour moi, je mets à jour la question avec ce que je fais maintenant – shay

4

Windows "Named Pipes" ne sont absolument pas liés aux tubes nommés POSIX, malgré leurs noms.

Windows Named Pipes sont implémentés dans une constitution client/serveur. Le serveur "crée" le canal et les contacts clients qui ont créé le serveur. Si le serveur "meurt", ... le tube est automatiquement détruit, alors que les tubes nommés POSIX basés sur le système de fichiers permettent un stockage intermédiaire sur le système de fichiers. Les canaux nommés Windows sont tellement équivalents à l'utilisation des sockets que l'on pourrait facilement être tenté d'utiliser des sockets à la place.