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 期望的选项与值对。
shell 用来分组 URL 的引号不应在 ProcessBuilder 的参数列表中变成字面字符。
HTTP 代理选项不是通用的 SOCKS 设置,也不会配置无关的 RTSP/UDP 输入。当数据流使用其他传输方式时,请检查所选的 FFmpeg 协议和构建能力。