[hlsnative] Support test parameter
authorPhilipp Hagemeister <phihag@phihag.de>
Wed, 24 Sep 2014 12:38:40 +0000 (14:38 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Wed, 24 Sep 2014 12:38:40 +0000 (14:38 +0200)
youtube_dl/downloader/common.py
youtube_dl/downloader/hls.py
youtube_dl/downloader/http.py
youtube_dl/extractor/vevo.py

index 9ce97f5fe6c4517ec8b6d681e924bcd387a185cf..f85f0c94e7544b6eabad3d1f4158f88b9e3c981d 100644 (file)
@@ -42,6 +42,7 @@ class FileDownloader(object):
     Subclasses of this one must re-define the real_download method.
     """
 
+    _TEST_FILE_SIZE = 10241
     params = None
 
     def __init__(self, ydl, params):
index 8040bdf08d705f8de09434418ebbfb6fa7089941..56cce281130ee4d8374e4f44582cf61cc8e073f5 100644 (file)
@@ -7,6 +7,7 @@ import subprocess
 from .common import FileDownloader
 from ..utils import (
     compat_urlparse,
+    compat_urllib_request,
     check_executable,
     encodeFilename,
 )
@@ -71,15 +72,26 @@ class NativeHlsFD(FileDownloader):
                     else compat_urlparse.urljoin(url, line))
                 segment_urls.append(segment_url)
 
+        is_test = self.params.get('test', False)
+        remaining_bytes = self._TEST_FILE_SIZE if is_test else None
         byte_counter = 0
         with open(tmpfilename, 'wb') as outf:
             for i, segurl in enumerate(segment_urls):
-                segment = self.ydl.urlopen(segurl).read()
-                outf.write(segment)
-                byte_counter += len(segment)
                 self.to_screen(
                     '[hlsnative] %s: Downloading segment %d / %d' %
                     (info_dict['id'], i + 1, len(segment_urls)))
+                seg_req = compat_urllib_request.Request(segurl)
+                if remaining_bytes:
+                    seg_req.add_header('Range', 'bytes=0-%d' % (remaining_bytes - 1))
+
+                segment = self.ydl.urlopen(seg_req).read()
+                if remaining_bytes:
+                    segment = segment[:remaining_bytes]
+                    remaining_bytes -= len(segment)
+                outf.write(segment)
+                byte_counter += len(segment)
+                if remaining_bytes <= 0:
+                    break
 
         self._hook_progress({
             'downloaded_bytes': byte_counter,
index 6caf7451ed99a00511c56cc4a7c6cb7711601ff0..f62555ce0e33353f5eac848e3956b263f9d43bcb 100644 (file)
@@ -14,8 +14,6 @@ from ..utils import (
 
 
 class HttpFD(FileDownloader):
-    _TEST_FILE_SIZE = 10241
-
     def real_download(self, filename, info_dict):
         url = info_dict['url']
         tmpfilename = self.temp_name(filename)
index 1edeece3f9df8766c70662f0fc4afec6289dd3a8..ebab8b86c6f5727795d54b234ee4adda7258cf39 100644 (file)
@@ -25,7 +25,7 @@ class VevoIE(InfoExtractor):
 
     _TESTS = [{
         'url': 'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',
-        "md5": "06bea460acb744eab74a9d7dcb4bfd61",
+        "md5": "95ee28ee45e70130e3ab02b0f579ae23",
         'info_dict': {
             'id': 'GB1101300280',
             'ext': 'mp4',
@@ -41,7 +41,7 @@ class VevoIE(InfoExtractor):
     }, {
         'note': 'v3 SMIL format',
         'url': 'http://www.vevo.com/watch/cassadee-pope/i-wish-i-could-break-your-heart/USUV71302923',
-        'md5': '893ec0e0d4426a1d96c01de8f2bdff58',
+        'md5': 'f6ab09b034f8c22969020b042e5ac7fc',
         'info_dict': {
             'id': 'USUV71302923',
             'ext': 'mp4',