我们需要使用ffmpeg读取C#中的一些RTSP流,并将标准输出通过管道传递到MemoryStream
。我们需要从每个流中获取快照。到目前为止,这是我的代码:
var arguments =
$@" -y -i {imageUri.AbsoluteUri} -vframes 1 -pix_fmt yuvj420p -vf select='eq(pict_type\,I)' -q:v 1 pipe:1";
var processStartInfo = new ProcessStartInfo
{
Arguments = arguments,
FileName = AppDomain.CurrentDomain.BaseDirectory + @"\lib\ffmpeg.exe",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
};
var process = new Process
{
StartInfo = processStartInfo,
EnableRaisingEvents = true
};
process.Start();
var output = process.StandardError.Read();
process.StandardOutput.BaseStream.CopyTo(memoryStream);
但在memoryStream.Length
以上时,总是0
。这是怎么回事?我已经看过了:How to get output from ffmpeg process in c#,但是我正在从stdout中读取二进制文件。这个答案几乎没有提供实施细节:https://stackoverflow.com/a/4535927/177416
不确定如何使用此答案:.NET Process - Redirect stdin and stdout without causing deadlock