Java Runtime.getRuntime (). Exec () с кавычками - PullRequest
6 голосов
/ 07 июля 2010

Я пытаюсь запустить ffmpeg через вызов exec в linux.Однако я должен использовать кавычки в команде (ffmpeg требует этого).Я просматривал документацию по Java для processbuilder и exec, а также вопросы по stackoverflow, но не могу найти решение.

Мне нужно запустить

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

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 07 июля 2010

Создать массив!

exec может принимать массив строк, которые используются в качестве массива команд и аргументов (в отличие от массива команд)

Примерно так...

String[] arguments = new String[] { "ffmpeg", 
"-i", 
"rtmp://127.0.0.1/vod/sample start=1500 stop=24000",
"-re",
...
};
1 голос
/ 07 июля 2010

Похоже, вам нужно экранировать кавычки внутри строки аргумента. Это достаточно просто сделать с предыдущим обратным слешем.

* 1003 Е.Г. *

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";
...