我正在尝试开发一个程序来播放和录制一些 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没有打开读取,它也不会阻塞发球台..