[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
""" """
with lock: for retry in self.RetryManager(fatal=False):
refetch_manifest(format_id, delay) with lock:
refetch_manifest(format_id, delay)
f = next((f for f in formats if f['format_id'] == format_id), None)
if not f: f = next((f for f in formats if f['format_id'] == format_id), None)
if not is_live: if not f:
self.to_screen(f'{video_id}: Video is no longer live') if not is_live:
else: retry.error = f'{video_id}: Video is no longer live'
self.report_warning( else:
f'Cannot find refreshed manifest for format {format_id}{bug_reports_message()}') retry.error = f'Cannot find refreshed manifest for format {format_id}{bug_reports_message()}'
return None continue
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