plugin.video.auvio icon indicating copy to clipboard operation
plugin.video.auvio copied to clipboard

streamer les médias protégés par DRM

Open rickybiscus opened this issue 6 years ago • 30 comments

les médias protégés par DRMs ne sont actuellement pas jouables. En attendant de trouver une manière de résoudre cela, j'ai mis un popup temporaire quand on essaie d'en lancer.

rickybiscus avatar Apr 05 '18 13:04 rickybiscus

@Nux007 https://github.com/rickybiscus/plugin.video.auvio/issues/5#issuecomment-378956239

Je ne suis pas sur que ca vait le coup de se casse la tête sur les DRM, regarde en milieu d'article ici https://kodi.tv/article/kodi-v18-leia-story-so-far

Ah, ils prévoient d'implémenter un système de gestion de DRMs..Cool. Mais on ne sait ni comment, ni quand :)

En fait il faudrait déjà comprendre comment fonctionne celui d'Auvio.

J'arrive à obtenir, par média, plusieurs URLs freecaster.net (mp4,m3u8, etc), mais quand j'y accède ça me retourne des erreurs 403 (non autorisé) quand il y a une protection DRM. Peut être qu'il suffit juste de faire la requête avec un header, ou d'ajouter un argument à l'URL, ou quelque chose comme ça.... Mais là je sèche !

Ce qui est embêtant c'est qu'une grosse partie de leur contenu est protégée avec du DRM. Du coup y'a beaucoup de trucs qu'on ne peut plus regarder pour l'instant...

rickybiscus avatar Apr 05 '18 15:04 rickybiscus

Apparemment ce serait en utilisant les CDM de Chrome, je vais tester ca, pour les requêtes, ca ne devrait pas trop être compliqué à tester non plus, maintenant reste à savoir si ca vaut vraiment la peine puisque kodi 18 arrive ( en principe ) bientôt ...

Nux007 avatar Apr 05 '18 16:04 Nux007

Bon, j'ai testé le dernier build de Kodi 18, ton addon fonctionne nickel ( bonne nouvelle ) mais les liens protégés ne fonctionnent pas, donc il faudrait trouver une solution, tu as déjà chipoté aux DRMs toi ?

Nux007 avatar Apr 05 '18 17:04 Nux007

@Nux007 Cool :)

