def _parse_jwplayer_formats(self, jwplayer_sources_data, video_id=None, m3u8_id=None, mpd_id=None, rtmp_params=None, base_url=None):
    urls = []
    formats = []
    for source in jwplayer_sources_data:
        if (not isinstance(source, dict)):
            continue
        source_url = urljoin(base_url, self._proto_relative_url(source.get('file')))
        if ((not source_url) or (source_url in urls)):
            continue
        urls.append(source_url)
        source_type = (source.get('type') or '')
        ext = (mimetype2ext(source_type) or determine_ext(source_url))
        if ((source_type == 'hls') or (ext == 'm3u8')):
            formats.extend(self._extract_m3u8_formats(source_url, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id=m3u8_id, fatal=False))
        elif ((source_type == 'dash') or (ext == 'mpd')):
            formats.extend(self._extract_mpd_formats(source_url, video_id, mpd_id=mpd_id, fatal=False))
        elif (ext == 'smil'):
            formats.extend(self._extract_smil_formats(source_url, video_id, fatal=False))
        elif (source_type.startswith('audio') or (ext in ('oga', 'aac', 'mp3', 'mpeg', 'vorbis'))):
            formats.append({'url': source_url, 'vcodec': 'none', 'ext': ext})
        else:
            height = int_or_none(source.get('height'))
            if (height is None):
                height = int_or_none(self._search_regex('^(\\d{3,4})[pP]?(?:\\b|$)', compat_str((source.get('label') or '')), 'height', default=None))
            a_format = {'url': source_url, 'width': int_or_none(source.get('width')), 'height': height, 'tbr': int_or_none(source.get('bitrate')), 'ext': ext}
            if source_url.startswith('rtmp'):
                a_format['ext'] = 'flv'
                rtmp_url_parts = re.split('((?:mp4|mp3|flv):)', source_url, 1)
                if (len(rtmp_url_parts) == 3):
                    (rtmp_url, prefix, play_path) = rtmp_url_parts
                    a_format.update({'url': rtmp_url, 'play_path': (prefix + play_path)})
                if rtmp_params:
                    a_format.update(rtmp_params)
            formats.append(a_format)
    return formats
def _parse_jwplayer_formats(self, jwplayer_sources_data, video_id=None, m3u8_id=None, mpd_id=None, rtmp_params=None, base_url=None):
    urls = []
    formats = []
    for source in jwplayer_sources_data:
        if (not isinstance(source, dict)):
            continue
        source_url = urljoin(base_url, self._proto_relative_url(source.get('file')))
        if ((not source_url) or (source_url in urls)):
            continue
        urls.append(source_url)
        source_type = (source.get('type') or )
        ext = (mimetype2ext(source_type) or determine_ext(source_url))
        if ((source_type == 'hls') or (ext == 'm3u8')):
            formats.extend(self._extract_m3u8_formats(source_url, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id=m3u8_id, fatal=False))
        elif ((source_type == 'dash') or (ext == 'mpd')):
            formats.extend(self._extract_mpd_formats(source_url, video_id, mpd_id=mpd_id, fatal=False))
        elif (ext == 'smil'):
            formats.extend(self._extract_smil_formats(source_url, video_id, fatal=False))
        elif (source_type.startswith('audio') or (ext in ('oga', 'aac', 'mp3', 'mpeg', 'vorbis'))):
            formats.append({'url': source_url, 'vcodec': 'none', 'ext': ext})
        else:
            height = int_or_none(source.get('height'))
            if (height is None):
                height = int_or_none(self._search_regex('^(\\d{3,4})[pP]?(?:\\b|$)', compat_str((source.get('label') or )), 'height', default=None))
            a_format = {'url': source_url, 'width': int_or_none(source.get('width')), 'height': height, 'tbr': int_or_none(source.get('bitrate')), 'ext': ext}
            if source_url.startswith('rtmp'):
                a_format['ext'] = 'flv'
                rtmp_url_parts = re.split('((?:mp4|mp3|flv):)', source_url, 1)
                if (len(rtmp_url_parts) == 3):
                    (rtmp_url, prefix, play_path) = rtmp_url_parts
                    a_format.update({'url': rtmp_url, 'play_path': (prefix + play_path)})
                if rtmp_params:
                    a_format.update(rtmp_params)
            formats.append(a_format)
    return formats