我想使用ffmpeg将视频数据包转换为mjpeg,理想情况下,我想管道gob数据包并通过管道接收输出。
我正在使用C#进程来调用ffmpeg:
-f h264 -i pipe:-an -f mjpeg -q:v 1 pipe:
我使用进程.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)我认为管道输入/管道输出应该有效。但事实并非如此。
我做错了什么?
感谢。
答案 0 :(得分:1)
在一个程序中使用多个管道/多个方向似乎有一个警告。也许到目前为止你还没有实现一些多线程?
当谷歌搜索(尝试“Windows匿名管道等待终止”或“Windows匿名管道等待终止”)我发现这个: http://blogs.msdn.com/b/oldnewthing/archive/2011/07/07/10183884.aspx
本文介绍使用管道时可能出现的死锁。