Browse Source
[downloader/dash:hls] Report exact fragment error on retry
master
Sergey M․
8 years ago
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
3 changed files with
7 additions and
6 deletions
-
youtube_dl/downloader/dash.py
-
youtube_dl/downloader/fragment.py
-
youtube_dl/downloader/hls.py
|
|
@ -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 |
|
|
|