gpt4 book ai didi

具有多个 fifo 的 Linux tee 命令。 fifo block 三通

转载 作者:IT王子 更新时间:2023-10-29 00:45:19 27 4
gpt4 key购买 nike

我正在尝试开发一个程序来播放和录制一些 rtmp 流。该程序是在Qt中开发的。

我正在使用 rtmpdump 和 mplayer。因为两者都在单独的进程中运行,所以我使用 fifo 将流从 rtmpdump 传递到 mplayer。我需要单独的过程,因为 mplayer 需要由用户控制。所以 mplayer 以从属模式运行。

这对于播放流来说工作正常。

现在我想将流记录到另一个文件。我知道我可以使用 mplayer 来做到这一点。但是使用单个 mplayer 是不可能的,因为它只支持播放或录制。于是想到用tee命令分流,用2个mplayer进程,一个录音,一个播放。

现在流是这样的

rtmpdump | tee fifo_for_playing fifo_for recording 

一个 mplayer 正在读取 fifo_for_playing,另一个正在读取 fifo_for_recording。

现在的问题是,因为应该录制的 mplayer 只有在用户按下录制按钮时才会启动,所以 fifo_for_recording 会阻塞 tee,因为它没有打开。所以播放也不会开始。

有人可以提出解决方案或更好的方法来实现这一目标吗?我想做的是使用非阻塞 fifo 发球。所以即使一个fifo没有打开读取,它也不会阻塞发球区..

最佳答案

Fifos 没有缓冲区(或者即使有也很小)。如果你写信给它,但没有人在读你的 block ,正如你发现的那样。

您可以编写一个小程序来读取 fifo 并将其缓冲到内存或磁盘中。也许 dd 程序可以做到这一点?

或者您可以在循环中使用带有 -stop 选项的 rtmpdump 调用,并将其输出写入文件。然后以没有 fifo 的老式方式处理文件。

关于具有多个 fifo 的 Linux tee 命令。 fifo block 三通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15874248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com