read

Warum, weshalb und wieso

Das macht mich jetzt schon seit Monaten fuchsig. Da kauft man sich ne AirPort Express, freut sich über die Vorteile von AirTunes und dann bekommt Apple es nicht auf die Reihe dass die iPod.app vom iPhone/iPod touch sich mit dem Gerät verständigt.

Nachdem heute Sonntag ist, ich viel zu früh aufgewacht bin und ich keine Böcke hatte mich auch noch am Sonntag mit der Arbeit rumzuschlagen, hab ich etwas rumgegooglet und experimentiert.

Warum hab ich mittlerweile rausgefunden. Dazu aber "später" mehr.

Auf die AirTunes Technik will ich jetzt mal nicht eingehen. Da man das bestimmt woanders besser nachlesen kann.

( Das folgende läuft ohne Anpassungen prima auf nem Mac. Linux dürfte ebenfalls klappen, ist aber nicht getestet )

Wir brauchen

Um AirTunes ausserhalb von iTunes zu nutzen, gibts bereits ne tolle Bibliothek (hier) und eine Portierung für Ruby  die ich verwende (hier).

Getestet hab ich es mit einem ge-jailbreak-ten iPhone 2G, auf das ich mit OpenSSH zugegriffen hab. Dann via apt die folgenden Packete installiert:

(alles folgende als "root" - Default Passwort beim iPhone ist "alpine")

ruby, lame, rubygems

apt-get install ruby
apt-get install lame
apt-get install rubygems
Nachdem mir ein
gem --version
1.2.0
nur 1.2.0 ausgegeben hat. Hab ich das dann kurzerhand auch noch aktualisiert: (1.3.4 weil (bei mir - und laut Google noch ein paar anderen die 1.3.5 nicht funktioniert hat))
gem install rubygems-update -v=1.3.4
Das wars noch nicht ganz:
update_rubygems
Und tadaaa
gem --version
1.3.4
Die oben erwähnte Bibliothek "raop-client" holt man sich dann mit dem frischen GEM
gem install raop-client
Ich hab dann im /root Folder, wo ich mir ein simples Vz. "test" angelegt hab, weitergearbeitet:
cd ~
mkdir test
cd test
( Albern das zu Dokumentieren? )

Musik? Musik!

Über SCP hab ich mir vom Mac ne MP3 File auf das iPhone kopiert:
scp ~/Music/test.mp3 root@192.168.100.5:/root/test
192.168.100.5 ersetzt ihr natürlich durch eure iPhone IP

"Der" Player

So: jetzt kommt das Ruby-Script (das Ihr z.b. als airtunes.rb lokal speichert.
require 'rubygems'
require 'raop'

raop = Net::RAOP::Client.new(ARGV[0]) raop.connect raop.volume=2 raop.play $stdin raop.disconnect

... und dann vorzugsweiße auch mit SCP auf eure überteuerte Funkhupe kopiert:
scp ~/airtunes.rb root@192.168.100.5:/root/test

Press Play on Tape

immer noch im ~/test Verzeichnis! Sagen wir dem lame-Encoder unsere vorhin kopierte MP3 Datei zu dekodieren (ins WAV Format - was anders versteht die AirPort nicht). Das ganze schieben wir über ne Pipe an unser eben gebautes Player-Script.
lame --decode test.mp3 - | ruby airtunes.rb 192.168.100.6
wobei hier die 192.168.100.6 (natürlich) durch eure AirPort Express IP ersetzt wird.

Wichtig: Die "raop" Bibliothek (der Ruby Port) kommt anscheinend noch nicht mit Passwortgeschützen AirTunes Lautsprechern klar. (Wobei ich mich damit noch nicht auseinandergesetzt hab. Zum Testen hab ich lediglich das Passwort auf Leer gesetzt.

Und? Hört ihr was?

Wenn man lange genug wartet (in meinem Fall ~20 Sekunden) kommt was :D (soviel zum "Proof of Concept"). Bei mir aber höchsten 4 - 8 Sekunden Bruchstücke.

Ich bin mir leider noch nicht sicher an WAS es liegt: Ob der lame Decoder auf nem 2G zu langsam ist, die WLAN Verbindung damit nicht klar kommt, oder schlimmstenfalls beides. Natürlich kann auch Ruby an sich zu langsam sein.

Nächste Woche gibts für mich hoffentlich das 3Gs mit dem ich den Spaß nochmals probieren werde. Vorausgesetzt natürlich, ich bekomm den Jailbreak hin.

Ich will ne App!

Ich auch :-) . Neben der Tatsache dass -ICH- weder mit dem iPhone SDK noch mit Objective C gearbeitet hab; keine Ahnung hab ob man den dekodierten Stream der iPod.app abfangen kann, oder wie man auf die iTunes Library zugreift um die Audio-Files zu dekodieren (Und das ohne JB).

Halte ich für ein Gerücht dass Apple eine App, die via Reverse Engineering das "geheime" Protokoll nachgebaut hat, zulässt.

Back to Overview