小编use*_*065的帖子

具有多个 fifo 的 Linux tee 命令。fifo 块 T 恤

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

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

这对于播放流来说效果很好。

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

现在溪流像这样流动

rtmpdump | tee fifo_for_playing fifo_for recording 
Run Code Online (Sandbox Code Playgroud)

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

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

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

linux nonblocking fifo tee mplayer

5
推荐指数
1
解决办法
1810
查看次数

标签 统计

fifo ×1

linux ×1

mplayer ×1

nonblocking ×1

tee ×1