From 3907333c5db9a05ab37624fdcaa6ec3ed729f2aa Mon Sep 17 00:00:00 2001 From: pukkandan Date: Sun, 23 May 2021 22:29:28 +0530 Subject: [PATCH] [extractor] Skip subtitles without URI in m3u8 manifests Closes #339 Authored by: hheimbuerger --- yt_dlp/extractor/common.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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