Added options to set download buffer size and disable automatic buffer resizing.
authorJoel Verhagen <joel.verhagen@gmail.com>
Sat, 14 Jul 2012 20:47:19 +0000 (16:47 -0400)
committerJoel Verhagen <joel.verhagen@gmail.com>
Sat, 14 Jul 2012 20:47:19 +0000 (16:47 -0400)
README.md
youtube-dl
youtube-dl.exe
youtube_dl/FileDownloader.py
youtube_dl/__init__.py

index f04b96128de7effb5e2d19f06642398403425bcd..fc9c1a6b8ce620f3b9a58d90d721d53ba8993af5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -17,6 +17,9 @@ which means you can modify it, redistribute it or use it however you like.
     -i, --ignore-errors      continue on download errors
     -r, --rate-limit LIMIT   download rate limit (e.g. 50k or 44.6m)
     -R, --retries RETRIES    number of retries (default is 10)
+    -b, --buffer-size SIZE   size of download buffer (e.g. 1024 or 16k) (default
+                             is 1024)
+    --no-resize-buffer       do not automatically adjust the buffer size
     --dump-user-agent        display the current browser identification
     --list-extractors        List all supported extractors and the URLs they
                              would handle
index b3e0cd4221b302881fc5ad75746dd5fc9ad0c7fd..6e6932b52115b7f78abee4dbce6ee0341f904171 100755 (executable)
Binary files a/youtube-dl and b/youtube-dl differ
index c55f5fa8d30a9386b9f2add1d11aaa9c470704ab..4ff820dc852e47f5219bdbf1355c9f73795cd086 100755 (executable)
Binary files a/youtube-dl.exe and b/youtube-dl.exe differ
index 14e872a98a922606b8a3f3ea15a9d3d61ef87274..724de17c7be0dd05a73bcff4ce55bd18ca5b9f57 100644 (file)
@@ -61,6 +61,8 @@ class FileDownloader(object):
        ratelimit:        Download speed limit, in bytes/sec.
        nooverwrites:     Prevent overwriting files.
        retries:          Number of times to retry for HTTP error 5xx
+       buffersize:       Size of download buffer in bytes.
+       noresizebuffer:   Do not automatically resize the download buffer.
        continuedl:       Try to continue downloads if possible.
        noprogress:       Do not print the progress bar.
        playliststart:    Playlist item to start at.
@@ -633,7 +635,7 @@ class FileDownloader(object):
                        data_len = long(data_len) + resume_len
                data_len_str = self.format_bytes(data_len)
                byte_counter = 0 + resume_len
-               block_size = 1024
+               block_size = self.params.get('buffersize', 1024)
                start = time.time()
                while True:
                        # Download and write
@@ -659,7 +661,8 @@ class FileDownloader(object):
                        except (IOError, OSError), err:
                                self.trouble(u'\nERROR: unable to write data: %s' % str(err))
                                return False
-                       block_size = self.best_block_size(after - before, len(data_block))
+                       if not self.params.get('noresizebuffer', False):
+                               block_size = self.best_block_size(after - before, len(data_block))
 
                        # Progress message
                        speed_str = self.calc_speed(start, time.time(), byte_counter - resume_len)
index f10822db191dc751bc567983bb5750ecf97d2195..7983b24eb0a02a9c2671eeb279a006dd8325bf02 100644 (file)
@@ -187,6 +187,11 @@ def parseOpts():
                        dest='ratelimit', metavar='LIMIT', help='download rate limit (e.g. 50k or 44.6m)')
        general.add_option('-R', '--retries',
                        dest='retries', metavar='RETRIES', help='number of retries (default is 10)', default=10)
+       general.add_option('-b', '--buffer-size',
+                       dest='buffersize', metavar='SIZE', help='size of download buffer (e.g. 1024 or 16k) (default is 1024)', default="1024")
+       general.add_option('--no-resize-buffer',
+                       action='store_true', dest='noresizebuffer',
+                       help='do not automatically adjust the buffer size', default=False)
        general.add_option('--dump-user-agent',
                        action='store_true', dest='dump_user_agent',
                        help='display the current browser identification', default=False)
@@ -428,6 +433,11 @@ def _real_main():
                        opts.retries = long(opts.retries)
                except (TypeError, ValueError), err:
                        parser.error(u'invalid retry count specified')
+       if opts.buffersize is not None:
+               numeric_buffersize = FileDownloader.parse_bytes(opts.buffersize)
+               if numeric_buffersize is None:
+                       parser.error(u'invalid buffer size specified')
+               opts.buffersize = numeric_buffersize
        try:
                opts.playliststart = int(opts.playliststart)
                if opts.playliststart <= 0:
@@ -475,6 +485,8 @@ def _real_main():
                'ratelimit': opts.ratelimit,
                'nooverwrites': opts.nooverwrites,
                'retries': opts.retries,
+               'buffersize': opts.buffersize,
+               'noresizebuffer': opts.noresizebuffer,
                'continuedl': opts.continue_dl,
                'noprogress': opts.noprogress,
                'playliststart': opts.playliststart,