在 FFMPEG 上使用管道进行输入和输出?

Using Pipe for input and output on FFMPEG?

我想使用 ffmpeg 将视频包转换为 mjpeg,理想情况下,我想通过管道输入 gob 数据包并通过管道接收输出。

我正在使用 C# 进程调用 ffmpeg,如下所示:

-f h264 -i 管道:-an -f mjpeg -q:v 1 管道:

我使用进程 .StandardInput.BaseStream 通过管道传输源数据流,并从 .StandardOutput.BaseStream.

获取返回的数据

问题是,FFmpeg 不发送数据。它坐着,显然是在等待。没有错误。没有任何内容写入 StandardOutput。

如果我单独尝试每个管道,它工作正常。这些工作:

a) 传入源文件位置并通过管道获取返回的帧数据(字节写入 StandardOutput)

b) 通过管道传入源字节并要求 Ffmpeg 将结果保存到文件

这行不通:

c) 管道输入数据,并通过管道输出数据。

根据@nmaier 之前对这个问题的回答 (Can I use ffmpeg to output jpegs to a memory stream instead of a file),我认为 pipe-in/pipe-out 应该可行。但事实并非如此。

我做错了什么?

谢谢。

在一个程序中使用多个管道/多个方向似乎需要注意。可能需要一些您目前尚未实现的多线程?

谷歌搜索时(尝试 "windows anonymous pipe wait until termination" 或 "windows anonymous pipe wait until terminate")我发现了这个: http://blogs.msdn.com/b/oldnewthing/archive/2011/07/07/10183884.aspx

本文介绍的是使用管道时可能出现的死锁。