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