Un Raspberry Pi comme serveur Apple TV

Depuis quelques semaines, il est possible de « hacker » l’Apple TV sans jailbreak, et d’afficher n’importe quelle vidéo dans l’appareil d’Apple, si fermé au départ. Je vous propose donc aujourd’hui une « proof of concept » avec un Apple TV et un Raspberry Pi.
Trailer

La théorie est simple : l’application Bandes-Annonces de l’Apple TV se connecte à Internet et affiche des données issues de chez Apple. Il suffit donc d’intercepter le trafic et de remplacer les données par… ce que l’on veut.

Ce que je vais montrer ici est un simple test, il est bien évidemment possible de modifier la présentation. J’ai utilisé AppleTVdns, un petit programme simple à mettre en oeuvre. Pour les amateurs, il suffit de modifier le contenu du dossier assets pour modifier la présentation, c’est du simple XML avec quelques images.

PlexConnect utilise la même technique, pour les amateurs.

Première étape sur le Raspberry Pi (je suppose que vous savez vous connecter), récupérer le programme.

wget https://github.com/shaohua/AppleTVdns/archive/master.zip
unzip master.zip
rm master.zip

Maintenant, on va simplement utiliser notre IP. La première commande permet de récupérer l’IP du Raspberry Pi, il faut entrer l’IP dans le fichier de la seconde commande. Je vous conseille de mettre les DNS du FAI à la troisième ligne, ceux de Google ralentissent parfois le chargement des vidéos sur l’Apple TV.

ifconfig
nano AppleTVdns-master/atv.js
nano AppleTVdns-master/utils.js

Pour tester, il faut mettre une vidéo dans le dossier assets, sous le nom test.m4v. Je vous laisse le choix, n’importe quel vidéo en H.264/AAC dans un conteneur MP4/M4V devrait passer.

Maintenant, il faut installer node.js.

sudo mkdir /opt/node
wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz
tar xvzf node-v0.10.2-linux-arm-pi.tar.gz
sudo cp -r node-v0.10.2-linux-arm-pi/* /opt/node
rm node-v0.10.2-linux-arm-pi.tar.gz
rm -r node-v0.10.2-linux-arm-pi

Maintenant, il suffit de lancer le programme.

cd AppleTVdns-master
sudo /opt/node/bin/node atv.js

Si vous avez une erreur, pensez à désactiver Apache s’il est installé, avec la commande suivante.

sudo /etc/init.d/apache2 stop

C’est terminé (et c’est assez simple).
On passe à l’Apple TV.

Il faut simplement aller mettre l’adresse IP du Raspberry Pi comme DNS dans l’interface de l’Apple TV et ensuite il suffit d’aller dans l’application Bandes-annonces et — miracle — ça fonctionne.

Une petite vidéo pour montrer ce que ça donne. Par défaut, il y a un film (Tron) et une série (Big Bang Theory), mais c’est modifiable, comme expliqué plus haut.

Au final, c’est intéressant pour préparer une liste de vidéos en local, pour faire des présentations sans machines avec iTunes, etc. Pour le moment, ça fonctionne dans la bêta d’iOS 7 (Apple TV 5.4), mais Apple risque tout de même de bloquer ça.