Network Audio Streaming on OS X

This article collects what I have learnt about streaming network audio with OS X. We’ve been using an Airtunes Express for our home audio needs, but the mini-plug connector has become extremely sketchy. One of the audio channels cuts out unless the connector is positioned just so, and it never stays, so I started looking into alternatives.

We also have a Mac Mini which we use as a home server, so the natural inclination was to stream sound to it instead. All we really need is to be able to stream from iTunes to it, so I first looked into somehow emulating an Airtunes Express with it. Long story short, not possible at this time. In more detail:

Airport Express uses RAOP, a run of the mill audio streaming protocol that encrypts the stream (presumably to make it harder to rip) with Asymmetric Keys. Client side keys are widely known and available as audio clients (Airfoil, JustePort), but nobody has cracked the server (Airport Express) key.

The alternative that everyone else is using is the Enlightenment Sound Daemon. The are lots of articles out there on setting it up (one, two, three), but they’re all missing the critical step of ensuring that the server audio is being streamed to binds to an IPv4 address.

So, the steps:

  1. Install MacPorts on the client and the server
  2. On the client and the server: sudo port install esound
  3. Install SoundFlower on the client
  4. Reboot the client
  5. Set SoundFlower (2ch) as both the default input and output devices in sound preferences
  6. On the server
    1. run: esd -tcp -public -port 5001 -bind [server ipv4 address]
    2. open port 5001 on your Firewall. Leopard should simply ask if you want it opened when you start esd. Tiger needs the port explicitly opened.
  7. On the client
    1. run: esd -tcp -bind ::1 &
    2. run: esdrec -s ::1 | esdcat -s [server ipv4 address]:5001

Coming soon: some scripts to wrap the command line stuff and start eSoundD automatically on the server.


  1. An alternative is to run your music program(s) on the Mac Mini, and use screen sharing to control it from elsewhere. That's what I do.

  2. I've been trying to get this working for a long time. I guess it all came down to sucking it up and installing macports. Thanks for the guide.