Merge remote-tracking branch 'rzhxeo/rtmpdump_live'
authorJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Sun, 10 Nov 2013 11:38:40 +0000 (12:38 +0100)
committerJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Sun, 10 Nov 2013 11:38:40 +0000 (12:38 +0100)
1  2 
youtube_dl/FileDownloader.py
youtube_dl/extractor/cinemassacre.py

index 35fa3ca614376d1dcd0b1274c780178e400f8e2d,0804dfbe1945c8158f99d50e461974930903c35e..04784f602c254276b0ca88d48baeaa42813adbf8
@@@ -4,19 -4,12 +4,19 @@@ import r
  import subprocess
  import sys
  import time
 -import traceback
  
  if os.name == 'nt':
      import ctypes
  
 -from .utils import *
 +from .utils import (
 +    compat_urllib_error,
 +    compat_urllib_request,
 +    ContentTooShortError,
 +    determine_ext,
 +    encodeFilename,
 +    sanitize_open,
 +    timeconvert,
 +)
  
  
  class FileDownloader(object):
              if old_filename == new_filename:
                  return
              os.rename(encodeFilename(old_filename), encodeFilename(new_filename))
 -        except (IOError, OSError) as err:
 +        except (IOError, OSError):
              self.report_error(u'unable to rename file')
  
      def try_utime(self, filename, last_modified_hdr):
          if self.params.get('noprogress', False):
              return
          clear_line = (u'\x1b[K' if sys.stderr.isatty() and os.name != 'nt' else u'')
 -        eta_str = self.format_eta(eta)
 -        percent_str = self.format_percent(percent)
 +        if eta is not None:
 +            eta_str = self.format_eta(eta)
 +        else:
 +            eta_str = 'Unknown ETA'
 +        if percent is not None:
 +            percent_str = self.format_percent(percent)
 +        else:
 +            percent_str = 'Unknown %'
          speed_str = self.format_speed(speed)
          if self.params.get('progress_with_newline', False):
              self.to_screen(u'[download] %s of %s at %s ETA %s' %
          """Report file has already been fully downloaded."""
          try:
              self.to_screen(u'[download] %s has already been downloaded' % file_name)
 -        except (UnicodeEncodeError) as err:
 +        except UnicodeEncodeError:
              self.to_screen(u'[download] The file has already been downloaded')
  
      def report_unable_to_resume(self):
              self.to_screen(u'\r%s[download] 100%% of %s in %s' %
                  (clear_line, data_len_str, self.format_seconds(tot_time)))
  
-     def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path, tc_url):
+     def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path, tc_url, live):
          self.report_destination(filename)
          tmpfilename = self.temp_name(filename)
          test = self.params.get('test', False)
              basic_args += ['--tcUrl', url]
          if test:
              basic_args += ['--stop', '1']
+         if live:
+             basic_args += ['--live']
          args = basic_args + [[], ['--resume', '--skip', '1']][self.params.get('continuedl', False)]
          if self.params.get('verbose', False):
              try:
          self.report_destination(filename)
          tmpfilename = self.temp_name(filename)
  
 -        args = ['ffmpeg', '-y', '-i', url, '-f', 'mp4', tmpfilename]
 +        args = ['ffmpeg', '-y', '-i', url, '-f', 'mp4', '-c', 'copy',
 +            '-absf', 'aac_adtstoasc', tmpfilename]
          # Check for ffmpeg first
          try:
              subprocess.call(['ffmpeg', '-h'], stdout=(open(os.path.devnull, 'w')), stderr=subprocess.STDOUT)
                                                  info_dict.get('player_url', None),
                                                  info_dict.get('page_url', None),
                                                  info_dict.get('play_path', None),
-                                                 info_dict.get('tc_url', None))
+                                                 info_dict.get('tc_url', None),
+                                                 info_dict.get('live', False))
  
          # Attempt to download using mplayer
          if url.startswith('mms') or url.startswith('rtsp'):
              # Progress message
              speed = self.calc_speed(start, time.time(), byte_counter - resume_len)
              if data_len is None:
 -                self.report_progress('Unknown %', data_len_str, speed_str, 'Unknown ETA')
 -                eta = None
 +                eta = percent = None
              else:
                  percent = self.calc_percent(byte_counter, data_len)
                  eta = self.calc_eta(start, time.time(), data_len - resume_len, byte_counter - resume_len)
 -                self.report_progress(percent, data_len_str, speed, eta)
 +            self.report_progress(percent, data_len_str, speed, eta)
  
              self._hook_progress({
                  'downloaded_bytes': byte_counter,
index 8f9396d6b438e4e7e0fa5e4cb36dc226d384e43f,79d879cedc039ed7e3b1211bd902fbcb8ef745bb..d26f0f4345a09340983d5854b80104c9045e9361
@@@ -41,7 -41,7 +41,7 @@@ class CinemassacreIE(InfoExtractor)
          webpage_url = u'http://' + mobj.group('url')
          webpage = self._download_webpage(webpage_url, None) # Don't know video id yet
          video_date = mobj.group('date_Y') + mobj.group('date_m') + mobj.group('date_d')
 -        mobj = re.search(r'src="(?P<embed_url>http://player\.screenwavemedia\.com/play/(?:embed|player)\.php\?id=(?:Cinemassacre-)?(?P<video_id>.+?))"', webpage)
 +        mobj = re.search(r'src="(?P<embed_url>http://player\.screenwavemedia\.com/play/[a-zA-Z]+\.php\?id=(?:Cinemassacre-)?(?P<video_id>.+?))"', webpage)
          if not mobj:
              raise ExtractorError(u'Can\'t extract embed url and video id')
          playerdata_url = mobj.group(u'embed_url')
@@@ -65,6 -65,7 +65,7 @@@
              {
                  'url': url,
                  'play_path': 'mp4:' + sd_file,
+                 'live': True, # workaround
                  'ext': 'flv',
                  'format': 'sd',
                  'format_id': 'sd',
@@@ -72,6 -73,7 +73,7 @@@
              {
                  'url': url,
                  'play_path': 'mp4:' + hd_file,
+                 'live': True, # workaround
                  'ext': 'flv',
                  'format': 'hd',
                  'format_id': 'hd',