Java Runtime.getRuntime()。exec()带引号

我试图通过在Linux上的EXEC调用运行ffmpeg。 但是我必须在命令中使用引号(ffmpeg需要它)。 我一直在寻找通过java文档的processbuilder和执行和问题在stackoverflow,但我似乎无法find一个解决scheme。

我需要跑步

ffmpeg -i "rtmp://127.0.0.1/vod/sample start=1500 stop=24000" -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv 

我需要在下面的参数string中插入引号。 注意,由于processbuilderparsing和运行命令的本质,简单地在反斜杠之前添加单引号或双引号不起作用。

 String argument = "ffmpeg -i rtmp://127.0.0.1/vod/" + nextVideo.getFilename() + " start=" + nextVideo.getStart() + " stop=" + nextVideo.getStop() + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv"; 

任何帮助将不胜感激。

Solutions Collecting From Web of "Java Runtime.getRuntime()。exec()带引号"

制作一个数组!

exec可以接受一组字符串,这些字符串被用作一个命令和参数数组(而不是一组命令)

像这样的东西…

 String[] arguments = new String[] { "ffmpeg", "-i", "rtmp://127.0.0.1/vod/sample start=1500 stop=24000", "-re", ... }; 

这听起来像你需要在你的参数字符串内部转义引号。 这很简单,可以使用前面的反斜杠。

例如

 String containsQuote = "\""; 

这将评估为只包含引号字符的字符串。

或者在你的具体情况下:

 String argument = "ffmpeg -i \"rtmp://127.0.0.1/vod/" + nextVideo.getFilename() + " start=" + nextVideo.getStart() + " stop=" + nextVideo.getStop() + "\"" + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv";