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
);
追加の引数を渡すラッパーにも同じ 2 トークンの区別が必要である。-http_proxy とその値を 1 つの文字列にまとめたものは、FFmpeg が期待するオプションと値の組ではない。
シェルが URL をまとめるために使う引用符は、ProcessBuilder の引数リストで文字そのものになってはならない。
HTTP プロキシオプションは汎用の SOCKS 設定ではなく、無関係な RTSP/UDP 入力を設定するものでもない。ストリームが別のトランスポートを使う場合は、選択した FFmpeg プロトコルとビルド機能を確認する。