OpenWrt und AppleTv
Ausgangssituation
- Apple TV haengt ueber HDMI an einem Samsung Fernseher
- Apple TV hat (weil er kein WPA-Enterprise kann) einen TP Link 1043 ND dabei, um Netzwerk-konnektivitaet per WLAN herzustellen
- Am TP-Link haengt ein Arduino und ein Bastel-Board mit einer IR-LED um die Fernbedienung des Samsung TVs zu simulieren
- Zusaetzlich gibt es ein IPad, welches mit dem AppleTV AirPlay machen moechte.
Probleme
- Samsung Fernseher schaltet nicht zwischen „normalen“ TV und Apple TV um, wenn AirPlay aktiv ist, da Apple TV immer ein HDMI Signal macht, wenn eingeschaltet.
- Fuer AirPlay immer auf die Source Taste des TVs zu klopfen (und jedes mal Schalten 5s zu warten) macht keinen Spass
Loesung
- OpenWrt auf TP-Link Router
- libipq und iptables koennen den gesamten Netzwerkverkehr des Apple TV analysieren
- Herausfinden, welches Paket mit welchem Inhalt anzeigt, dass AirPlay aktiv ist und dann Source Signal ueber Arduino/Fernbedienungssimulation an den TV senden um die Quelle des TVs auf Apple TV zu schalten.
- Wenn AirPlay vorbei, dann wieder zurueck auf normalen TV schalten.
Open WRT Firmware bauen
git clone git://git.openwrt.org/12.09/openwrt.git cd openwrt git clone git://git.openwrt.org/12.09/packages.git
- in feeds.conf.default folgende Zeile einfuegen:
src-link bkb /tmp/openwrt/bkb_packages
. Hierbei /tmp/ gegen den absoluten Pfad zum openwrt Verzeichnis ersetzen.
- appletv_utils_1043ndv1_2015-01-03.tar.bz2 im openwrt Verzeichnis entpacken
make package/symlinks
make
- Firmware befindet sich unter
bin/ar71xx/
Wie funktioniert es?
AppleTV/AirPlay spricht mDNS auf UDP 244.0.0.251 und Port 5353. Iptables wird angewiesen beim start des Daemons alle mDNS Pakete an die User-Space Queue zu senden. Diese sucht nach den Text Strings „iTunes_Ctrl_“ und „-iPad“ in den mDNS Paketen. Falls beide Strings gefunden werden, dann ist AirPlay aktiviert worden. Wurde jedoch nur der String „iTunes_Ctrl_“ gefunden, dann ist AirPlay deaktiviert worden.