Open dieselwine opened 4 years ago
Również byłbym mega wdzięczny za przygotowanie wtyczki do obsługi Canal+. Pozdrawiam serdecznie.
Przyłączam się
Mam nadzieje, ze wkrotce powstanie.
Mam nadzieje, ze wkrotce powstanie.
probowalem.. ale nie radzę sobie z licUrl do inputstream(dokumentacja to tragedia), tu potrzeba kogoś bardziej doświadczonego ;)
Mam nadzieje, ze wkrotce powstanie.
probowalem.. ale nie radzę sobie z licUrl do inputstream(dokumentacja to tragedia), tu potrzeba kogoś bardziej doświadczonego ;)
Chodzi tobie o license_key?
Wydaje mi sie ze jest to tak: com.widevine.alpha|HEADER+COOKIE|R{SSM}|
Mam nadzieje, ze wkrotce powstanie.
probowalem.. ale nie radzę sobie z licUrl do inputstream(dokumentacja to tragedia), tu potrzeba kogoś bardziej doświadczonego ;)
Chodzi tobie o license_key?
Wydaje mi sie ze jest to tak: com.widevine.alpha|HEADER+COOKIE|R{SSM}|
Tak ale to nie takie proste. W miejscu, w ktorym podales 'com.widevine.alpha' powinien byc url serwerem licencji, z tym że żeby dostać odpowiedź z tego url'a trzeba wyslać odpowiednie dane w POST. Nie wiem jak to zrobić z inputstream adaptive bo dokumentacja tego nie opisuje. Tak samo nie opisuje jak wydobyć z response wartości klucza json jeśli klucze są zduplikowane bo tutaj jest wlasnie taka sytuacja ;) Ale moze mbebe na coś wpadnie, on ma łeb jak sklep ;)
Inputstream adaptive robi to automatycznie. licURL sklada sie z 4 pol: 1|2|3|4 1 - adres gdzie jest sprawdzana licencja 2 - naglowek jaki jest wysylany wraz z zapytaniem do adresu 1 3 - data ( challenge XXX{SSM}) gdzie xxx - to format w jakim jest wysylana data do adresu 1 (jest ona tworzona z manifestu - streama)
4 - format w jakim jest odebrana odpowiedz z w.w. zapytania.
format w pkcie 3 - base64NonURLencoded, Base64URLencoded or Raw format.
gdy odpowiedz w pkcie 4 - jest w formie json to wstawiamy J+ format odpowiedzi i klucz w jakim jest wartosc licencji - Np. JBlicencja . Odpiwedz moze byc tez zostawiona pusta (bez spacji)
Przyklad:
adreslicencji = 'htttps://www.przelecmnie.wow/licencja'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'ChallengeID': "54546abcdeffff43432434343434343'
}
headersok = urlencode(headers)
licURL = adreslicencji+'|'+headersok+'|b{SSM|Jbpobierz'
listitem.setProperty('inputstream.adaptive.license_key', licURL)
Wtyczka canalPLUS w repo. ;-)
@mbebe dzieki za wytlumaczenie! :)
Dam przyklad kolejny: Tu testowy stream z widevine - https://bitmovin.com/demos/drm
Jak widac po INSPECT w przegladarce - to stream to https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd
a adres do licencji to https://widevine-proxy.appspot.com/proxy Po zobaczeniu CURL z tej licencji pokazuje sie ze data ma format RAW Wiec by odtworzyc tego streama:
mpdurl = 'https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Accept': '*/*',
'Accept-Language': 'pl,en-US;q=0.7,en;q=0.3',
'Origin': 'https://bitmovin.com',
'Connection': 'keep-alive',
'Referer': 'https://bitmovin.com/demos/drm',
}
headok = urlencode(headers)
licurl = 'https://widevine-proxy.appspot.com/proxy'
license_url=licurl+'|'+headok+'|R{SSM}|'
play_item = xbmcgui.ListItem(path=mpdurl)
play_item.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha')
play_item.setProperty('inputstream.adaptive.license_key', license_url)
play_item.setProperty('inputstream.adaptive.manifest_type', 'mpd')
play_item.setProperty('inputstreamaddon', 'inputstream.adaptive')
play_item.setMimeType('application/dash+xml')
play_item.setContentLookup(False)
xbmcplugin.setResolvedUrl(addon_handle, True, listitem=play_item)
Acha, i gdy ida czasami bledy, to w KODI w event logs wlacz rejestrowanie LIBCURL i w logach porownasz, czy ida np. takie same naglowki jak w przegladarce itd. Mozesz tez sprawdzac w w katalogu KODI\cdm| - tam po uruchomieniu inputstreama powstaja 3 pliki z rozszerzeniami .init , .challenge i .response. Mozesz je tez przejrzec, czy np. w response nie pojawia sie jakas informacja. ;-)
Bardzo dziękuję za sporą dawkę wiedzy, przeanalizuje to na spokojnie w wolnej chwili. Zrobiłem w zasadzie tak jak ty parametry inputstream tylko żeby sobie uprościć sprawę wrzuciłem response jsonowy z serwera licencji do pastebin.com i starałem się podać pastebin jako serwer żeby nie wysyłać nagłówków i danych post. Ale mimo tego nie udało mi się odpalić streama..
Tak sie nie uda. Za kazdym odtworzeniem jest nowy response.
Wtyczka do obsługi nc+go działa znakomicie, myślałeś może o przygotowaniu wtyczki do nowego serwisu CANAL+? Połączenie VOD i oglądania poszczególnych kanałów, ale nie tylko dla klientów platformy lecz dla wszystkich i z subskrypcją, którą w każdej chwili można zerwać, np. jak w netfliksie: https://www.canalplus.com/pl/