aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl
diff options
context:
space:
mode:
authorRemita Amine <remitamine@gmail.com>2017-02-04 15:23:46 +0100
committerRemita Amine <remitamine@gmail.com>2017-02-04 15:23:46 +0100
commit36fce54816eb1f1d792ac7ed4d07e292d44d62f5 (patch)
tree8d69aabec6f74c0a811d08bacc5cd789fa6ea120 /youtube_dl
parent2c15db829c1bd8311ed82e2884661271f0cf73ed (diff)
[turner] fix downloading of secure hls formats using ffmpeg(closes #11358)(closes #11373)(closes #11800)
Diffstat (limited to 'youtube_dl')
-rw-r--r--youtube_dl/downloader/external.py9
-rw-r--r--youtube_dl/extractor/turner.py8
2 files changed, 15 insertions, 2 deletions
diff --git a/youtube_dl/downloader/external.py b/youtube_dl/downloader/external.py
index 138f353ef..41e37261d 100644
--- a/youtube_dl/downloader/external.py
+++ b/youtube_dl/downloader/external.py
@@ -199,6 +199,15 @@ class FFmpegFD(ExternalFD):
args = [ffpp.executable, '-y']
+ seekable = info_dict.get('_seekable')
+ if seekable is not None:
+ # setting -seekable prevents ffmpeg from guessing if the server
+ # supports seeking(by adding the header `Range: bytes=0-`), which
+ # can cause problems in some cases
+ # https://github.com/rg3/youtube-dl/issues/11800#issuecomment-275037127
+ # http://trac.ffmpeg.org/ticket/6125#comment:10
+ args += ['-seekable', '1' if seekable else '0']
+
args += self._configuration_args()
# start_time = info_dict.get('start_time') or 0
diff --git a/youtube_dl/extractor/turner.py b/youtube_dl/extractor/turner.py
index 57ffedb87..1c0be9fc6 100644
--- a/youtube_dl/extractor/turner.py
+++ b/youtube_dl/extractor/turner.py
@@ -100,9 +100,13 @@ class TurnerBaseIE(AdobePassIE):
formats.extend(self._extract_smil_formats(
video_url, video_id, fatal=False))
elif ext == 'm3u8':
- formats.extend(self._extract_m3u8_formats(
+ m3u8_formats = self._extract_m3u8_formats(
video_url, video_id, 'mp4',
- m3u8_id=format_id or 'hls', fatal=False))
+ m3u8_id=format_id or 'hls', fatal=False)
+ if '/secure/' in video_url and '?hdnea=' in video_url:
+ for f in m3u8_formats:
+ f['_seekable'] = False
+ formats.extend(m3u8_formats)
elif ext == 'f4m':
formats.extend(self._extract_f4m_formats(
update_url_query(video_url, {'hdcore': '3.7.0'}),