mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-12-13 16:57:28 +00:00
3bc2ddccc8
A suitable downloader can be found using the 'get_suitable_downloader' function. Each subclass implements 'real_download', for downloading an info dict you call the 'download' method, which first checks if the video has already been downloaded
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
import os
|
|
import subprocess
|
|
|
|
from .common import FileDownloader
|
|
from ..utils import (
|
|
encodeFilename,
|
|
)
|
|
|
|
|
|
class MplayerFD(FileDownloader):
|
|
def real_download(self, filename, info_dict):
|
|
self.report_destination(filename)
|
|
tmpfilename = self.temp_name(filename)
|
|
|
|
args = ['mplayer', '-really-quiet', '-vo', 'null', '-vc', 'dummy', '-dumpstream', '-dumpfile', tmpfilename, url]
|
|
# Check for mplayer first
|
|
try:
|
|
subprocess.call(['mplayer', '-h'], stdout=(open(os.path.devnull, 'w')), stderr=subprocess.STDOUT)
|
|
except (OSError, IOError):
|
|
self.report_error(u'MMS or RTSP download detected but "%s" could not be run' % args[0] )
|
|
return False
|
|
|
|
# Download using mplayer.
|
|
retval = subprocess.call(args)
|
|
if retval == 0:
|
|
fsize = os.path.getsize(encodeFilename(tmpfilename))
|
|
self.to_screen(u'\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(u"\n")
|
|
self.report_error(u'mplayer exited with code %d' % retval)
|
|
return False
|