Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java代码在Linux服务器上运行VLC流?_Java_Linux_Shell_Streaming_Vlc - Fatal编程技术网

如何使用Java代码在Linux服务器上运行VLC流?

如何使用Java代码在Linux服务器上运行VLC流?,java,linux,shell,streaming,vlc,Java,Linux,Shell,Streaming,Vlc,我试图在Debian服务器上从Java代码运行vlc流。 下面示例中给出的简单命令在java代码和终端中都可以正常工作 String cmd = "/Applications/ video.avi" Process p = Runtime.getRuntime().exec(cmd); 但我尝试使用多个选项运行更高级的命令” 这是我的主要课程: NewCamera obj = new NewCamera(); ... String mobile_command = "vlc -d -vvv "

我试图在Debian服务器上从Java代码运行vlc流。 下面示例中给出的简单命令在java代码和终端中都可以正常工作

String cmd = "/Applications/ video.avi"
Process p = Runtime.getRuntime().exec(cmd);
但我尝试使用多个选项运行更高级的命令”

这是我的主要课程:

NewCamera obj = new NewCamera();
...
String mobile_command = "vlc -d -vvv " + camera.getUrl() + 
" --no-audio --sout"
+ " '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:"
+ "standard{access=http{mime=image/jpeg},mux=mpjpeg,dst="
+ camera.getServerName() + ":"
+ camera.getMobilePort() + "}'";

obj.executeCommand(mobile_command);
logger.info("New mobile stream started");
这是一个用于执行shell命令的类:

    private String executeCommand(String command) {

    StringBuffer output = new StringBuffer();

    Process p;
    try {
        p = Runtime.getRuntime().exec(command);
        logger.info(command);
        p.waitFor();
        BufferedReader reader = 
                        new BufferedReader(new InputStreamReader(p.getInputStream()));

                    String line = "";           
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");

        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    logger.info(output.toString());
    return output.toString();

}
Linux中的进程是创建的,但流是“脱机”的,因为我无法连接并获取它。在Linux中直接从命令行执行相同的命令可以工作并创建流


有什么想法吗?

您应该使用VLCJ,而不是通过shell调用vlc

我改变了方法:

vlc -d -vvv http://camera_ip/mjpg/video.mjpg --no-audio --sout '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:standard{access=http{mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=server_name:port}' &
这样做很好。我也改变了运行shell脚本的方法。现在我使用
Process Builder
,而不是简单的
Process
,p.waitFor()调用将阻止它。您只会在以后使用流,因此我认为这不会像您预期的那样工作。我建议您在这里寻找可靠的解决方案:
vlc -d -vvv http://camera_ip/mjpg/video.mjpg --no-audio --sout '#transcode{vcodec=MJPG,venc=ffmpeg{strict=1}}:standard{access=http{mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=server_name:port}' &