| 
									
										
										
										
											2014-11-26 12:34:52 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  | import os | 
					
						
							|  |  |  | import subprocess | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import FileDownloader | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2015-01-03 00:33:36 +01:00
										 |  |  |     check_executable, | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |     encodeFilename, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-26 00:25:51 +06:00
										 |  |  | class RtspFD(FileDownloader): | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |     def real_download(self, filename, info_dict): | 
					
						
							| 
									
										
										
										
											2013-12-23 16:00:43 +01:00
										 |  |  |         url = info_dict['url'] | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |         self.report_destination(filename) | 
					
						
							|  |  |  |         tmpfilename = self.temp_name(filename) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-24 20:50:34 +02:00
										 |  |  |         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: | 
					
						
							| 
									
										
										
										
											2015-04-26 00:22:13 +06:00
										 |  |  |             self.report_error('MMS or RTSP download detected but neither "mplayer" nor "mpv" could be run. Please install any.') | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-14 15:07:31 +08:00
										 |  |  |         self._debug_cmd(args) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |         retval = subprocess.call(args) | 
					
						
							|  |  |  |         if retval == 0: | 
					
						
							|  |  |  |             fsize = os.path.getsize(encodeFilename(tmpfilename)) | 
					
						
							| 
									
										
										
										
											2014-11-26 12:34:52 +01:00
										 |  |  |             self.to_screen('\r[%s] %s bytes' % (args[0], fsize)) | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |             self.try_rename(tmpfilename, filename) | 
					
						
							|  |  |  |             self._hook_progress({ | 
					
						
							|  |  |  |                 'downloaded_bytes': fsize, | 
					
						
							|  |  |  |                 'total_bytes': fsize, | 
					
						
							|  |  |  |                 'filename': filename, | 
					
						
							|  |  |  |                 'status': 'finished', | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2014-11-26 12:34:52 +01:00
										 |  |  |             self.to_stderr('\n') | 
					
						
							| 
									
										
										
										
											2015-04-26 00:23:16 +06:00
										 |  |  |             self.report_error('%s exited with code %d' % (args[0], retval)) | 
					
						
							| 
									
										
										
										
											2013-09-23 17:59:27 +02:00
										 |  |  |             return False |