Ce document explique comment obtenir un accès plein et entier à l’ensemble de l’offre de tou.tv à travers son site mobile en utilisant uniquement du logiciel ouvert. La méthode proposée n’est ni agréable d’utilisation ni élégante, mais reste, au moment d'écrire ces lignes (2013-01-30), pleinement fonctionnelle, fiable, et la seule qui existe à ma connaissance sur des plates-formes entièrement ouvertes.

Quelques Mots

And all this nonsense over a crappy-ass protocol that never deserved to exist in the first place. Some folks really need to step back and get some perspective on life. This project isn’t worth getting so worked up over. It’s hardly worth the effort of working on it at all, and worth even less as time goes by and Adobe Flash/RTMP goes extinct.

Howard Chu (maintainer of rtmpdump)

En cette fin d’automne 2012, j’aurai reçu un volume conséquent de courriels m’informant que la méthode précédemment exposée pour avoir accès à tou.tv ne fonctionnait plus: c’est rigoureusement exact. Après un examen sommaire des changements apportés au site, j’en suis venu à la conclusion que si il m'était vraisemblablement possible de la mettre à jour au prix d’un effort conséquent, les nouvelles méthodes de contrôle semblant à ma grande surprise faire un usage approprié de codes d’authentification, il m'était beaucoup plus facile de tout récrire en passant plutôt par le site mobile, m.tou.tv.

En effet, avec la forte croissance de l’accès Internet mobile par téléphone intelligent et tablettes en tout genre, la Société Radio-Canada s’est dotée d’un site spécifique pour ces appareils, généralement allergiques à Flash, n’utilisant à l’interne que des standards bien documentés. L’existence en code ouvert du moteur de rendu de pages Web WebKit, prévalent dans l’Internet mobile, nous rend la tâche d’autant plus aisée.

La Procédure d’accès

Attention
La méthode exposée ci-bas et les scripts l’accompagnant sont fonctionnels au moment d'écrire ces lignes (2013-01-30), mais constituent uniquement des démonstrations de faisabilité qui s’adressent à un public averti et éduqué. Les scripts exploitent entre autre des spécificités UNIX que l’auteur n’a aucunement l’intention de gommer. L’auteur ne s’engage pas non plus à les maintenir à jour.

Obtenir accès au contenu se fait en deux temps:

  1. Utiliser un fureteur basé sur WebKit et correctement configuré pour récupérer une liste de lecture M3U sur le site mobile correspondant à l'émission qu’on désire récupérer.

  2. Télécharger et décrypter le contenu de la liste de lecture.

Étape 1: Récupérer la liste de lecture

Le site mobile de tou.tv supportant pleinement les appareils tournant sous IOS (iPhone, iPod Touch, iPad, etc.) produits par Apple, il s’agit dans un premier temps de configurer un fureteur basé sur WebKit pour qu’il se fasse passer pour un tel engin, en changeant simplement son User-Agent. Référez-vous en à la documentation spécifique de votre fureteur: j’ai utilisé pour ma part, autant pour sa simplicité que sa légèreté, Midori 0.4.7, compilé contre WebKitGTK+ 1.8.3 sans support gstreamer, qui permet ce réglage via Preferences > Network > Identify as.

J’ai ensuite adapté un court serveur mandataire web, proxy.py (version mise en couleur, code original), dont l’unique travail consiste à récupérer le moment venu le fragment pertinent de communication entre le site mobile et le fureteur (contenant essentiellement la liste de lecture et les témoins), et de le stocker sur disque (sous /tmp, lire la sortie console pour connaître l’emplacement exact). En plus de lancer ce serveur mandataire, il vous faut évidemment configurer votre fureteur pour l’utiliser; encore une fois, voir la documentation spécifique de votre fureteur. Dans mon cas, il suffisait d’aller sous Preferences > Network > Proxy Server, de sélectionner HTTP proxy server, avec un hostname correspondant au localhost (127.0.0.1), sur le port 8000.

Note
Soyez conscient que si vous utilisez WebKitGTK+, le support HTTP proxy de libsoup a subit de nombreux changements durant la dernière année, et que plusieurs bogues y ont été tour à tour introduits et corrigés: au meilleur de ma connaissance, tout fonctionne correctement à partir de la version 2.38.1.

Une fois que vous avez fait ces deux réglages et lancé le serveur mandataire dans une console, il ne vous reste plus qu'à aller récupérer la liste de lecture qui vous intéresse à partir de m.tou.tv. Aussitôt que vous appuierez le bouton play sur votre émission d'élection, une liste de lecture vous sera envoyée (le plus souvent nommée master.m3u), et un fragment similaire à celui-ci sera stocké sous /tmp.

Étape 2: Télécharger et décrypter le contenu de la liste de lecture

Il vous faut ensuite une routine qui lise ce fragment, et soit en mesure de reproduire avec exactitude le comportement d’accès à la liste de lecture précédemment transmise. J’ai ainsi rédigé un autre script, m3udump.py (version mise en couleur, code original), qui s’occupe:

  • de sélectionner le flot de plus haute qualité disponible,

  • d’aller chercher la description de l’ensemble des segments composant l'émission et la clef de décryption,

  • de télécharger ces segments,

  • et finalement de les ré-assembler et de décrypter le tout à travers OpenSSL.

Je vous invite à lire le code, largement commenté, pour connaître tous les détails techniques. Pour vous lancer, il peut être utile de savoir qu’Apple a produit une excellente introduction au fonctionnement du HTTP Live Streaming ici utilisé.

Le produit final du script est un fichier, nommé out_final.ts par défaut, qui est un MPEG transport stream décrypté, contenant typiquement une piste vidéo H.264 et un piste audio AAC, lisible par de nombreux lecteurs ouverts, tel MPlayer par exemple. Une dernière astuce: si on veut retrouver une table de temps utilisable (pour se promener facilement dans le fichier par exemple), il peut s’avérer utile d’effectuer un transcodage non déperditif, comme ici avec ffmpeg:

ffmpeg -i out_final.ts -acodec copy -vcodec copy out_final.avi

Conclusion

Digital files cannot be made uncopyable, any more than water can be made not wet.

À la lecture de ce document, on ne peut que constater le ridicule, voire l’absurdité de la situation: pour lire les contenus de tou.tv sur une plate-forme ouverte, il est pour le moment nécessaire de se faire passer pour un produit commercial fermé utilisant lui-même des technologies totalement ouvertes et parfaitement documentées pour se faire!

La situation présente est loin d'être idéale: d’un côté, on comprendra parfaitement le besoin de la société d'État de rassurer ces ayant droits, et de vouloir d’exercer un certain contrôle sur la diffusion de sa production (ou au moins une illusion de contrôle, comme en fait foi ce document). De l’autre, on ne peut pas vouloir vivre dans une dystopie où seulement des ordinateurs "non-génériques" permettraient l’accès à ce genre de source.

À la lumière de tout ceci, on ne peut qu’encourager fortement la Société Radio-Canada à revoir ses positions, et à commencer à offrir tout bonnement la vidéo sur demande en téléchargement, sans gestion numérique des droits, comme elle le fait déjà via la balladodiffusion pour un large éventail de ses contenus audio, et comme elle le fait ipso facto pour une minorité techniquement moins démunie. Notons au passage que ceci n’exclurait évidemment pas une monétisation des diffusions, via par exemple des micro-paiements.