[downloader/dash:hls] Report exact fragment error on retry
authorSergey M․ <dstftw@gmail.com>
Fri, 26 Aug 2016 21:57:59 +0000 (04:57 +0700)
committerSergey M․ <dstftw@gmail.com>
Sat, 3 Sep 2016 10:51:48 +0000 (17:51 +0700)
youtube_dl/downloader/dash.py
youtube_dl/downloader/fragment.py
youtube_dl/downloader/hls.py

index cbcee324df957c36cdcd00ef7e49a4c30bf0d949..e087cf142b1a422e644bbe42e73449a0bd0fe885 100644 (file)
@@ -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)
index b4a798f8f9b4e52987f10417fbe070f92f141382..84aacf7db6b839d6bf52f6254b58f1323822290b 100644 (file)
@@ -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)
index 7412620a571cdcd9bdca261388d38f0ffc9f075b..5d70abf62f5bb0e45a83685136cb404912d3947c 100644 (file)
@@ -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