0

我试图使用 vlc 和 mpg123 播放器通过 gnuradio 流式传输 mp3 音乐。按照本网站的示例 http://www.opendigitalradio.org/Simple_FM_transmitter_using_gnuradio

命令是:

$ mkfifo stream_32k.fifo
$ mpg123 -r32000 -m -s  http://maxxima.mine.nu:8000 >stream_32k.fifo

使用我自己的 mp3 流,我按照示例进行操作,但是有一次我忘记放

$ mkfifo stream_32k.fifo

到终端,而不是只输入

$ mpg123 -r32000 -m -s  http://localhost:8080/mp3 >stream_32k.fifo

直接到终端。结果是一个未突出显示的 .fifo 文件(如使用 mkfifo 创建的文件)

当与 gnuradio 一起使用时,使用 mkfifo 制作的 fifo 文件只能播放一次,并且它的大小总是会回到 0 字节。

虽然我在不使用 mkfifo 的情况下意外创建的那个将字节保留了很长时间,而且我可以随时访问它,这对我来说更有益。

以这种方式制作fifos有缺点吗?也有人可以告诉我我实际上做了什么吗?

太感谢了!

4

1 回答 1

0

您刚刚创建了一个常规文件。因此,它将字节保留在磁盘上,真正的 FIFO 与永久磁盘存储无关,它本质上是内存中的一个缓冲区,您可以给它一个“磁盘名称”,以便面向文件的命令可以使用它。缺点是当你在写一个永久的磁盘文件时,你不能同时读取它(一般来说,这取决于写程序的实际写入方式,但你不能依赖它)。

如果您认为文件名中包含 .fifo 使其成为 FIFO,那么这是不对的。mkfifo实用程序使文件名附加到 FIFO。

如果要保留文件并同时播放流,可以使用以下实用程序tee

mkfifo stream.fifo
mpg123 ...... | tee saved_stream.mp3 > stream.fifo

然后像往常一样从 stream.fifo 播放。Tee 将“捕获”通过它的字节并将它们保存到磁盘。

于 2015-04-03T23:34:12.687 回答