mbebe / blomqvist

blomqvist
GNU General Public License v3.0
156 stars 56 forks source link

Myślałeś o zrobieniu wtyczki do nowego serwisu CANAL+? #316

Open dieselwine opened 4 years ago

dieselwine commented 4 years ago

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/

domjankowski commented 4 years ago

Również byłbym mega wdzięczny za przygotowanie wtyczki do obsługi Canal+. Pozdrawiam serdecznie.

przemek6085 commented 4 years ago

Przyłączam się

mbebe commented 4 years ago

Mam nadzieje, ze wkrotce powstanie.

xulek commented 4 years ago

Mam nadzieje, ze wkrotce powstanie.

probowalem.. ale nie radzę sobie z licUrl do inputstream(dokumentacja to tragedia), tu potrzeba kogoś bardziej doświadczonego ;)

ghost commented 4 years ago

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

xulek commented 4 years ago

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

mbebe commented 4 years ago

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

ghost commented 4 years ago

@mbebe dzieki za wytlumaczenie! :)

mbebe commented 4 years ago

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 test1 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. ;-)

xulek commented 4 years ago

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

mbebe commented 4 years ago

Tak sie nie uda. Za kazdym odtworzeniem jest nowy response.