Non, je découvre les (l'envers des) DRMs. J'ai compris plusieurs choses.

En fait, les fichiers vidéos directs (mp4, etc) des médias protégés retournent des erreurs 403 (j'ai donc désactivé le download pour ces médias).

https://github.com/rickybiscus/plugin.video.auvio/commit/bb3bd8b6c8f1c20c2d2505cc5611e6e4e8abace7

MAIS on a bel et bien accès aux fichiers "playlists" .mpd (MPEG-DASH) & .m3u8, qui permettent de streamer le média découpé en une série de petits fichiers; si une authentification valide y est associée.

Je suppose que ce que Kodi va implémenter, c'est la possibilité de joindre cette authentification quand on fait une requête vers ce fichier playlist (à vérifier).

Il y a plusieurs standards de DRM si j'ai bien compris. Celui utilisé par Auvio est Widevine. La fonction get_drm_media_auth de l'addon permet de récupérer le XML d'authentification nécessaire. Il le retourne encodé en base64.

https://github.com/rickybiscus/plugin.video.auvio/blob/bb3bd8b6c8f1c20c2d2505cc5611e6e4e8abace7/lib/api.py#L240

On a donc, à priori, tout ce qu'il faut pour permettre le stream. Reste à implémenter cela.

J'ai trouvé plusieurs outils en ligne qui permettent de tester le mpd + licence, mais la plupart requièrent une URL de licence alors que nous récupérons une chaîne base64.

Le premier permet exactement ce qu'on aurait besoin (mpd+base64), mais il est buggé... Je n'ai donc pas encore pu vérifier si la combinaison mpd + chaîne d'authentification (telle que générée par l'addon) fonctionne.

  • https://www.buydrm.com/multikey-demo
  • https://bitmovin.com/mpeg-dash-hls-drm-test-player/
  • http://dashif.org/reference/players/javascript/v2.4.1/samples/dash-if-reference-player/index.html

Voilà pour les premières pistes.

Je vais faire une pause sur tout ça, j'ai trop bossé là-dessus !

rickybiscus avatar Apr 05 '18 17:04 rickybiscus

Je vais regarder de mon coté, ca me rassure qu'on soit arrivés identiquement à la même conclusion :-), je venais d'ailleurs t'en faire part mais tu m'as devancé lol

Nux007 avatar Apr 05 '18 17:04 Nux007

Regardes comment le plugin Netflix est construit ... un piste sérieuse je pense https://github.com/asciidisco/plugin.video.netflix ( lis le README ) PS: je n'ai pas beaucoup de temps la semaine prochaine, j'essaierai d'y regarder en soirée...

Nux007 avatar Apr 05 '18 17:04 Nux007

Salut,

Je ne sais pas si ça peut vous être utile mais je remarque ceci. Après la récupération du master.mpd des requêtes POST sont faites vers l'url suivante

POST / HTTP/1.1 Host: wv-keyos.licensekeyserver.com Accept: / Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br customData: grande chaine base64 Content-Length: 2 Origin: https://www.rtbf.be DNT: 1 Connection: keep-alive

le header customDate contient une chaîne en base 64 qui décodée est un xml <?xml version="1.0"?><KeyOSAuthenticationXML>...</KeyOSAuthenticationXML> ça semble être votre chaîne d'auth en base 64?

le retour de l'appel est une chaîne binaire qui contient, entre autres, cette string "license.widevine.com"

darodi avatar Apr 06 '18 14:04 darodi

Bonjour @darodi, Bonne observation. Tu as vu cela dans l'inspecteur de chrome ? Je pense que la chaîne retournée correspond à celle que retourne notre fonction get_drm_media_auth https://github.com/rickybiscus/plugin.video.auvio/issues/9#issuecomment-379017922, mais cela n'a pas encore pu être testé... Merci pour le feedback !

rickybiscus avatar Apr 10 '18 07:04 rickybiscus

Salut @darodi ,

Je pense que t'étais sur la bonne piste avec ta pull request mais il te manque quelques éléments.

  1. RTBF utilise des AES-SAMPLE avc les HLS et ce n'est donc pas supporter par le plugin inputstream.adaptive. Il faut utiliser les url dash avec mpd.
  2. je ne pense pas que les librairies que tu utilises avec inputstream.adaptive sont les bonnes. il faut les librairies widevine (pour plus de faciliter tu peux utiliser le plugin inputstream helper https://github.com/emilsvennesson/script.module.inputstreamhelper pour installer les librairies correctes.)

Si j'ai le temps je changerai tes fichiers pour faire un test

Gaet81 avatar Apr 16 '18 17:04 Gaet81

Oh yes ! Allez-y les mecs !!!

rickybiscus avatar Apr 22 '18 12:04 rickybiscus

Hello @rickybiscus,

Le code de @darodi fonctionne parfaitement sur le non direct. J'ai fait des essais pour le dirct avec le mpd mais j'ai une erreur sur une URL. J'ai ouvert une issue pour en savoir plus https://github.com/peak3d/inputstream.adaptive/issues/143

Gaet81 avatar Apr 22 '18 20:04 Gaet81

Hello, effectivement ! @darodi , peux-tu nous en dire plus ? Pourquoi as-tu "fermé" ta pull request ? Quelque chose ne marchait pas ?

Aussi, je vois que tu as rajouté ou restauré la méthode get_video_detail qui appelle l'API de la RTBF (pas celle d'Auvio même). Il y a t-il un intérêt à cela ? Je pense qu'Auvio n'utilise que l'API d'Auvio...

En tout cas, dans le code de l'application Android, c'est la propriété url_streaming > url_dash de laquelle est extraite l'URL du flux *.mdp (que l'ont peut récupérer via get_media_details). Il semble aussi que la propriété drm_key_public_keyos soit exploitée quelque part.

rickybiscus avatar Apr 22 '18 20:04 rickybiscus

La release 3.1.6 profite d'une trouvaille de @darodi (une adresse de flux media non protégée par DRM) pour régler le problème ! MAIS ça ne va sans doutes pas durer longtemps. Il faudra tout de même arriver à générer nos licences DRMs tôt ou tard. Quelqu'un veut s'y coller ?

rickybiscus avatar Apr 23 '18 10:04 rickybiscus

Je confirme que cette démo permet bien de vérifier que notre combinaison URL + licence DRM fonctionne... Et elle fonctionne :)

  • Authentication XML: chaîne reçue par notre fonction get_drm_media_auth
  • Source URL: *.mpd / de la propriété url_streaming > url_dash reçue via notre fonction get_media_details ATTENTION sur la page de ce site, remplacer http:// dans l'adresse de notre flux par https:// (sinon le navigateur bloque à cause d'une requête XMLHttpRequest non sécurisée)

Il faut maintenant réussir à l'implémenter dans le plugin...

rickybiscus avatar Apr 23 '18 15:04 rickybiscus

Hello @rickybiscus,

