'Attempts to parse a variant playlist and return its streams.
:param url: The URL of the variant playlist.
:param name_key: Prefer to use this key as stream name, valid keys are:
name, pixels, bitrate.
:param name_prefix: Add this prefix to the stream names.
:param check_streams: Only allow streams that are accesible.'

@classmethod
def parse_variant_playlist(cls, session_, url, name_key='name', name_prefix='', check_streams=False, **request_params):

    name_key = request_params.pop('namekey', name_key)
    name_prefix = request_params.pop('nameprefix', name_prefix)
    res = session_.http.get(url, exception=IOError, **request_params)
    try:
        parser = hls_playlist.load(res.text, base_uri=res.url)
    except ValueError as err:
        raise IOError('Failed    to    parse    playlist:    {0}'.format(err))
    streams = {}
    for playlist in filter((lambda p: (not p.is_iframe)), parser.playlists):
        names = dict(name=None, pixels=None, bitrate=None)
        for media in playlist.media:
            if ((media.type == 'VIDEO') and media.name):
                names['name'] = media.name
        if playlist.stream_info.resolution:
            (width, height) = playlist.stream_info.resolution
            names['pixels'] = '{0}p'.format(height)
        if playlist.stream_info.bandwidth:
            bw = playlist.stream_info.bandwidth
            if (bw >= 1000):
                names['bitrate'] = '{0}k'.format(int((bw / 1000.0)))
            else:
                names['bitrate'] = '{0}k'.format((bw / 1000.0))
        stream_name = (names.get(name_key) or names.get('name') or names.get('pixels') or names.get('bitrate'))
        if ((not stream_name) or (stream_name in streams)):
            continue
        if check_streams:
            try:
                session_.http.get(playlist.uri, **request_params)
            except Exception:
                continue
        stream = HLSStream(session_, playlist.uri, **request_params)
        streams[(name_prefix + stream_name)] = stream
    return streams
