使用管道将文件i / o引导到另一个进程

时间:2011-03-12 19:44:18

标签: c file-io ffmpeg pipe named-pipes

刚开始学习/使用管道,并想知道如何将应用程序的文件输出路由到管道,以便其他应用程序可以使用它。

确切地说,我想将ffmpeg的输出(转码后的视频数据)传输到我的应用程序中以使用它。如果我创建一个像/tmp/out.mp4这样的命名管道并将其作为输出文件名提供给ffmpeg,ffmpeg将尝试再次创建此文件,可能会覆盖我的管道(或类似的东西)。如何应对这种情况?

是否存在透明转移应用程序的文件IO的一般方法?

(我正在尝试编写一个视频流媒体服务器(仅供学习和娱乐),它将像avi这样的格式转换成流式友好格式,如mpeg4,在流式传输时,我发现ffmpeg对于此目的来说太慢,它就像2秒转码1秒视频:(

我的设置/ PC或ffmpeg的问题是否因为迟钝而闻名? )

PS:顺便说一下,我在 C 中写这个。

2 个答案:

答案 0 :(得分:3)

可以说服ffmpeg输出到管道:

ffmpeg -i whatever.avi -f mp4 -

“ - ”告诉它输出到stdout而不是文件,“ - f”告诉它输出文件应该是什么输出。

当然,您可以将其重定向到命名管道,但是使用popen调用它来直接将输出作为文件描述符来找我。

答案 1 :(得分:0)

ffmpeg也可以从stdin中读取并写入stdout,如下所示:

ffmpeg -i pipe:0 -f wav pipe:1

其中0和1是标准POSIX文件描述符。