2010-09-13 74 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命名管道与套接字使用等效,可以很容易地试图使用套接字。