使用mkfifo和传输流,这可能吗?

时间:2017-09-30 05:18:48

标签: bash ffmpeg stream named-pipes transport

我想执行一个执行以下操作的bash脚本:

应用程序'ffmpeg'生成LIVE传输流(.ts)文件。我需要处理这个实时流式传输(执行解复用等)。

现在我知道这必须通过FIFO完成;但这是我的任务。

我需要重定向ffmpeg的输出以写入fifo,然后另一个应用程序将处理该fifo内容。这种情况会持续发生,直到我按下,然后按Ctrl + C.

这可能吗? 我必须做两个终端吗?

我基本上是为上述操作编写一个bash脚本(以及更多),所以我必须调用两个终端,或者可能是fork吗?

请告知。

提前致谢!

1 个答案:

答案 0 :(得分:1)

FFmpeg确实支持管道。 你必须做的一切都是如下:

  1. 制作一个fifo

    mkfifo first.ts  
    
  2. 使用管道运行ffmpeg

    ffmpeg -i sample.ts -c copy -muxrate 5000000 pipe:1 > first.ts
    
  3. 运行任何其他适用于传输流文件的工具,例如OpenCaster工具tscbrmuxer可以添加例如NIT表传输流文件

    tscbrmuxer b:3008 NIT.ts b:5000000 first.ts > second.ts
    
  4. 如果你想停止2个工具,只需杀掉最后一个使用pipe / fifo的工具。在你不得不杀死tscbrmuxer的情况下。

    kill tscbrmuxer
    

    OR
    如果你没有在后台运行最后一个工具,只需用[ctrl + c]

  5. 杀死它

    由于使用了这种方法(例如shell脚本或Python脚本),所有使用pipe / fifo的工具都会因管道损坏而终止。

    我希望这会对你有所帮助。