Ich bin gespannt, ob es mir möglich ist, Programme zu schreiben, die ein Apple TV steuern können, speziell ein Apple TV 4. Gen mit tvOS 9.1.1, wie es Apples Remote-App für iOS kann. Ich würde gerne Befehle senden, um in den vier Himmelsrichtungen zu navigieren, indem ich ein Element auf dem Bildschirm auswähle und den Navigations-Stack hochfahre - im Wesentlichen was Apples Remote-App kann.
Hat irgendjemand irgendeine Arbeit getan, um das Protokoll, das es benutzt, umzubauen? Cursory Googling hat bisher nur veraltete Ergebnisse über Apple TVs der früheren Generation und das DAAP-Protokoll ergeben, das so aussieht, als sei es etwas anderes als das, was ich möchte.
Ich habe es geschafft, mein Apple TV (derzeit tvOS 9.2) von einem Python-Skript aus zu steuern. Es stellt sich heraus, dass Sie
Die einzigen drei erforderlichen Anforderungen sind:
%Vor%Meldet sich beim Apple TV an. Die letzten vier Bytes der Antwort sind eine Session-ID, die als Big-Endian-Vier-Byte-Integer codiert ist.
%Vor%Meldet sich ab. Nicht unbedingt notwendig, da ich festgestellt habe, dass Sie sich bei der Anmeldung einfach eine neue Session-ID merken, aber wahrscheinlich keine schlechte Idee, die Dinge so zu machen, wie sie es erwartet.
%Vor%Senden Sie Benutzereingaben an Apple TV. Die Daten sind einer von mehreren Puffern, die einen Befehl eingeben, oder möglicherweise eine bewegende Berührung. Für die Bewegung in die Hauptrichtung ist das Senden mehrerer dieser Anforderungen erforderlich, um eine bewegte Berührung zu simulieren.
Ich habe ein Python-Skript, das zeigt, wie man das hier macht: Ссылка
Verwendet die Bibliothek für Anfragen: Ссылка
Ein besonderer Dank geht auch an Adam Miskiewicz / github user skevy, da ich diese Datei in seinem Atlas-Backend-Repo verwendet habe, das bequem die richtigen Puffer für die Bewegung hatte: Ссылка
Ich habe den Traffic auf meinem iPhone mit tcpdump
erfasst und mit WireShark analysiert. Die Remote-App fragt das Apple TV mit normalen HTTP-Anfragen an Port 3689 an.
Der Workflow der App besteht aus vier HTTP-Anfragen:
/server-info
, um Informationen zum Apple TV zu erhalten. Es antwortet mit einer Apple proprietären DAAP-Antwort (Digital Audio Access Protocol) , die einige Tags über das Gerät wie den Anzeigenamen bereitstellt. /login
wird während der Verbindung ausgeführt, wenn die App die Meldung "Mit Apple TV verbinden ..." anzeigt. Es antwortet mit einem DAAP über den Login-Status. /home-share-verify
überprüft die Verbindung zwischen der App und Apple TV. Dieser Aufruf benötigt einen Header Client-DAAP-Validation
mit einem langen unbekannten Zeichenfolgenwert. Laut Wikipedia scheint dies wie ein Hash zu sein, der durch einen Zertifikataustausch zwischen verifizierten Quellen erzeugt wird, der in iTunes 7.0+ eingeführt wurde und nie rückentwickelt wurde. /ctrl-int/1/{controlpromptupdate|controlpromptentry|playstatusupdate}
scheint die Anrufe zu sein, die für die Eingabe-Schaltflächen getätigt wurden. Einige andere kleinere Aufrufe werden dazwischen ausgelöst (wie ein Bonjour-Dienstupdate oder ein /databases
-Aufruf).
Hier und hier finden Sie weitere Informationen. Ich hoffe, dies hilft, einen Überblick darüber zu bekommen, wie diese einfache (aber geschützte) App funktioniert.
AppleTV 2,3 und 4 können mit HomeSharing.framework gesteuert werden. Inoffizielle AirPlay-Protokollspezifikation: nto.github.io/AirPlay.html
Android DACP-Fernbedienung: Ссылка Beispielimplementierung @: Ссылка
AppleTV4 verwendet auch das mediendremetv-Framework: Das Protokoll wird in erklärt : Ссылка
Ich wollte Alexa sagen, appletv auszulösen und das würde mein Appletv aufwecken und über HDMI & amp; CEC schalte meinen Fernseher ein,
um das zu tun: von Ihrem Mac \ Linux \ Windows einfach ausführen: curl -XPOST -d 'cmcc \ x00 \ x00 \ x00 \ x01 \ x30cmbe \ x00 \ x00 \ x00 \ x04menü' ' Ссылка "
Der abstrakte Befehl lautet: curl -XPOST -d 'cmcc \ x00 \ x00 \ x00 \ x01 \ x30cmbe \ x00 \ x00 \ x00 \ x04menü' 'http: // {APPLETV_IP}: 3689 / ctrl-int / 1 / controlpromptentry? prompt-id = { CONTROL_PAIR_ID} & amp; Sitzungs-ID = {CONTROL_SESSION_ID} '
Ich extrahierte die CONTROL_PAIR_ID und CONTROL_SESSION_ID, indem ich meine iPhone Wifi http Proxy-Einstellungen auf meinem Mac mit Fiddler darauf eingestellt und die alte appletv Remote-App aktiviert und die Anfragen der App ausgeführt hat
Wenn Sie nicht wissen, wie Sie iphone auf Fiddler einstellen, können Sie es hier finden: Ссылка
Tags und Links reverse-engineering tvos apple-tv remote-control