oreilly.comSafari Books Online.Conferences.


Streaming Media With Linux
Pages: 1, 2, 3, 4, 5, 6


By this time almost every Internet citizen knows something about the turbulent history and controversy surrounding the MP3 file format. Readers interested in the historical and technical details should consult the excellent material at MP3'Tech, but in this article we shall simply accept the MP3 as a fact of Internet life and consider its use as a commonly-employed streaming audio format.

The MP3 format has become enormously popular, rivaling RealAudio in the quality of its sound and the proliferation of MP3-powered sites. Of course, Linux can claim its fair share of encoders, decoders and players, tag writers, database managers, and other MP3 amenities. Damien Morel's excellent DAM's MP3 Page lists more than 40 Linux MP3 players available for use in X and at the console. Let's take a look at two of the most most popular players: XMMS and mpg123.


XMMS playing a Shoutcast stream.
Figure 2: XMMS playing a Shoutcast stream.

XMMS is the X MultiMedia System. Among its many virtues, XMMS supports a plug-in architecture that lets you add such niceties as effects-processing interfaces, OpenGL spectrum analyzers, and modules for various types of input/output files (including MPEG and AVI movies). The default setup for XMMS includes support for playing a variety of audio formats, including WAV, AIFF, various types of MOD music files, and of course standalone and streaming MP3s.

RPMs and tarballs are available from the XMMS web site. Installing the RPM is easy: rpm -i xmms-latest.rpm will install the binary, the documentation, and the default plug-ins. The tarball should be unpacked in your home directory with tar xzvf xmms-latest.tar.gz. Then just follow the familiar pattern of ./configure; make and (as root) make install. That's all there is to it, you're ready to roll with XMMS.

Enter xmms at an xterm prompt. If you're new to the program you'll be pleased to find that you'll be able to change its appearance with skins, play with DSP effects in real time, and set up playlists of arbitrarily mixed media types. Unfortunately, we can't go into all the features of XMMS, we just want to know how to connect to a streaming MP3 broadcast.

There are three ways to connect XMMS to an audio stream. You can specify a network URL as a command-line option:


You can also select Play Location from the XMMS main menu (or use Ctrl-L at the keyboard) and enter the URL in the pop-up dialog box, or you can specify XMMS as the MIME type player

Multipurpose Internet Mail Extensions. MIME types enable the exchange of non-ASCII data such as audio and video over the Internet.

of your choice in an Internet browser for X such as Netscape or Konqueror. This last method is a great way to enjoy Internet broadcasts: Simply log on to a site such as, click on the link to what you'd like to hear, and voilà, streaming audio while you surf the Web. Later in this article I'll guide you through the details of setting up your browser to use XMMS as a helper application, but now let's look at the premier MP3 player for the Linux console: mpg123.


Michael Hipp's mpg123 is certainly the best-known MP3 player for the console. It is included with most mainstream Linux distributions, and rightfully so: mpg123 is still the fastest Linux decoder for standalone and streaming MP3s.

Unfortunately, some versions of mpg123 prior to 0.59s contain a bug that corrupts the URL for an audio stream, and as of Feb. 15, 2001, the properly working code is available only via the mpg123 CVS (Concurrent Versions System). Fortunately, CVS is also included with almost every major Linux distribution, and retrieving the repository code is easy. In X or at the console, run this command from your home directory:

cvs -d login

You will be prompted for a user ID and a password: Enter guest for both, then run this command to download the mpg123 CVS files:

cvs -z9 -d checkout mpg123

When the CVS files have finished transferring, log out of the remote server:

cvs -d logout

Downloading the CVS sources to your home directory will create a new $HOME/mpg123 directory. Enter that directory and read the INSTALL and README files for any late-breaking news or changes to the installation process. Building mpg123 is quite straightforward: The author has provided a simple multi-platform makefile, and you need only type make linux-help to view the Linux-specific compile-time options. I used make linux-pentium, the build was quickly done, and make install (as root, of course) put the new mpg123 into my system.

Connect mpg123 to an MP3 stream by pointing it to the stream's URL at the command prompt, just as we've done with RealPlayer and XMMS:


Mpg123 is also suitable as your browser's default helper application for playing MP3 streams in X or console mode. Configuring Netscape for mpg123 is identical to the XMMS configuration, substituting mpg123 for xmms in your MIME type definitions. And with no need for a graphic interface, mpg123 will be our natural choice when we configure the Lynx text-mode web browser later in this article.

Creating content With BladeEnc

Most of us probably get our MP3s from popular sites such as or the various Napster services, or we rip them from our CD collections (ripping is a term for the process of lifting the audio data from a CD and converting it to WAV and/or MP3 format). Linux users are perhaps most familiar with Mike Oliphant's wonderful Grip, a front-end for a variety of CD and MP3 utilities.

Grip with CD title listing.
Figure 3: Grip with CD title listing.

Grip is pre-configured for a number of MP3 encoders, including my favorite, Tord Jansson's BladeEnc.

Figure 4: BladeEnc default configuration in Grip.

After downloading and unpacking it (with tar xzvf bladeenc-latest.tar.gz), installing BladeEnc follows the familiar routine of ./configure; make; make install. You can configure Grip to use BladeEnc as the default encoder, but the encoder is perfectly usable on its own at the command prompt. It may even be preferable to work with it that way: perhaps you've recorded some masterworks of your own as WAV files in Kai Vehmanen's great ecasound and you want to convert them to MP3s to stream over your own Internet broadcasting station. The process is simple enough, and this command :

bladeenc *.wav

will create MP3s from every WAV file found in the current directory. It really is that easy to make MP3s from your original material. BladeEnc has many other control options, but I leave their exploration to the interested reader.

The future of MP3

It may appear that MP3 has everything going for it to remain one of the most popular streaming audio formats: high-quality audio with low resource requirements, excellent streaming performance, and an enormous installed software base. However, not all the news is good: MP3 is a proprietary format patented and licensed by Fraunhofer IIS-A, a fact of some concern to many programmers of MP3 encoders. In 1997, Fraunhofer sent an order to developers of free and open-source encoders to cease and desist unless they started paying royalties. The company has also stated that it intends to charge licensing fees for broadcasting MP3s, perhaps by the end of the year. It seems that if you're looking for "...a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed audio format for high quality (44.1-48.0 kHz, 16+ bit, polyphonic) audio and music at fixed and variable bit-rates from 16 to 128 Kbps/channel," you won't get it from MP3. Perhaps you should be looking at Ogg Vorbis.

Pages: 1, 2, 3, 4, 5, 6

Next Pagearrow

Linux Online Certification

Linux/Unix System Administration Certificate Series
Linux/Unix System Administration Certificate Series — This course series targets both beginning and intermediate Linux/Unix users who want to acquire advanced system administration skills, and to back those skills up with a Certificate from the University of Illinois Office of Continuing Education.

Enroll today!

Linux Resources
  • Linux Online
  • The Linux FAQ
  • Linux Kernel Archives
  • Kernel Traffic

  • Sponsored by: