J’utilise RadioDroid pour écouter la radio sur mon smartphone : application opensource, sans tracker, et tout à fait fonctionnelle, même si l’ergonomie et le design sont assez basiques, tout comme mes besoins d’ailleurs : écoute, réveil et minuterie pour mise en veille (j’aime bien écouter la radio pour m’endormir).
L’application officielle du groupe Radio France est certes beaucoup plus jolie et attractive, plus complète aussi puisqu’elle gère les podcasts, mais aussi bourrée de trackers et demandant beaucoup [trop] de permissions.
Or, depuis environ un an, quand on écoute une station du groupe Radio France sur RadioDroid, on a droit à une publicité de 30 secondes. On trouve cette explication sur cette page du site du médiateur :
La publicité digitale sur l’ensemble des leviers (podcast, display, vidéo) reste modérée avec une approche visant à préserver nos utilisateurs des formats les plus intrusifs et à limiter le nombre d’emplacements ou de messages proposés. Ainsi, Radio France vient de faire le choix de proposer aux annonceurs un emplacement en ouverture des directs écoutés en dehors de son application et de son site web radiofrance.fr. Cet espace reste limité à la fois par le format à 30 secondes, à un seul annonceur par séquence d’écoute et à 3 messages publicitaires par jour maximum. Pour une écoute sans publicité au lancement de votre direct, nous vous invitons à télécharger l’application Radio France.
L’incitation est claire : utiliser notre application, sinon vous aurez de la pub ! Merci le service public, qui peut ensuite monnayer les données recueillies par les trackers de l’application. 🙁
Voyons un peu cela et comment contourner ces publicités. Ça a été un peu compliqué que prévu, mais pas inintéressant… On verra aussi comment fonctionne le protocole HLS (HTTP Live Streaming) et ses fichiers M3U8 utilisée par Radio France.
Les Flux
Pour faire simple, il suffit d’utiliser le même flux que l’application officielle pour ne pas avoir ces pubs.
Si votre application utilise un flux du genre : https://icecast.radiofrance.fr/franceinter-midfi.mp3, ou https://icecast.radiofrance.fr/franceinfo-hifi.aac, soit les flux historiques que l’on retrouve un peu partout, alors on a droit aux 30 secondes de publicité.
Par contre, l’application officielle utilise désormais ce genre d’adresse : https://stream.radiofrance.fr/franceinter/franceinter_hifi.m3u8, et là il n’y a pas de pub… Voir en fin d’article pour un peu d’explication à propos de ces nouveaux liens de type m3u8.
On peut trouver une liste des flux m3u8 de Radio France sur cette page. Ils sont donnés pour les enceintes Bose, mais on peut s’en servir comme référence, et c’est parfait. 😎
Et vu que dans Radiodroid, on peut exporter ses favoris (dans un fichier playlist.m3u
classique), je me suis dit qu’il était alors facile et rapide de mettre ce fichier à jour avec les nouveaux liens ! Mais bon, ça n’a pas été aussi simple : car en plus de l’adresse du flux, RadioDroid utilise un UUID (Unique Identifier) pour chaque radio. Si vous ne modifiez que le flux, l’UUID fera en sorte que l’ancien flux sera rétabli. 🙁
Radio Browser
Revenons à RadioDroid : cette application utilise une base de données mondiale pour les radios : Radio Browser. Elle est maintenue par la communauté (comme Wikipedia) et contient environ 50 000 entrées, soit presque autant stations radio à travers le monde. Je dis presque autant, car pour des raisons de sécurité, cette base est protégée en écriture, et on ne peut donc pas simplement mettre à jour les liens existants avec ces nouveaux liens m3u8. 🙁
On peut par contre facilement ajouter une nouvelle station (sur cette page). Un bien pour un mal, puisque l’on se trouve avec plusieurs entrées pour la même radio, plus ou moins bien renseignée (notamment les tags, mais aussi la pochette, etc…), ce qui complique leur identification : laquelle contient un flux de type m3u8 ?
J’ai fini par créer de nouvelles stations pour celles qu’il me fallait, en ajoutant les tags « m3u8 » et « hls », et en remplissant soigneusement toutes les autres informations. Restait à les intégrer dans RadioDoid.
Démonstration
Voilà par exemple mes favoris avec RadioDroid : vous remarquerez au passage l’interface très basique de l’application…
On exporte d’abord ces favoris (en haut à droite les 3 points, puis « Exporter les favoris comme liste de lecture ». On obtient un fichier playlist.m3u
qu’il suffit ensuite d’éditer, et qui contient 3 lignes de ce genre pour chaque station :
#RADIOBROWSERUUID:a2a2ff62-d40c-4cdb-92ee-c55349e5c716
#EXTINF:-1,FranceInter
J’ai donc des flux sont soit de type mp3, ou aac, selon la station choisie au hasard dans la base de Radio Browser. Pour ceux-là, on aura donc 30s de pub. On peut aussi y trouver les flux en m3u8, mais comme expliqué plus haut ce n’est pas évident de les identifier. On voit aussi la ligne avec un paramètre RADIOBROWSERUUID
avec une valeur unique.
Le plus simple que j’ai trouvé est alors de chercher sur le site de Radio Browser la station qui contient le bon flux : on cherche par exemple « France Inter », on obtient une liste : parmi celle-ci, on choisit celle qui a l’air de convenir (en fonction des tags). Voilà par exemple celle que j’ai créé (avec des tags HLS ou m3u8) :
En cliquant sur la station, on obtient les détails, et le fameux UUID est alors visible dans la barre d’adresse :
Il s’agit bien d’un lien de type m3u8, donc tout va bien. Et cerise sur le gâteau, dans la barre d’adresse, on a le fameux UUID de la station. Il ne reste plus qu’à modifier notre fichier à la main, en modifiant le flux m3u8 ET l’UUID correspondant :
#RADIOBROWSERUUID:d41cd653-89f0-4ca9-b849-70ce516e8a99
#EXTINF:-1,FranceInter
https://stream.radiofrance.fr/franceinter/franceinter_hifi.m3u8
On fait la même chose pour toutes les stations que l’on souhaite avoir dans ses Favoris. Et si on ne trouve pas ce que l’on souhaite, on peut toujours créer la station. On obtient un nouveau fichier playlist.m3u
pour RadioDroid.
Il suffit alors de supprimer les favoris existants dans RadioDroid, puis d’y importer cette nouvelle liste. Et voilà ! 😎
Voilà le contenu de mon fichier final :
#EXTM3U
#RADIOBROWSERUUID:d41cd653-89f0-4ca9-b849-70ce516e8a99
#EXTINF:-1,France Inter
https://stream.radiofrance.fr/franceinter/franceinter_hifi.m3u8
#RADIOBROWSERUUID:7b6aca3d-dfa3-47dd-9f57-820b04c3f339
#EXTINF:-1,FIP
https://stream.radiofrance.fr/fip/fip.m3u8
#RADIOBROWSERUUID:10652211-3b97-411b-ab87-128be29356ac
#EXTINF:-1,France Culture
https://stream.radiofrance.fr/franceculture/franceculture.m3u8
#RADIOBROWSERUUID:53d9ba48-ff38-45f7-9cb8-4838c9de2fd4
#EXTINF:-1,France Musique
https://stream.radiofrance.fr/francemusique/francemusique.m3u8
#RADIOBROWSERUUID:ab6a33e5-e8b5-4cf4-bfb7-ec0ae779cb7c
#EXTINF:-1,France Info
https://stream.radiofrance.fr/franceinfo/franceinfo_hifi.m3u8
Et voilà ce que ça donne dans RadioDroid :
Voilà, vous trouverez ci-dessous quelques infos complémentaires sur les podacasts, puis les trackers de l’appli de Radio France, et enfin le format m3u8.
Podcasts
L’application de Radio France gère aussi les podcasts, et apparemment il n’y a pas de solution facile comme ci-dessus pour éviter les messages publicitaires.
Mais j’utilise une application dédiée AntennaPod qui me convient parfaitement (open source, ads free, etc…), et elle permet de s’affranchir assez facilement des pubs.
Quand un podcast commence par un message publicitaire, on peut soit paramétrer l’abonnement pour qu’il effectue un saut automatique au début de chaque épisode (meilleure solution). Ou alors, au démarrage du podcast, on peut utiliser le bouton « saut avant » en l’ayant auparavant paramétré à la valeur de 30s.
Les données Exodus
Comparons un peu les deux applications selon l’analyse qu’en fait l’excellent Exodus :
Comme on peut le voir, il n’y a pas photo entre les deux applications. Les trackers problématiques de Radio France sont essentiellement de ce type :
- Profiling : ces pisteurs ont vocation à récupérer un maximum d’informations sur la personne qui utilise une application afin d’en construire un profil virtuel. Pour ce faire, ce type de pisteur va, par exemple, s’intéresser à l’historique de navigation ou encore à la liste des applications installées, etc.
- Ads : ces pisteurs ont pour but de d’identifier la personne qui utilise une application afin de lui présenter de la publicité ciblée. Cela n’est rendu possible et pertinent que si cette personne dispose déjà d’un profil virtuel. L’objectif pour la personne incluant ce type de pisteur est de monétiser son application, c’est-à-dire de gagner de l’argent grâce à la publicité.
Je ne veux pas d’applications de ce genre sur mon téléphone.
Le format M3U8
On connaît le format de fichier m3u utilisé depuis longtemps pour les playlists audio, qui contient typiquement une liste de fichiers mp3. Le format M3U8 est un nouveau format, avec des extensions multimédia, ainsi que des informations temps réel, le tout codé en UTF-8. Il fonctionne avec la plupart des lecteurs modernes (vidéo, audio). Enfin, c’est le format utilisé par HLS.
HLS (HTTP Live Streaming)
HLS est un protocole de streaming basé sur HTTP. Il a été créé par Apple à l’origine, avec en tête les objectifs suivants : devoir fonctionner parfaitement sur tous les appareils et tous les types de réseaux, qu’il s’agisse de connexions mobiles lentes, de WiFi (en adaptant le débit grâce à l’Adaptive bitrate streaming), et savoir passer les pare-feux : et pour ce dernier point, le protocole HTTP est parfait.
Il fonctionne en segmentant le flux multimedia en une séquence de petits fichiers ( .ts ou MP4 iso segments). Et ces fichiers sont ensuite lus dans une liste de lecture de type M3U8 (tout comme on lisait une liste de fichiers mp3 dans un fichier m3u).
Si on récupère le fichier franceinter_hifi.m3u8
et qu’on en examine le contenu, on voit quelque chose de ce genre (à l’instant « t ») :
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1985748
#EXT-X-TARGETDURATION:4
#EXT-X-START:TIME-OFFSET=0
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:09Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985748.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:13Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985749.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:17Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985750.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:21Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985751.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:25Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985752.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:29Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985753.ts
#EXT-X-PROGRAM-DATE-TIME:2024-11-02T10:27:33Z
#EXTINF:4.000,
/msl4/franceinter/prod1transcoder2/franceinter_aac_hifi_4_1722600237_1985754.ts
On y voit un header, avec notamment un TARGETDURATION
égal à 4, soit 4 secondes pour la durée maximale de chaque fichier. Puis une suite de fichiers en .ts
, avec chacun une durée 4 secondes (EXTINF:4.000
).
Et si on ouvre dans Firefox le lien m3u8 de France Inter (après avoir installer une extension HLS, on peut (dans la console) voir toutes les 4 secondes une nouvelle requête pour demander le prochain morceau du flux radio :
On voit donc comment tout cela fonctionne : de tout petits fichiers d’une durée de 4 secondes, et autant de requêtes au fur et à mesure des besoins, en incrémentant le nom du fichier (xxx917.ts puis xxx918.ts, etc…).
Concernant le côté « adaptation à la bande passante », je ne sais pas comment fonctionne les flux de Radio France. Ce sont des flux audio, ce n’est peut-être pas du tout géré.
Pour les vidéos, il y a deux choses à savoir : l’encodeur côté serveur doit fournir plusieurs flux à différentes résolutions d’une part, et côté client l’application s’adapte grâce à un autre fichier m3u8 appelé « Master Playlist » ou fichier d’index, qui liste les différents flux disponibles, comme ci-dessous :
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1296,RESOLUTION=640x360
https://.../640x360_1200.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=264,RESOLUTION=416x234
https://.../416x234_200.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=464,RESOLUTION=480x270
https://.../480x270_400.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1628,RESOLUTION=960x540
https://.../960x540_1500.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2628,RESOLUTION=1280x720
https://.../1280x720_2500.m3u8
Si l’application met trop de temps à récupérer le premier morceau .ts
(plus de temps que sa durée), elle va alors basculer sur une résolution moins grande grâce à ce fichier « Master Playlist ».
Pour en savoir plus sur ce format, vous pouvez lire cet excellent article qui détaille le contenu d’un ficher.
Et pour finir, voilà aussi une bonne discussion sur linuxfr au sujet des publicités sur Radio France.