mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[downloader/dash:hls] Report exact fragment error on retry
This commit is contained in:
		| @@ -53,7 +53,7 @@ class DashSegmentsFD(FragmentFD): | ||||
|                     down.close() | ||||
|                     segments_filenames.append(target_sanitized) | ||||
|                     break | ||||
|                 except compat_urllib_error.HTTPError: | ||||
|                 except compat_urllib_error.HTTPError as err: | ||||
|                     # YouTube may often return 404 HTTP error for a fragment causing the | ||||
|                     # whole download to fail. However if the same fragment is immediately | ||||
|                     # retried with the same request data this usually succeeds (1-2 attemps | ||||
| @@ -62,7 +62,7 @@ class DashSegmentsFD(FragmentFD): | ||||
|                     # HTTP error. | ||||
|                     count += 1 | ||||
|                     if count <= fragment_retries: | ||||
|                         self.report_retry_fragment(segment_name, count, fragment_retries) | ||||
|                         self.report_retry_fragment(err, segment_name, count, fragment_retries) | ||||
|             if count > fragment_retries: | ||||
|                 if skip_unavailable_fragments: | ||||
|                     self.report_skip_fragment(segment_name) | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import time | ||||
| from .common import FileDownloader | ||||
| from .http import HttpFD | ||||
| from ..utils import ( | ||||
|     error_to_compat_str, | ||||
|     encodeFilename, | ||||
|     sanitize_open, | ||||
| ) | ||||
| @@ -28,10 +29,10 @@ class FragmentFD(FileDownloader): | ||||
|                         Skip unavailable fragments (DASH and hlsnative only) | ||||
|     """ | ||||
|  | ||||
|     def report_retry_fragment(self, fragment_name, count, retries): | ||||
|     def report_retry_fragment(self, err, fragment_name, count, retries): | ||||
|         self.to_screen( | ||||
|             '[download] Got server HTTP error: %s. Retrying fragment %s (attempt %d of %s)...' | ||||
|             % (fragment_name, count, self.format_retries(retries))) | ||||
|             % (error_to_compat_str(err), fragment_name, count, self.format_retries(retries))) | ||||
|  | ||||
|     def report_skip_fragment(self, fragment_name): | ||||
|         self.to_screen('[download] Skipping fragment %s...' % fragment_name) | ||||
|   | ||||
| @@ -118,14 +118,14 @@ class HlsFD(FragmentFD): | ||||
|                             frag_content = down.read() | ||||
|                             down.close() | ||||
|                             break | ||||
|                         except compat_urllib_error.HTTPError: | ||||
|                         except compat_urllib_error.HTTPError as err: | ||||
|                             # Unavailable (possibly temporary) fragments may be served. | ||||
|                             # First we try to retry then either skip or abort. | ||||
|                             # See https://github.com/rg3/youtube-dl/issues/10165, | ||||
|                             # https://github.com/rg3/youtube-dl/issues/10448). | ||||
|                             count += 1 | ||||
|                             if count <= fragment_retries: | ||||
|                                 self.report_retry_fragment(frag_name, count, fragment_retries) | ||||
|                                 self.report_retry_fragment(err, frag_name, count, fragment_retries) | ||||
|                     if count > fragment_retries: | ||||
|                         if skip_unavailable_fragments: | ||||
|                             i += 1 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user