Baurine's Blog

mpg123 在 ubuntu 12.04 上的使用

March 17, 2013

最近在练习一个小项目,用 C 写一个流媒体服务器,往多播组同时发送多个频道的音乐,客户端通过 socket 接收,然后通过管道输送给 mpg123 进行解码播放。

现在遇到的情况是,mpg123 在 rhel 5.8 上使用正常,如果在 ubuntu 12.04 上使用,则提示下面的错误:

sparkle@ubuntu:~$ mpg123 /media/DISK/blo_win.mp3  
[oss.c:172] error: Can't open default sound device!  
[audio.c:627] error: failed to open audio device  
[audio.c:180] error: Unable to find a working output module in this list: oss  
[audio.c:529] error: Failed to open audio output module  
[mpg123.c:869] error: Failed to initialize output, goodbye.  

根据错误提示,查看源代码 oss.c 172 行前后:

...
if(!ao->device) {
    ao->device = "/dev/dsp";
    usingdefdev = 1;
}

ao->fn = open(ao->device,O_WRONLY);  

if(ao->fn < 0)
{                            // ==> 呃,这里居然用了另一种代码风格...
    if(usingdefdev) {
        ao->device = "/dev/sound/dsp";
        ao->fn = open(ao->device,O_WRONLY);
        if(ao->fn < 0) {
            if(!AOQUIET) error("Can't open default sound device!");
                return -1;
...

从代码来看,是打开 /dev/dsp 或 /dev/sound/dsp 失败,我查看了 /dev 目录,没有这两个文件。

首先当然是 google 解决办法,很可惜,又没有搜到直接的解决办法。但是了解到还有一个类似的软件叫 mpg321,跟 mpg123 的使用几乎相同。于是安装之,果然可以播放了,但是有点小瑕疵,中文显示乱码。

虽然可以工作了,但我仍心有不甘,mpg123 在最大的 Linux 发行版上居然无法正常使用,这说不过去啊。

看了 mpg123 的帮助和 man 手册,也没有收获,只是说通过 -a 选项可以指定输出设备,但我不知道我的音频设备的路径...

google「linux oss」关键词,获知 oss 和 alsa 是 Liunx 的两种提供声卡驱动的组件,Linux 上从 2.6 内核开始 oss 被废弃,改用 alsa。而 Ubuntu 12.04 是 3.2,所以已经没有自带 oss 了。而 rhel 5.8 虽然也是 2.6 了,但是仍保留了 oss。

在终端输入 mpg123 后再按tab键,出现以下结果

sparkle@ubuntu:~$ mpg123  
mpg123       mpg123-alsa  mpg123.bin   mpg123-esd   mpg123-nas   mpg123-oss 

看到有一个名为 mpg123-alsa 的命令,抱着试试看的态度运行之,果然,听到了美妙的音乐声,而且中文也能正确显示了,perfetc!

sparkle@ubuntu:~$ mpg123-alsa /media/DISK/blo_win.mp3

High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.12.1; written and copyright by Michael Hipp and others
free software (LGPL/GPL) without any warranty but with best wishes

Directory: /media/DISK/  
Playing MPEG stream 1 of 1: blo_win.mp3 ...  
Title:   Blowing In The Wind             Artist: 鲍勃 迪伦  
Comment: WWW.TOP100.CN 巨鲸音乐网   Album:  The Best Of Bob Dylan  
Year:    1997-1-1 0:00:00  
Genre:   乡村音乐【Country Music】,流行音乐【Pop Music】  
MPEG 1.0 layer III, 192 kbit/s, 44100 Hz stereo  

2013/03/20 补充
后来发现上面问题产生的原因是我使用的 mpg123 版本太老。目前 mpg123 的最新版本是 1.15.1,而我使用的版本是 1.13.4,这个版本默认使用 oss 输出音频,而从 1.13.6 开始,已改为默认使用 alsa 输出音频。


Comments