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 プロトコルとビルド機能を確認する。

関連記事