Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
rickybiscus opened this issue Apr 5, 2018 · 30 comments
Open

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

rickybiscus opened this issue Apr 5, 2018 · 30 comments

Comments

@rickybiscus
Copy link
Owner

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
Copy link
Owner Author

rickybiscus commented Apr 5, 2018

@Nux007
#5 (comment)

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...

@Nux007
Copy link

Nux007 commented Apr 5, 2018

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
Copy link

Nux007 commented Apr 5, 2018

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 ?

@rickybiscus
Copy link
Owner Author

rickybiscus commented Apr 5, 2018

@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).

bb3bd8b

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.

def get_drm_media_auth(user_token,mid,is_live=False):

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.

Voilà pour les premières pistes.

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

@Nux007
Copy link

Nux007 commented Apr 5, 2018

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
Copy link

Nux007 commented Apr 5, 2018

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...

@darodi
Copy link

darodi commented Apr 6, 2018

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"

@rickybiscus
Copy link
Owner Author

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 #9 (comment), mais cela n'a pas encore pu être testé...
Merci pour le feedback !

@darodi darodi mentioned this issue Apr 13, 2018
Closed
@Gaet81
Copy link

Gaet81 commented Apr 16, 2018

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

@rickybiscus
Copy link
Owner Author

Oh yes ! Allez-y les mecs !!!

@Gaet81
Copy link

Gaet81 commented Apr 22, 2018

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

@rickybiscus
Copy link
Owner Author

rickybiscus commented Apr 22, 2018

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
Copy link
Owner Author

rickybiscus commented Apr 23, 2018

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
Copy link
Owner Author

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...

@Gaet81
Copy link

Gaet81 commented Apr 26, 2018

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?

@rickybiscus
Copy link
Owner Author

rickybiscus commented Apr 26, 2018

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

@didjean
Copy link

didjean commented May 27, 2018

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...

@rickybiscus
Copy link
Owner Author

rickybiscus commented Jun 4, 2018

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 f766935.
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 ?

@Gaet81
Copy link

Gaet81 commented Jun 4, 2018 via email

@rickybiscus
Copy link
Owner Author

@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 : #9 (comment)

@bertydl
Copy link

bertydl commented Jun 8, 2018

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.

@didjean
Copy link

didjean commented Jun 15, 2018

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

@gbonemme
Copy link

gbonemme commented Mar 4, 2019

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

@zopanix
Copy link

zopanix commented Apr 22, 2019

@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 ^^'.

@SuperITMan
Copy link

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 😊

@nicotchoum
Copy link

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

@SuperITMan
Copy link

@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 ? 😊

@nicotchoum
Copy link

@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)

@mike855
Copy link

mike855 commented Jul 5, 2020

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

@david63236
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests