rtsp.py (1559B)
- from __future__ import unicode_literals
- import os
- import subprocess
- from .common import FileDownloader
- from ..utils import (
- check_executable,
- encodeFilename,
- )
- class RtspFD(FileDownloader):
- def real_download(self, filename, info_dict):
- url = info_dict['url']
- self.report_destination(filename)
- tmpfilename = self.temp_name(filename)
- if check_executable('mplayer', ['-h']):
- args = [
- 'mplayer', '-really-quiet', '-vo', 'null', '-vc', 'dummy',
- '-dumpstream', '-dumpfile', tmpfilename, url]
- elif check_executable('mpv', ['-h']):
- args = [
- 'mpv', '-really-quiet', '--vo=null', '--stream-dump=' + tmpfilename, url]
- else:
- self.report_error('MMS or RTSP download detected but neither "mplayer" nor "mpv" could be run. Please install any.')
- return False
- self._debug_cmd(args)
- retval = subprocess.call(args)
- if retval == 0:
- fsize = os.path.getsize(encodeFilename(tmpfilename))
- self.to_screen('\r[%s] %s bytes' % (args[0], fsize))
- self.try_rename(tmpfilename, filename)
- self._hook_progress({
- 'downloaded_bytes': fsize,
- 'total_bytes': fsize,
- 'filename': filename,
- 'status': 'finished',
- })
- return True
- else:
- self.to_stderr('\n')
- self.report_error('%s exited with code %d' % (args[0], retval))
- return False