2010-07-06 5 views
5

리눅스에서 exec 호출을 통해 ffmpeg를 실행하려고합니다. 그러나 나는 명령에서 따옴표를 사용해야한다 (ffmpeg 필요). 내가 processbuilder 및 exec 및 stackoverflow에 대한 질문 자바 의사를 통해 봤는데하지만 솔루션을 찾을 수 없습니다.인용 부호가있는 Java Runtime.getRuntime(). exec()

은 내가 아래 인수 문자열에 따옴표를 삽입해야

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 

실행해야합니다. 단순히 백 슬래시 앞에 작은 따옴표 나 큰 따옴표를 추가하는 것은 processbuilder가 명령을 구문 분석하고 실행하는 방식의 특성 때문에 작동하지 않습니다.

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

모든 도움을 주시면 감사하겠습니다.

답변

6

어레이를 만드십시오!

간부는

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

는 "새로운 String []"문자를 제거 할 수 있습니다; 중괄호는 자동으로 문자열 배열을 생성합니다. –

+1

이것은 작동하지 않습니다 rtmp : //127.0.0.1/vod/sample start = xxx stop = xxx 에는 따옴표가 있어야합니다. 인수를 문자열 배열에 넣는 것은 도움이되지 않습니다. –

+0

다음과 같이 이스케이프 된 인용 부호를 사용하면 도움이되지 않습니다. "\"rtmp : //127.0.0.1/vod/sample start = 1500 stop = 24000 \ "" – laher

1

그것은 소리 ... 이런

뭔가 (명령의 배열과 반대로) 명령 & 인수의 배열로 사용되는 문자열의 배열을 취할 수 인수 문자열에서 따옴표를 이스케이프 처리해야하는 것처럼. 앞의 백 슬래시를 사용하면 간단합니다.

예.

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"; 
관련 문제