FFmpeg의 HTTP 프록시 옵션은 입력보다 앞에 온다
http_proxy를 입력 프로토콜 옵션으로 전달하고 Java 애플리케이션이 FFmpeg를 실행할 때 옵션과 값을 별도의 인수로 유지한다.
HTTP 프로토콜이 처리하는 FFmpeg 입력에서는 프록시 옵션을 해당 입력 앞에 둔다.
ffmpeg -http_proxy http://proxy.example:8080 \
-i 'https://media.example/input.mp4' \
-c copy output.mp4
-http_proxy는 입력의 HTTP 연결에 사용할 중개자를 선택한다. HTTP 프록시 목록의 엔드포인트는 공개 미디어 경로의 후보이다. -i는 여전히 미디어 리소스를 지정한다. copy 옵션은 출력 스트림에 관한 것이며 네트워크 경로를 설정하지 않는다.
Java에서도 옵션과 URL을 별도의 프로세스 인수로 유지한다.
var command = new ProcessBuilder(
"ffmpeg",
"-http_proxy", "http://proxy.example:8080",
"-i", inputUrl,
"-c", "copy", outputPath
);
추가 인수를 노출하는 래퍼에도 같은 두 토큰의 구분이 필요하다. -http_proxy와 그 값을 하나의 문자열에 담은 것은 FFmpeg가 기대하는 옵션과 값의 쌍이 아니다.
셸이 URL을 묶기 위해 쓰는 따옴표가 ProcessBuilder의 인수 목록에서 문자 그대로 남아서는 안 된다.
HTTP 프록시 옵션은 일반적인 SOCKS 설정이 아니며 관련 없는 RTSP/UDP 입력을 설정하지도 않는다. 스트림이 다른 전송 방식을 사용할 때 선택한 FFmpeg 프로토콜과 빌드 기능을 확인한다.