对于由 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 期望的选项与值对。

shell 用来分组 URL 的引号不应在 ProcessBuilder 的参数列表中变成字面字符。

HTTP 代理选项不是通用的 SOCKS 设置,也不会配置无关的 RTSP/UDP 输入。当数据流使用其他传输方式时,请检查所选的 FFmpeg 协议和构建能力。

相关文章