Il semble aussi que la propriété drm_key_public_keyos soit exploitée quelque part.

T'as pu trové plus d'info à ce propos ou tester ça?

Gaet81 avatar Apr 26 '18 06:04 Gaet81

Non. Mais je ne suis pas sûr que ce soit exploité finalement, seulement référencé ? Tu peux fouiller dans le code de l'application Auvio android, ici décompilé : https://gofile.io/?c=VOYxpW

rickybiscus avatar Apr 26 '18 08:04 rickybiscus

Merci pour votre formidable plugin. Je confirme que les flux DRM ne fonctionnent hélas plus (suis sur la version 3.1.7). Ce serait super de trouver une solution pour la coupe du monde :-) Mais hélas, je peux pas vraiment aider, mes connaissances de dev sont assez limitées...

didjean avatar May 27 '18 21:05 didjean

Effectivement :/ Je pense que la RTBF a dû terminer la migration DRM et désactiver notre "roue de secours".

Il faut désormais se baser sur l'URL protégée par DRMs (propriété url_hls) mais sans la "rustine" du commit https://github.com/rickybiscus/plugin.video.auvio/commit/f766935ab2baad5fd0fc7010717d3681cdfde7ce. Pour info, cette rustine altérait notre URL url_hls pour être raccord avec l'URL sans DRMs retournée par l'ancienne API RTBF à cet endpoint. Cette propriété-là (urlHlsAes128) retournait une URL media non protégée - et n'est désormais apparemment plus définie.

@darodi, @Gaet81 , @Nux007 ?

rickybiscus avatar Jun 04 '18 08:06 rickybiscus

Hello,

L'url_hls utilis un encodage SAMPLE-AES qui n'est pas supporté par l'add-on inputstream.adaptive. L'urlHlsAes128 est bien supporté ce qui fait que l'on peut lire les flux non live avec DRM lorsque cette url est disponible.

Mais pour les flux live il n'y a pas de flux urlHlsAes128. Il y a un flux mpd qui est supporté aussi mais je n'arrive pas à obtenir la clé via le site http://wv-keyos.licensekeyserver.com/ j'obtiens toujours une erreur 403.


De : rickybiscus [email protected] Envoyé : lundi 4 juin 2018 10:14 À : rickybiscus/plugin.video.auvio Cc : Gaet81; Mention Objet : Re: [rickybiscus/plugin.video.auvio] streamer les médias protégés par DRM (#9)

Effectivement :/ Je pense que la RTBF a du terminer la migration DRM et désactiver notre "roue de secours".

Il faut désormais se baser sur l'URL protégée par DRMs (propriété url_hls) mais sans la "rustine" du commit f766935https://github.com/rickybiscus/plugin.video.auvio/commit/f766935ab2baad5fd0fc7010717d3681cdfde7ce. Pour info, cette rustine altérait notre URL url_hls pour être raccord avec l'URL sans DRMs retournée par l'ancienne API RTBF à cet endpointhttp://www.rtbf.be/api/media/video/?method=getVideoDetail&args%5B%5D=MEDIAIDHERE. Cette propriété-là (urlHlsAes128) retournait une URL media non protégée - et n'est désormais apparemment plus définie.

@darodihttps://github.com/darodi, @Gaet81https://github.com/Gaet81 , @Nux007https://github.com/Nux007 ?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/rickybiscus/plugin.video.auvio/issues/9#issuecomment-394271161, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AVV9oTaknIA4YHWwAWDwLUEH11_EEIW3ks5t5OxrgaJpZM4TId-y.

Gaet81 avatar Jun 04 '18 21:06 Gaet81

@Gaet81 : (pour info, l'urlHlsAes128 utilisé précédemment n'était PAS protégée par DRMs). Et sinon, tu devrais pouvoir obtenir les clés correctes via le code déjà implémenté dans le plugin, voir ce commentaire : https://github.com/rickybiscus/plugin.video.auvio/issues/9#issuecomment-383615590

rickybiscus avatar Jun 05 '18 06:06 rickybiscus

Bonjour à tous,

Bravo pour cet super add-on ; auvio est vraiment une super plateforme de la RTBF, et pouvoir en profiter sur Kodi, c'est top!

Je confirme malheureusement que les directs avec DRM (genre, en ce moment : Roland Garros! :-) ) ne fonctionnent pas, même avec un log in en bonne et due forme...

... vous êtes toujours sur le coup? Il y a qqch à faire pour vous aider? c'est que la coupe du monde approche à grands pas :-))).

