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