def _get_stream_json(self, api_data, roaming=False): """Get JSON with stream details from VRT API""" if not api_data: return None # Try cache for livestreams if api_data.is_live_stream and not roaming: filename = api_data.video_id + '.json' data = get_cache(filename) if data: return data token_url = api_data.media_api_url + '/tokens' if api_data.is_live_stream: playertoken = self._tokenresolver.get_token('vrtPlayerToken', 'live', token_url, roaming=roaming) else: playertoken = self._tokenresolver.get_token('vrtPlayerToken', 'ondemand', token_url, roaming=roaming) # Construct api_url and get video json if not playertoken: return None api_url = api_data.media_api_url + '/videos/' + api_data.publication_id + \ api_data.video_id + '?vrtPlayerToken=' + playertoken + '&client=' + api_data.client stream_json = get_url_json(url=api_url) # Update livestream cache if we have a livestream if stream_json and api_data.is_live_stream: from json import dumps # Warning: Currently, the drmExpired key in the stream_json cannot be used because it provides a wrong 6 hour ttl for the VUDRM tokens. # After investigation these tokens seem to have an expiration time of only two hours, so we set the expirationDate value accordingly. stream_json.update(expirationDate=generate_expiration_date(hours=2), vualto_license_url=self._get_vualto_license_url()) cache_file = api_data.video_id + '.json' update_cache(cache_file, dumps(stream_json)) return stream_json
def _get_vualto_license_url(self): """Get Widevine license URL from Vualto API""" # Try cache data = get_cache('vualto_license_url.json') if data: return data.get('la_url') vualto_license_url = get_url_json(url=self._VUPLAY_API_URL, fail={}).get('drm_providers', {}).get('widevine', {}) if vualto_license_url: from json import dumps vualto_license_url.update(expirationDate=generate_expiration_date(hours=168)) update_cache('vualto_license_url.json', dumps(vualto_license_url)) return vualto_license_url.get('la_url')
def _get_stream_json(self, api_data, roaming=False): """Get JSON with stream details from VRT API""" if not api_data: return None # Try cache for livestreams if api_data.is_live_stream and not roaming: filename = api_data.video_id + '.json' data = get_cache(filename) if data: return data token_url = api_data.media_api_url + '/tokens' if api_data.is_live_stream: playertoken = self._tokenresolver.get_token('vrtPlayerToken', 'live', token_url, roaming=roaming) else: playertoken = self._tokenresolver.get_token('vrtPlayerToken', 'ondemand', token_url, roaming=roaming) # Construct api_url and get video json if not playertoken: return None api_url = api_data.media_api_url + '/videos/' + api_data.publication_id + \ api_data.video_id + '?vrtPlayerToken=' + playertoken + '&client=' + api_data.client stream_json = get_url_json(url=api_url) if stream_json and api_data.is_live_stream: from json import dumps exp = stream_json.get('drmExpired') or generate_expiration_date() vualto_license_url = self._get_vualto_license_url().get('la_url') stream_json.update(expirationDate=exp, vualto_license_url=vualto_license_url) cache_file = api_data.video_id + '.json' update_cache(cache_file, dumps(stream_json)) return stream_json