Hat jemand das von Apples iOS Remote App für die Steuerung eines Apple TV über IP verwendete Protokoll rückgängig gemacht?

9

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.

    
GuyGizmo 12.02.2016, 05:59
quelle

4 Antworten

1

Ich habe es geschafft, mein Apple TV (derzeit tvOS 9.2) von einem Python-Skript aus zu steuern. Es stellt sich heraus, dass Sie Sharing nicht verwenden müssen, damit eine Remote-App das Apple TV steuern kann. Ich weiß nicht, ob die folgende Methode funktioniert, wenn die Home-Freigabe aktiviert ist, aber auf Apple TV deaktiviert ist. Die iOS-Remote-App bietet die Möglichkeit, ein Gerät manuell hinzuzufügen. (Dies erfordert möglicherweise das Entfernen aller Geräte, mit denen es bereits gepaart ist, da dies leider notwendig war, damit die Schaltfläche "Gerät hinzufügen" angezeigt wird.) Nachdem ich mein iPhone mit dem Apple TV gekoppelt hatte, habe ich einige aufgenommen der Anfragen, kopierte die Paarungs-GUID und erstellte dann einige meiner eigenen Anfragen.

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: Ссылка

    
GuyGizmo 05.05.2016, 04:51
quelle
6

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.
  • Hier ist der Flaschenhals. /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.

    
Nicola Giancecchi 28.02.2016 23:15
quelle
1

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 : Ссылка

    
nbitto 18.11.2016 10:02
quelle
1

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: Ссылка

    
Shaybc 13.10.2017 16:24
quelle