2

Java を使用して名前付きパイプを開き、そのアーカイブ (rar / zip /etc..) の内容を名前付きパイプに抽出し、そのパイプの場所で Mplayer を実行してムービーを再生したいと考えています。

このプロジェクトCLIPCを使用して Java で IPC を開こうとしまし たが、私のコードは 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();
}
4

2 に答える 2

4

Windows の「名前付きパイプ」は、その名前にもかかわらず、POSIX 名前付きパイプとはまったく関係ありません。

Windows 名前付きパイプは、クライアント/サーバー構成で実装されます。サーバーはパイプを「作成」し、クライアントはサーバーを作成した連絡先になります。サーバーが「死んだ」場合... パイプは自動的に破棄されますが、ファイルシステムベースの POSIX 名前付きパイプはファイルシステム上の中間ストレージを許可します。

Windows の名前付きパイプは、ソケットの使用法と非常に同等であるため、代わりにソケットを使用したくなります。

于 2011-05-30T14:19:14.410 に答える
1

CLIPC が Win32 プラットフォーム (または Win32 自体) でパイプをどの程度サポートしているかはわかりません。ソケットを使用する時間を節約するために、ソケットは Java/Win32 でサポートされています。

于 2010-09-13T21:02:11.523 に答える