Apple AirPort Express uses proprietary protocol "RAOP" to communicate with iTunes. AirPort Express in your network can be found with RAOP lookup using Rendezvous Discovery. So here it goes:
use Net::Rendezvous; my $r = Net::Rendezvous->new("raop"); $r->discover(); for my $entry ($r->entries) { printf "%s %s:%s\n", $entry->name, $entry->host, $entry->port; }
RAOP protocol itself has already been analyzed by DVDJon and its implementation is availabe as an open source C# software called JustePort. RAOP protocol is based on RTSP wrapped with AES and RSA cryptography, on which Apple Lossless files are streamed.
Quick looking-around the SourceForge.net reveals that there's a C + GTK implementation of AirPort Express client.
Link: SourceForge.net: Project Info - Airport Express Client.
It uses GTK for GUI media browser, gnuPod to mount iPods, Rendezvous to discover AirPort Express in your home network, and ported version of JustePort to stream your music to AirPort. Sounds excellent! It might be more interesting if its interface switches from GTK-GUI to Web-based HTTP server, so you can use your AirPort Express with Linux box as a complete home jukebox, controlable from your cellphone or PDAs.
Now I'm working on porting JustePort to Perl. It requires me Math::Pari nightmare, but there're various CPAN modules to implement RAOP: Crypt::Rijndael for Rijndael AES Cryptography, Crypt::RSA for RSA Encryption, RTSP::Lite for RTSP transaction and MP4::Info for decoding MP4 files. So it won't take me much time.
Recent Comments