Un indice : sur certains browsers 'exotiques' avec Auvio (ex. Opera sur smart TV), on a un message d'erreur disant que le contenu ne peut être lu hors de Belgique (même après log in, et même bien sûr en se trouvant en Belgique) . Peut-être Auvio requiert-il une géolocalisation en plus du login??

Bien cordialement,

B.

bertydl avatar Jun 08 '18 13:06 bertydl

Toujours pas de solutions en vue? Avec le match de lundi, ca aurait été sympa de pouvoir utiliser le plugin... :-)

didjean avatar Jun 15 '18 18:06 didjean

Bonjour Comment atteindre le répertoire archives sur Auvio via Kodi disponible sur Auvio via portable (samsung s9)

gbonemme avatar Mar 04 '19 13:03 gbonemme

@rickybiscus : Kodi 18 supporte maintenant les flux proteger par drm. Je regarderai au mois de mai pour faire fonctionner. Pour example, j'utiliserai l'addon netflix et primevideo qui fonctionne avec Netflix. Toute information de ta part est la bienvenue sur ce sujet ^^'.

zopanix avatar Apr 22 '19 00:04 zopanix

Salut à tous, Tout d'abord, un grand merci à @rickybiscus pour cette extension me permettant de regarder rtbf auvio depuis mon rpi 3 sur la TV depuis l'Italie 😃

J'ai installé Kodi 18 sur base de LibreElec et tout fonctionne pico bello ! Le direct, les programmes en différé, etc. (avec DRM donc).

Seule chose, si vous êtes dans un autre pays européen, il vous faudra faire usage d'un VPN pour "être en Belgique". Mon compte Auvio me permet pourtant de jouer du contenu depuis l'Europe (j'ai activé l'option sur le site) mais avec le plugin, ça ne fonctionne pas depuis un autre pays.

J'ai suivi le tuto suivant: https://seo-michael.co.uk/vpn-manager-for-openvpn-openelec-kodi/ pour instaler un VPN Manager qui fonctionne plutôt bien: https://github.com/Zomboided/service.vpn.manager

Selon moi, ce souci est réglé par Kodi 18 et peut donc être fermé.

Merci encore 😊

SuperITMan avatar Sep 10 '19 16:09 SuperITMan

Salut à tous, Tout d'abord, un grand merci à @rickybiscus pour cette extension me permettant de regarder rtbf auvio depuis mon rpi 3 sur la TV depuis l'Italie 😃

J'ai installé Kodi 18 sur base de LibreElec et tout fonctionne pico bello ! Le direct, les programmes en différé, etc. (avec DRM donc).

Seule chose, si vous êtes dans un autre pays européen, il vous faudra faire usage d'un VPN pour "être en Belgique". Mon compte Auvio me permet pourtant de jouer du contenu depuis l'Europe (j'ai activé l'option sur le site) mais avec le plugin, ça ne fonctionne pas depuis un autre pays.

J'ai suivi le tuto suivant: https://seo-michael.co.uk/vpn-manager-for-openvpn-openelec-kodi/ pour instaler un VPN Manager qui fonctionne plutôt bien: https://github.com/Zomboided/service.vpn.manager

Selon moi, ce souci est réglé par Kodi 18 et peut donc être fermé.

Merci encore 😊

j'ai un compte Auvio et réside en belgique, cependant, impossible d'ouvrir les flux avec DRM

nicotchoum avatar Nov 24 '19 19:11 nicotchoum

@nicotchoum De mon côté, je confirme que ça fonctionne toujours. Afin qu'on puisse essayer de t'aider, pourrais-tu nous décrire ta config stp ? 😊

SuperITMan avatar Nov 25 '19 12:11 SuperITMan

@SuperITMan je pense qu'il y a eu un bug quand j'ai essayé la première fois, parce que ça remarche (raspbian Stretch - kodi 18.2)

nicotchoum avatar Nov 26 '19 06:11 nicotchoum

Ne fonctionne pas pour moi sur rpi 3B+ et kodi 18.2 J'utilise un VPN. Doit y avoir un truc au niveau des libraries du pi J'arrive bien a voir le contenu via vpn sur windows 10 (site web rtbf, pas kodi) Sur Smartphone android 7 + VPN ca fonctionne (app officielle RTBF) Sur tablette Android 5 + VPN ca fonctionne pas (app officielle RTBF) Sur tablette Android 5 + VPN ca fonctionne pas (Kodi 18.7) Je sais que pas mal d'addon ont des soucis aux niveau des librairies ssl et compagnie depuis kodi 18

mike855 avatar Jul 05 '20 11:07 mike855

still searching for a drm playback solution? look at https://github.com/emilsvennesson/script.module.inputstreamhelper

david63236 avatar Aug 17 '22 10:08 david63236