[extractor/youtube] Retry manifest refresh for live-from-start (#5670)

Avoids ending download early when live stream is temporarily offline.
Best used with somewhat large `--retry-sleep extractor:` and `--extractor-retries`

Authored by: mzhou
pull/5103/head
mzhou 2 years ago committed by GitHub
parent 84e0e33a19
commit 253ac4ba6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2650,18 +2650,19 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
""" """
@returns (manifest_url, manifest_stream_number, is_live) or None @returns (manifest_url, manifest_stream_number, is_live) or None
""" """
for retry in self.RetryManager(fatal=False):
with lock: with lock:
refetch_manifest(format_id, delay) refetch_manifest(format_id, delay)
f = next((f for f in formats if f['format_id'] == format_id), None) f = next((f for f in formats if f['format_id'] == format_id), None)
if not f: if not f:
if not is_live: if not is_live:
self.to_screen(f'{video_id}: Video is no longer live') retry.error = f'{video_id}: Video is no longer live'
else: else:
self.report_warning( retry.error = f'Cannot find refreshed manifest for format {format_id}{bug_reports_message()}'
f'Cannot find refreshed manifest for format {format_id}{bug_reports_message()}') continue
return None
return f['manifest_url'], f['manifest_stream_number'], is_live return f['manifest_url'], f['manifest_stream_number'], is_live
return None
for f in formats: for f in formats:
f['is_live'] = is_live f['is_live'] = is_live

Loading…
Cancel
Save