diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py index ac2f59462..888cc8efa 100644 --- a/yt_dlp/extractor/common.py +++ b/yt_dlp/extractor/common.py @@ -2042,7 +2042,12 @@ class InfoExtractor(object): groups.setdefault(group_id, []).append(media) # if media_type == 'SUBTITLES': - lang = media['LANGUAGE'] # XXX: normalise? + # According to RFC 8216 ยง4.3.4.2.1, URI is REQUIRED in the + # EXT-X-MEDIA tag if the media type is SUBTITLES. + # However, lack of URI has been spotted in the wild. + # e.g. NebulaIE; see https://github.com/yt-dlp/yt-dlp/issues/339 + if not media.get('URI'): + return url = format_url(media['URI']) sub_info = { 'url': url, @@ -2054,6 +2059,7 @@ class InfoExtractor(object): # sub_info['ext'] = 'vtt' sub_info['protocol'] = 'm3u8_native' + lang = media.get('LANGUAGE') or 'unknown' subtitles.setdefault(lang, []).append(sub_info) if media_type not in ('VIDEO', 'AUDIO'): return