aboutsummaryrefslogtreecommitdiff
path: root/yt_dlp/extractor/generic.py
diff options
context:
space:
mode:
Diffstat (limited to 'yt_dlp/extractor/generic.py')
-rw-r--r--yt_dlp/extractor/generic.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py
index c144069b3..b0c7be462 100644
--- a/yt_dlp/extractor/generic.py
+++ b/yt_dlp/extractor/generic.py
@@ -2214,10 +2214,21 @@ class GenericIE(InfoExtractor):
if is_live is not None:
info['live_status'] = 'not_live' if is_live == 'false' else 'is_live'
return
- headers = m3u8_format.get('http_headers') or info.get('http_headers')
- duration = self._extract_m3u8_vod_duration(
- m3u8_format['url'], info.get('id'), note='Checking m3u8 live status',
- errnote='Failed to download m3u8 media playlist', headers=headers)
+ headers = m3u8_format.get('http_headers') or info.get('http_headers') or {}
+ display_id = info.get('id')
+ urlh = self._request_webpage(
+ m3u8_format['url'], display_id, 'Checking m3u8 live status', errnote=False,
+ headers={**headers, 'Accept-Encoding': 'identity'}, fatal=False)
+ if urlh is False:
+ return
+ first_bytes = urlh.read(512)
+ if not first_bytes.startswith(b'#EXTM3U'):
+ return
+ m3u8_doc = self._webpage_read_content(
+ urlh, urlh.url, display_id, prefix=first_bytes, fatal=False, errnote=False)
+ if not m3u8_doc:
+ return
+ duration = self._parse_m3u8_vod_duration(m3u8_doc, display_id)
if not duration:
info['live_status'] = 'is_live'
info['duration'] = info.get('duration') or duration