在 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
吗?
它可以从标准输入读取 MP3 数据。你可以使用一个简单的程序,甚至使用一个 shell 命令,将你从套接字读取的数据重定向到 madplay 的标准输入:
netcat <hostname> <portname> | madplay - -o wave:- | aplay
如果您在 linux 机器上使用 alsa
,上述方法将起作用。
更准确地说,在我的机器上,我可以执行以下操作:
使用 netcat 通过 TCP 套接字流式传输 mp3 文件:
cat ~/Music/Linkin\ Park/06\ Demos\,\ Unreleased\ \&\ 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 <example.mp3
使用 nc 监听端口并将流重定向到直接播放流的 mpg321:
nc -l 4455 | mpg321 -
【讨论】:
以上是关于在 Linux 上播放 mp3 声音缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
Linux如何在RAM缓冲区中录制声音并以自定义延迟播放音频