+ def _download_with_rtmpdump(self, filename, url):
+ self.report_destination(filename)
+
+ # Check for rtmpdump first
+ try:
+ subprocess.call(['rtmpdump', '-h'], stdout=(file(os.path.devnull, 'w')), stderr=subprocess.STDOUT)
+ except (OSError, IOError):
+ self.trouble(u'ERROR: RTMP download detected but "rtmpdump" could not be run')
+ return False
+
+ # Download using rtmpdump. rtmpdump returns exit code 2 when
+ # the connection was interrumpted and resuming appears to be
+ # possible. This is part of rtmpdump's normal usage, AFAIK.
+ retval = subprocess.call(['rtmpdump', '-q', '-r', url, '-o', filename] + [[], ['-e']][self.params.get('continuedl', False)])
+ while retval == 2:
+ self.to_stdout(u'\r[rtmpdump] %s bytes' % os.path.getsize(filename), skip_eol=True)
+ time.sleep(2.0) # This seems to be needed
+ retval = subprocess.call(['rtmpdump', '-q', '-e', '-r', url, '-o', filename])
+ if retval == 0:
+ self.to_stdout(u'\r[rtmpdump] %s bytes' % os.path.getsize(filename))
+ return True
+ else:
+ self.trouble('ERROR: rtmpdump exited with code %d' % retval)
+ return False
+