2010-09-13 4 views
2

Я хочу открыть именованный канал с использованием Java и извлечь содержимое этого архива (rar/zip/etc ..) в именованный канал, а затем запустить Mplayer с расположением этого канала и воспроизвести фильм ,JAVA IPC для Windows

Я попытался открыть IPC в Java, используя этот проект 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

+0

Извините, я упустил из виду, что вы уже рассматривали сокеты. Вы пробовали что-то вроде 'mplayer -demuxer rawvideo -rawvideo w = WIDTH: h = ВЫСОТА http: // localhost: port/file.raw'? –

+0

это не работает для меня, я обновляю вопрос с тем, что я делаю сейчас – shay

4

Windows «Именованные трубы» абсолютно не связаны с именованными каналами POSIX, несмотря на их имена.

Именованные трубы Windows реализованы в конституции клиента/сервера. Сервер «создает» канал, а клиент связывается с созданным сервером. Если сервер «умирает», ... труба автоматически уничтожается, тогда как именованные каналы на основе файловой системы POSIX допускают промежуточное хранилище в файловой системе.

Именованные трубы Windows настолько эквивалентны использованию сокетов, что можно легко искушать использование сокетов.