|  | @@ -87,7 +87,7 @@ class LiveLeakIE(InfoExtractor):
 | 
	
		
			
				|  |  |      @staticmethod
 | 
	
		
			
				|  |  |      def _extract_urls(webpage):
 | 
	
		
			
				|  |  |          return re.findall(
 | 
	
		
			
				|  |  | -            r'<iframe[^>]+src="(https?://(?:\w+\.)?liveleak\.com/ll_embed\?[^"]*[if]=[\w_]+[^"]+)"',
 | 
	
		
			
				|  |  | +            r'<iframe[^>]+src="(https?://(?:\w+\.)?liveleak\.com/ll_embed\?[^"]*[ift]=[\w_]+[^"]+)"',
 | 
	
		
			
				|  |  |              webpage)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _real_extract(self, url):
 | 
	
	
		
			
				|  | @@ -120,13 +120,27 @@ class LiveLeakIE(InfoExtractor):
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for idx, info_dict in enumerate(entries):
 | 
	
		
			
				|  |  | +            formats = []
 | 
	
		
			
				|  |  |              for a_format in info_dict['formats']:
 | 
	
		
			
				|  |  |                  if not a_format.get('height'):
 | 
	
		
			
				|  |  |                      a_format['height'] = int_or_none(self._search_regex(
 | 
	
		
			
				|  |  |                          r'([0-9]+)p\.mp4', a_format['url'], 'height label',
 | 
	
		
			
				|  |  |                          default=None))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            self._sort_formats(info_dict['formats'])
 | 
	
		
			
				|  |  | +                formats.append(a_format)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                # Removing '.*.mp4' gives the raw video, which is essentially
 | 
	
		
			
				|  |  | +                # the same video without the LiveLeak logo at the top (see
 | 
	
		
			
				|  |  | +                # https://github.com/rg3/youtube-dl/pull/4768)
 | 
	
		
			
				|  |  | +                orig_url = re.sub(r'\.mp4\.[^.]+', '', a_format['url'])
 | 
	
		
			
				|  |  | +                if a_format['url'] != orig_url:
 | 
	
		
			
				|  |  | +                    format_id = a_format.get('format_id')
 | 
	
		
			
				|  |  | +                    formats.append({
 | 
	
		
			
				|  |  | +                        'format_id': 'original' + ('-' + format_id if format_id else ''),
 | 
	
		
			
				|  |  | +                        'url': orig_url,
 | 
	
		
			
				|  |  | +                        'preference': 1,
 | 
	
		
			
				|  |  | +                    })
 | 
	
		
			
				|  |  | +            self._sort_formats(formats)
 | 
	
		
			
				|  |  | +            info_dict['formats'] = formats
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              # Don't append entry ID for one-video pages to keep backward compatibility
 | 
	
		
			
				|  |  |              if len(entries) > 1:
 | 
	
	
		
			
				|  | @@ -146,7 +160,7 @@ class LiveLeakIE(InfoExtractor):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class LiveLeakEmbedIE(InfoExtractor):
 | 
	
		
			
				|  |  | -    _VALID_URL = r'https?://(?:www\.)?liveleak\.com/ll_embed\?.*?\b(?P<kind>[if])=(?P<id>[\w_]+)'
 | 
	
		
			
				|  |  | +    _VALID_URL = r'https?://(?:www\.)?liveleak\.com/ll_embed\?.*?\b(?P<kind>[ift])=(?P<id>[\w_]+)'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      # See generic.py for actual test cases
 | 
	
		
			
				|  |  |      _TESTS = [{
 | 
	
	
		
			
				|  | @@ -158,15 +172,14 @@ class LiveLeakEmbedIE(InfoExtractor):
 | 
	
		
			
				|  |  |      }]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _real_extract(self, url):
 | 
	
		
			
				|  |  | -        mobj = re.match(self._VALID_URL, url)
 | 
	
		
			
				|  |  | -        kind, video_id = mobj.group('kind', 'id')
 | 
	
		
			
				|  |  | +        kind, video_id = re.match(self._VALID_URL, url).groups()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if kind == 'f':
 | 
	
		
			
				|  |  |              webpage = self._download_webpage(url, video_id)
 | 
	
		
			
				|  |  |              liveleak_url = self._search_regex(
 | 
	
		
			
				|  |  | -                r'logourl\s*:\s*(?P<q1>[\'"])(?P<url>%s)(?P=q1)' % LiveLeakIE._VALID_URL,
 | 
	
		
			
				|  |  | +                r'(?:logourl\s*:\s*|window\.open\()(?P<q1>[\'"])(?P<url>%s)(?P=q1)' % LiveLeakIE._VALID_URL,
 | 
	
		
			
				|  |  |                  webpage, 'LiveLeak URL', group='url')
 | 
	
		
			
				|  |  | -        elif kind == 'i':
 | 
	
		
			
				|  |  | -            liveleak_url = 'http://www.liveleak.com/view?i=%s' % video_id
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            liveleak_url = 'http://www.liveleak.com/view?%s=%s' % (kind, video_id)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return self.url_result(liveleak_url, ie=LiveLeakIE.ie_key())
 |