在 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
本文介绍的是使用管道时可能出现的死锁。
我想使用 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
本文介绍的是使用管道时可能出现的死锁。