我正在尝试开发一个程序来播放和记录一些RTMP流。该程序是在Qt中开发的。
我使用rtmpdump和mplayer。由于两者都在单独的进程中运行,所以我使用了一个fifo将流从rtmpdump传递到mplayer。我需要单独的进程,因为mplayer需要被用户控制,所以mplayer以slave模式运行。
对于播放流,这很好地工作了。
现在我想将流记录到另一个文件中。我知道可以使用mplayer来做到这一点。但是使用单个mplayer是不可能的,因为它只支持播放或录制其中之一。所以考虑使用tee命令来拆分流,并使用两个mplayer进程,一个用于录制,一个用于播放。
现在流程如下:
一个mplayer正在读取fifo_for_playing,另一个正在读取fifo_for_recording。
现在的问题是,既然只有当用户按下录制按钮时,应该录制的mplayer才会开始,因此fifo_for_recording将阻塞tee,因为它没有打开。 因此,播放也不会开始。
有人能提供解决方案或更好的方法来实现这一点吗? 我试图使用非阻塞FIFO进行分流。 因此,即使一个FIFO没有打开以供读取,它也不会阻止分流。
我使用rtmpdump和mplayer。由于两者都在单独的进程中运行,所以我使用了一个fifo将流从rtmpdump传递到mplayer。我需要单独的进程,因为mplayer需要被用户控制,所以mplayer以slave模式运行。
对于播放流,这很好地工作了。
现在我想将流记录到另一个文件中。我知道可以使用mplayer来做到这一点。但是使用单个mplayer是不可能的,因为它只支持播放或录制其中之一。所以考虑使用tee命令来拆分流,并使用两个mplayer进程,一个用于录制,一个用于播放。
现在流程如下:
rtmpdump | tee fifo_for_playing fifo_for recording
一个mplayer正在读取fifo_for_playing,另一个正在读取fifo_for_recording。
现在的问题是,既然只有当用户按下录制按钮时,应该录制的mplayer才会开始,因此fifo_for_recording将阻塞tee,因为它没有打开。 因此,播放也不会开始。
有人能提供解决方案或更好的方法来实现这一点吗? 我试图使用非阻塞FIFO进行分流。 因此,即使一个FIFO没有打开以供读取,它也不会阻止分流。