]> jfr.im git - yt-dlp.git/blame - yt_dlp/downloader/rtsp.py
[aria2c] Obey `--rate-limit`
[yt-dlp.git] / yt_dlp / downloader / rtsp.py
CommitLineData
80310134
PH
1from __future__ import unicode_literals
2
3bc2ddcc
JMF
3import os
4import subprocess
5
6from .common import FileDownloader
7from ..utils import (
d26b1317 8 check_executable,
3bc2ddcc
JMF
9 encodeFilename,
10)
11
12
a5ebf77d 13class RtspFD(FileDownloader):
3bc2ddcc 14 def real_download(self, filename, info_dict):
c25c9918 15 url = info_dict['url']
3bc2ddcc
JMF
16 self.report_destination(filename)
17 tmpfilename = self.temp_name(filename)
18
db37e0c2 19 if check_executable('mplayer', ['-h']):
20 args = [
21 'mplayer', '-really-quiet', '-vo', 'null', '-vc', 'dummy',
22 '-dumpstream', '-dumpfile', tmpfilename, url]
db37e0c2 23 elif check_executable('mpv', ['-h']):
24 args = [
25 'mpv', '-really-quiet', '--vo=null', '--stream-dump=' + tmpfilename, url]
26 else:
beb4b92a 27 self.report_error('MMS or RTSP download detected but neither "mplayer" nor "mpv" could be run. Please install one')
3bc2ddcc
JMF
28 return False
29
f5d8743e
YCH
30 self._debug_cmd(args)
31
3bc2ddcc
JMF
32 retval = subprocess.call(args)
33 if retval == 0:
34 fsize = os.path.getsize(encodeFilename(tmpfilename))
80310134 35 self.to_screen('\r[%s] %s bytes' % (args[0], fsize))
3bc2ddcc
JMF
36 self.try_rename(tmpfilename, filename)
37 self._hook_progress({
38 'downloaded_bytes': fsize,
39 'total_bytes': fsize,
40 'filename': filename,
41 'status': 'finished',
3ba7740d 42 }, info_dict)
3bc2ddcc
JMF
43 return True
44 else:
80310134 45 self.to_stderr('\n')
b874495b 46 self.report_error('%s exited with code %d' % (args[0], retval))
3bc2ddcc 47 return False