====== 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.