Faisons d'abord un point sur le streaming : c'est un peu l'évolution de la télévision sur Internet, c'est-à-dire un flux qui nous est envoyé et dont la vocation première n'est pas d'être conservée.
L'avantage principal est le gain de place que ça engendre pour le client (le flux n'est pas stocké de manière permanente). Pour le diffuseur, l'intérêt est double : gain de bande passante (si un client interrompt le visionnage, il ne téléchargera pas la fin de la vidéo) et conservation du fichier initial (il peut donc faire payer le téléchargement de la vidéo ou le nombre de visionnages).
Les inconvénients sont plus nombreux pour le client : pour visionner à nouveau la vidéo, il faut recommencer l'opération (et donc consommer de la bande passante) ; la qualité est souvent moins bonne que sur un autre support (encore un problème de bande passante) ; et si la connexion se dégrade pendant la lecture, la qualité prend encore une claque (ralentissements, coupures, bugs graphiques...). Les clients de Free connaissent bien ce problème : de 19H à Minuit, il est très difficile de regarder des vidéos en streaming dans des conditions acceptables (il est très probable que l'opérateur se livre à un bridage). Le diffuseur, quant à lui, doit souvent dégrader la qualité de la vidéo afin d'économiser la bande passante. De plus, une plate-forme de streaming est plus complexe à mettre en œuvre qu'une plate-forme de téléchargement : en attendant HTML5, il faut passer par diverses technologies propriétaires (Adobe Flash, Microsoft Silverlight, etc.) pour la diffusion du flux vidéo.

De mon point de vue, je préfère souvent enregistrer ou conserver en local les données que je télécharge depuis Internet : vidéos, musiques, documents ou articles intéressants, etc. Je rapproche volontiers ce comportement avec celui de l'enregistrement d'une émission TV sur VHS ou d'un titre radio sur cassette audio. J'estime donc logique de prolonger ce comportement avec les flux diffusés en streaming sur Internet.

Cet article n'a pas vocation à être exhaustif. Il retrace juste les méthodes que j'ai employées pour enregistrer les flux vidéos ou audio que j'ai voulu conserver. A titre d'information, je n'ai jamais rencontré de flux en streaming que je ne sois pas parvenu à enregistrer et je n'ai jamais eu à déployer de techniques très poussées pour y arriver.

Stratégie

Pour arriver à enregistrer le flux que l'on souhaite conserver, il faut commencer par identifier son type (wmv, flv, mp3, flux rtmp, etc). Pour cela, le moyen le plus efficace est de jeter un oeil au code source (HTML) de la page, et notamment du côté du "player". Plusieurs cas de figure peuvent se présenter :
  • Le player (Flash ou autre) prend le nom du fichier (incluant son chemin) en paramètre et c'est lui qui gère le streaming. C'est le cas le plus simple : il suffit alors de récupérer l'URL du fichier et de le télécharger comme on le ferait avec n'importe quel autre fichier.
  • Le player prend des options bizarres en paramètre et notamment des fichiers XML. Il suffit alors bien souvent d'accéder à ces fichiers et de fouiller dedans : l'URL du fichier y figure souvent.
  • Dans certains cas, l'URL de diffusion est "obfusquée" et ne contient pas explicitement un nom de fichier avec une extension. On peut néanmoins les découvrir en regardant l'identifiant associé qui s'appelle souvent "file_url" ou toute autre dérivation du genre.

Astuces et cas particuliers

  • Ajax : Certains sites compliquent les choses en affichant leur player avec la technologie Ajax. Sous Firefox, on peut contourner ce mécanisme en sélectionnant la zone de la page qui contient le player (comme on le ferait avec du texte), en faisant un clic droit et en sélectionnant "Afficher le code source de la sélection".
  • MMS : Les vidéos diffusées par MMS sont enregistrable avec le logiciel VLC via l'option "Diffuser". Dans la majorité des cas, l'URL commence par "mms://" et se termine par ".wmv". Il peut suffire de remplacer "mms://" par "http://" et le fichier est alors téléchargeable comme un autre.
  • Cas des flux RTMP : C'est le cas le plus délicat que j'ai rencontré jusqu'ici. Il s'agissait d'un player flash prenant un simple identifiant en paramètre pour diffuser la vidéo. Le contournement est assez simple : à l'aide du logiciel de capture Wireshark, j'ai pu identifier simplement(1) le type de flux utilisé (RTMP en l'occurrence) et l'adresse IP du serveur ainsi que l'URL du flux. J'ai ensuite utilisé flvstreamer(2) qui permet de télécharger un flux RTMP.
  • Authentification : Certains flux requièrent une authentification afin d'éviter les téléchargement "sauvages" ou automatiques (bots). Il s'agit souvent d'un ou plusieurs éléments générés dans la page HTML et envoyés en même temps que l'URL, sous forme de paramètres, de cookies, d'en-têtes spécifiques, etc. Si l'URL est obfusquée ou s'il y a d'autres paramètres après le nom du fichier, il vaut mieux tout garder pour éviter ce genre de soucis. Le procédé est néanmoins assez rare.



---
(1) A savoir que cette technique, bien qu'un peu lourde, fonctionne dans tous les cas de figure : en capturant le flux réseau et en décodant les informations qu'il contient, on arrive toujours à identifier la source et le type du flux.

(2) Il m'est arrivé d'avoir des erreur de téléchargement avec ce logiciel : ERROR: RTMP_ReadPacket, failed to read RTMP packet header Le téléchargement était alors interrompu et le fichier était stocké en l'état. J'ai résolu le problème en plaçant la commande dans une boucle :
for /L %i in (1,1,20) do flvstreamer_win32_latest.exe -r rtmp://host[:port]/path -o fichier.avi -e
De cette manière, tant que le fichier n'est pas entièrement téléchargé, le téléchargement est retenté. (Dans l'exemple ci-dessus, on essaie 20 fois)