我需要将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);
创建一个比原件大一点的文件,它显然不是一个有效的MP3。
我玩各种编码使用基本流复制策略并从异步回调中获取数据,但似乎没有任何效果。
这里有什么想法吗?我想这归结为如何将ffmpeg stdout的原始二进制输出转换为可以传递给响应流的.NET流?