Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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
Пример #11
0
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)
Пример #12
0
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)
Пример #13
0
def loads(content):
    '''
    Given a string with a m3u8 content, returns a M3U8 object.
    Raises ValueError if invalid content
    '''
    return M3U8(content)
Пример #14
0
            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)
    '''