我需要将标准输出从 ffmpeg.exe 直接流式传输到运行中的 Web 响应流。我用 Process/RedirectStandardOutput/etc 设置命令行来管道输出流没有问题。
但是,问题似乎是 Process.StandardOutput 的输出不是正确的原始格式。像这样(伪代码):
var ffpsi = new ProcessStartInfo("ffmpeg.exe", "-i input.mp3 -acodec copy -f mp3 -")
ffpsi.UseShellExecute = false;
ffpsi.RedirectStandardOutput = true;
var ffmpegProcess = new Process();
ffpmpegProcess.StartInfo = ffpsi;
ffmpegProcess.Start();
var outputFile = new FileStream("out.mp3");
ffmpegProcess.StandardOutput.BaseStream.CopyTo(outputFile);
Run Code Online (Sandbox Code Playgroud)
创建一个比原始文件稍大的文件,它显然不是有效的 MP3。
我已经使用基本流使用各种编码复制策略并从异步回调中获取数据,但似乎没有任何效果。
这里有什么想法吗?我想这归结为如何将 ffmpeg stdout 的原始二进制输出转换为我可以传递给响应流的 .NET 流?