2013-09-10 2 views
0

У меня есть следующие работает с консоли:Отправка видео через NC через трубу в Java

COMPUTER LINUX: nc -l -p 5012 | mplayer -fps 31 -cache 1024 - 
RPI: raspivid -t 2000 -o - | nc 192.168.0.5 5012 

Но если я попытаюсь обернуть его в Java не работает. Она не крах, она проходит через до конца программы просто ничего не происходит:

public void video() { 
    try { 
     String[] cmds = {"/bin/sh", "-c", "nc -l -u 5012 | mplayer -fps 31 -cache 1024 -"}; 
     Process videoProcess = Runtime.getRuntime().exec(cmds); 
     adder.streamVideo(2000); 
    catch (IOException e) { 
    System.out.println("IOE"); 
    e.printStackTrace(); 
    } 
} 

где adder.streamVideo() вызывает код RPI.

public boolean streamVideo(int streamDuration) { 
    String[] cmd = {"/bin/sh", "-c", 
      "raspivid -t " + streamDuration + " -o - | nc 192.168.0.5 5012"}; 
    try { 
     Runtime.getRuntime().exec(cmd); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     System.out.println("Video streaming failed"); 
     e.printStackTrace(); 
    } 
    return true; 
} 

Любые предложения?

ответ

0

exec() не вызывает оболочку, поэтому все проворные вещи, такие как трубы | и перенаправление выходных/входных сигналов > and < не будет работать. но ваша проблема разрешима, см., например, https://stackoverflow.com/a/5928316/2536029

+0

Я изменил код, поскольку вы предложили из-за того, что exec() не вызвал оболочку, а вместо этого поместил ее в скрипт, он все еще не работает - приведенный выше код отражает сделанные изменения – cxzp

+0

ok, теперь уточните, как -it-does-not-work part – mnagel

+0

ничего не сработает, он просто ничего не происходит, я знаю, что видео-код в порядке, поскольку я запустил этот код на конце rpi, и он работает из оболочки, поэтому я не уверен, почему он все еще не делает Работа – cxzp

Смежные вопросы