0

我从控制台有以下工作:

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

有什么建议么?

4

1 回答 1

0

exec()不会召唤外壳,因此管道|和输出/输入重定向等所有外壳的东西> and <都不起作用。但您的问题是可以解决的,请参阅例如https://stackoverflow.com/a/5928316/2536029

于 2013-09-10T13:45:50.403 回答