X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=resources%2Flib%2FMSL.py;h=ba6dc2dd42045011ad8cfe4742bfa60728e2fe10;hb=23d980f2ecee8f5aa875e38d3fd64a547bc71d08;hp=db9d68b4b94d5dfab0ab35a446f10303d07a04ce;hpb=a190d8141ee4d3a09c7fef3334fd6083ff9c354e;p=plugin.video.netflix.git diff --git a/resources/lib/MSL.py b/resources/lib/MSL.py index db9d68b..ba6dc2d 100644 --- a/resources/lib/MSL.py +++ b/resources/lib/MSL.py @@ -1,3 +1,8 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Module: MSL +# Created on: 26.01.2017 + import base64 import gzip import json @@ -5,6 +10,8 @@ import os import pprint import random from StringIO import StringIO + +from datetime import datetime import requests import zlib @@ -147,9 +154,13 @@ class MSL: # Audio 'heaac-2-dash', + + #subtiltes 'dfxp-ls-sdh', - 'simplesdh', - 'nflx-cmisc', + #'simplesdh', + #'nflx-cmisc', + + #unkown 'BIF240', 'BIF320' ], @@ -344,6 +355,26 @@ class MSL: segment_base = ET.SubElement(rep, 'SegmentBase', indexRange="0-"+str(init_length), indexRangeExact="true") ET.SubElement(segment_base, 'Initialization', range='0-'+str(init_length)) + # Multiple Adaption Set for subtiles + for text_track in manifest['textTracks']: + print text_track + if 'downloadables' not in text_track or text_track['downloadables'] is None: + continue + subtiles_adaption_set = ET.SubElement(period, 'AdaptationSet', + lang=text_track['bcp47'], + contentType='text', + mimeType='text/ttml') + for downloadable in text_track['downloadables']: + rep = ET.SubElement(subtiles_adaption_set, 'Representation', + bandwidth='0', + nflxProfile=downloadable['contentProfile'] + ) + print downloadable['urls'] + ET.SubElement(rep, 'BaseURL').text = self.__get_base_url(downloadable['urls']) + + + + xml = ET.tostring(root, encoding='utf-8', method='xml') xml = xml.replace('\n', '').replace('\r', '') @@ -554,6 +585,18 @@ class MSL: def __load_msl_data(self): msl_data = json.JSONDecoder().decode(self.load_file(self.kodi_helper.msl_data_path, 'msl_data.json')) + #Check expire date of the token + master_token = json.JSONDecoder().decode(base64.standard_b64decode(msl_data['tokens']['mastertoken']['tokendata'])) + valid_until = datetime.utcfromtimestamp(int(master_token['expiration'])) + present = datetime.now() + difference = valid_until - present + difference = difference.total_seconds() / 60 / 60 + # If token expires in less then 10 hours or is expires renew it + if difference < 10: + self.__load_rsa_keys() + self.__perform_key_handshake() + return + self.__set_master_token(msl_data['tokens']['mastertoken']) self.encryption_key = base64.standard_b64decode(msl_data['encryption_key']) self.sign_key = base64.standard_b64decode(msl_data['sign_key'])