====== OpenWrt und AppleTv ======
===== Ausgangssituation =====
{{:it:linux:openwrt_appletv_01.png?700|}}
* 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.
- {{:it:linux: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.