在 Linux 上播放 mp3 声音缓冲区

Posted

技术标签:

【中文标题】在 Linux 上播放 mp3 声音缓冲区【英文标题】:play mp3 sound buffers on linux 【发布时间】:2011-10-24 11:02:54 【问题描述】:

我希望能够在 Linux 上播放我在特定端口上接收的 mp3 音频声音缓冲区。这是一个连续的直播。我看过 pulseaudio、portaudio、mpg123 等,但似乎不知道该怎么做。

mp3 声音是从网络上的另一台计算机接收的,并使用 naudio 和 lame 进行转换。如果我在 Windows pc 上收到声音,我可以使用 naudio 在 C# 中提供的 dll 简单地播放它。但我不确定如何在 Linux 中解决它。

任何建议将不胜感激。

提前致谢,

【问题讨论】:

【参考方案1】:

你看过madplay吗?

http://www.underbit.com/products/mad/ http://alcor.concordia.ca/manpages/sys1/madplay.1.html

它可以从标准输入读取 MP3 数据。你可以使用一个简单的程序,甚至使用一个 shell 命令,将你从套接字读取的数据重定向到 madplay 的标准输入:

netcat <hostname> <portname> | madplay - -o wave:- | aplay

如果您在 linux 机器上使用 alsa,上述方法将起作用。

更准确地说,在我的机器上,我可以执行以下操作:

使用 netcat 通过 TCP 套接字流式传输 mp3 文件:

cat ~/Music/Linkin\ Park/06\ Demos\,\ Unreleased\ \&amp;\ Other/1997\ -\ Xero/04\ -\ Stick\ N\ Move.mp3 | netcat -l localhost -p 8899

连接到端口并使用netcat读取MP3数据并将流路由到madplay:

netcat localhost 8899 | madplay - -o wave:- | aplay

【讨论】:

感谢您的信息。如果我成功或需要进一步的帮助,我会调查它并让你知道。你有没有尝试过它在流缓冲区上工作,因为我不是在传输 mp3 文件,而是它只是缓冲的声音数据? 传输流或文件并不重要。据我所知,mp3 数据是一堆带有标题的“帧”,从哪个帧开始播放并不重要。【参考方案2】:

你可以直接使用mpg321和nc(netcat)。

将流发送到特定主机上的特定端口: nc 192.168.1.55 4455 &lt;example.mp3 使用 nc 监听端口并将流重定向到直接播放流的 mpg321: nc -l 4455 | mpg321 -

【讨论】:

以上是关于在 Linux 上播放 mp3 声音缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

Linux如何在RAM缓冲区中录制声音并以自定义延迟播放音频

iOS 上的 MP3 流式传输

HTML:如何在不缓冲所有声音数据的情况下从 URL 中间文件开始声音播放

AVAudioPlayer- 从声音缓冲区播放

在纯 WinAPI 中从内存缓冲区播放声音

在 LInux 上播放 PCM 音频(wav)[关闭]