def loads(content, uri=None, custom_tags_parser=None): ''' Given a string with a m3u8 content, returns a M3U8 object. Optionally parses a uri to set a correct base_uri on the M3U8 object. Raises ValueError if invalid content ''' if uri is None: return M3U8(content, custom_tags_parser=custom_tags_parser) else: base_uri = _parsed_url(uri) return M3U8(content, base_uri=base_uri, custom_tags_parser=custom_tags_parser)
def _load_from_uri(uri): content = urlopen(uri).read().strip() parsed_url = urlparse.urlparse(uri) prefix = parsed_url.scheme + '://' + parsed_url.netloc base_path = os.path.normpath(parsed_url.path + '/..') base_uri = urlparse.urljoin(prefix, base_path) return M3U8(content, base_uri=base_uri)
def _load_from_file(uri, custom_tags_parser=None): with open(uri) as fileobj: raw_content = fileobj.read().strip() base_uri = os.path.dirname(uri) return M3U8(raw_content, base_uri=base_uri, custom_tags_parser=custom_tags_parser)
def _load_from_uri(uri, timeout=None): resource = urlopen(uri, timeout=timeout) base_uri = _parsed_url(_url_for(uri)) if PYTHON_MAJOR_VERSION < (3, ): content = _read_python2x(resource) else: content = _read_python3x(resource) return M3U8(content, base_uri=base_uri)
def _load_from_uri(uri, timeout=None, headers={}, custom_tags_parser=None): request = Request(uri, headers=headers) resource = urlopen(request, timeout=timeout) base_uri = _parsed_url(resource.geturl()) if PYTHON_MAJOR_VERSION < (3,): content = _read_python2x(resource) else: content = _read_python3x(resource) return M3U8(content, base_uri=base_uri, custom_tags_parser=custom_tags_parser)
def load(uri, timeout=None, headers={}, custom_tags_parser=None, http_client=DefaultHTTPClient(), verify_ssl=True): ''' Retrieves the content from a given URI and returns a M3U8 object. Raises ValueError if invalid content or IOError if request fails. ''' if is_url(uri): content, base_uri = http_client.download(uri, timeout, headers, verify_ssl) return M3U8(content, base_uri=base_uri, custom_tags_parser=custom_tags_parser) else: return _load_from_file(uri, custom_tags_parser)
def _load_from_uri(uri, timeout=None, headers={}, custom_tags_parser=None, verify_ssl=True): request = Request(uri, headers=headers) context = None if not verify_ssl: context = ssl._create_unverified_context() resource = urlopen(request, timeout=timeout, context=context) base_uri = _parsed_url(resource.geturl()) if PYTHON_MAJOR_VERSION < (3,): content = _read_python2x(resource) else: content = _read_python3x(resource) return M3U8(content, base_uri=base_uri, custom_tags_parser=custom_tags_parser)
def _load_from_uri(uri): try: resource = urlopen(uri) except Exception as e: msg = 'Failed to retrieve uri "{0}" because: {1}' raise IOError(msg.format(uri, e)) base_uri = _parsed_url(_url_for(uri)) if PYTHON_MAJOR_VERSION < (3, ): content = _read_python2x(resource) else: content = _read_python3x(resource) return M3U8(content, base_uri=base_uri)
def _load_from_uri(uri, timeout=None, headers={}, proxies={}): # proxy setting proxy_handler = ProxyHandler(proxies) opener = build_opener(proxy_handler) install_opener(opener) request = Request(uri, headers=headers) resource = urlopen(request, timeout=timeout) base_uri = _parsed_url(resource.geturl()) if PYTHON_MAJOR_VERSION < (3, ): content = _read_python2x(resource) else: content = _read_python3x(resource) return M3U8(content, base_uri=base_uri)
def on_playlist_downloaded(pl: M3U8): if pl.playlists: logging.info('Loaded variant.m3u8') url = pl.playlists[0].absolute_uri asyncio. async (reload_playlist(url)) elif pl.files: logging.info('Loaded playlist.m3u8 with files count: %d', len(pl.files)) utc_timestamp = str(datetime.utcnow().timestamp()) url_tpl = '{base}/playlist.m3u8?utcstart={utc}' url = url_tpl.format(base=pl.base_uri, utc=utc_timestamp) asyncio. async (reload_playlist(url, timeout=RELOAD_TIMEOUT)) [asyncio. async (download_and_save(url)) for url in pl.files] else: logging.error('Playlist is empty: \n%r', pl.dumps()) raise
def _load_from_uri(uri, timeout=None, headers={}, custom_tags_parser=None, verify_ssl=True): request = urllib.request.Request(uri, headers=headers) context = None if not verify_ssl: context = ssl._create_unverified_context() resource = urllib.request.urlopen(request, timeout=timeout, context=context) base_uri = _parsed_url(resource.geturl()) content = _read_python(resource) return M3U8(content, base_uri=base_uri, custom_tags_parser=custom_tags_parser)
def _load_from_file(uri): with open(uri) as fileobj: raw_content = fileobj.read().strip() base_uri = os.path.dirname(uri) return M3U8(raw_content, base_uri=base_uri)
def loads(content): ''' Given a string with a m3u8 content, returns a M3U8 object. Raises ValueError if invalid content ''' return M3U8(content)
with open(vfile, 'ab') as savedfile: # must be 'ab' savedfile.write(tsfile.read()) # must using read() if __name__ == '__main__': user_agent = UserAgent().random header = {'User-Agent': user_agent} #url = 'http://video.cnwkw.cn/WeiKe/video/201606/1317/3aada1af15784a9db60ae35b1365b9c0-HD.m3u8' #_url = "http://video.cnwkw.cn/WeiKe/video/201711/1909/a5453e133c19433395868bc0c91a7fd4-HD.m3u8" #url = 'http://video.cnwkw.cn/WeiKe/video/201606/1122/e4ee0791acba4211a8836d23b9487c53-HD.m3u8' url = "http://video.cnwkw.cn/WeiKe/video/201606/1308/d0158bd0889c49cebf24a69f0d21edf1-HD.m3u8" base_path = url.rsplit('/',1)[0] all_content = requests.get(url, headers=header).text m3u = M3U8(all_content, base_path=base_path) save_m3u(m3u, 'testm3u.mp4') download(m3u, 'testmp4.mp4') ''' elapsed_time1 = timeit.timeit(download(m3u, 'testmp4.mp4'), number=100)/100 print(elapsed_time1) elapsed_time2 = timeit.timeit(save_m3u(m3u, 'testm3u.mp4'), number=100)/100 print(elapsed_time2) print(elapsed_time1 > elapsed_time2) '''