2010-09-13 55 views
2

我想用Java打開一個命名管道並將該存檔的內容(rar/zip/etc ..)提取到一個命名管道,然後用該管道的位置運行Mplayer並播放該電影。Windows上的JAVA IPC

我試圖用這個項目在Java中打開IPC CLIPC 但是,我的代碼在fifo.openWriter()中凍結;線

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

我試過了,在Java中創建一個小型服務器套接字等待連接 併發送視頻文件內容作爲原始數據, 但我不知道該怎麼告訴MPlayer獲得原始數據通過網絡。

我想用一管,因爲我認爲它 沒有物理和大型文件處理的最佳解決方案,其揮發和最靈活的

這就是我現在想,使用套接字 但Java服務器套接字接受連接 上的mplayer超時失效後才


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(); 
} 

回答

1

我不知道CLIPC在Win32平臺(或Win32本身)上支持的管道有多好。爲了節省您的時間使用套接字,它們在Java/Win32上受支持。

+0

我記住了,因爲我看到了,不知道如果mplayer可以從套接字採取原始數據,他需要一個熟悉的協議,通過網絡獲取數據 – shay 2010-09-13 21:14:04

+0

對不起,我忽略了你已經考慮過套接字。你試過類似'mplayer -demuxer rawvideo -rawvideo w = WIDTH:h = HEIGHT http:// localhost:port/file.raw'嗎? – 2010-09-14 04:53:26

+0

這不適合我,我更新與我現在正在做的事情的問題 – shay 2010-09-14 20:25:21

4

Windows「命名管道」與POSIX命名管道絕對不相關,儘管它們的名稱不同。

Windows命名管道是在客戶端/服務器構造中實現的。服務器「創建」創建服務器的管道和客戶端聯繫人。如果服務器「死亡」,......管道自動銷燬,而基於文件系統的POSIX命名管道允許在文件系統上進行中間存儲。

Windows命名管道與套接字使用等效,可以很容易地試圖使用套接字。