internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: ytdl-org/youtube-dl

Issue:
youtube-dl: does not work with bit.ly
Forwarding http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=597797



Discussion:
This looks kind of fun. URL un-shortening... On it!

Actually it might be more sensible to simply follow redirects as the first step


Resolving patch:
diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py
--- a/youtube_dl/__init__.py
+++ b/youtube_dl/__init__.py
@@ -2241,7 +2241,67 @@ def report_extraction(self, video_id):
 		"""Report information extraction."""
 		self._downloader.to_screen(u'[generic] %s: Extracting information' % video_id)
 
+	def report_following_redirect(self, new_url):
+		"""Report information extraction."""
+		self._downloader.to_screen(u'[redirect] Following redirect to %s' % new_url)
+		
+	def _test_redirect(self, url):
+		"""Check if it is a redirect, like url shorteners, in case restart chain."""
+		class HeadRequest(urllib2.Request):
+			def get_method(self):
+				return "HEAD"
+
+		class HEADRedirectHandler(urllib2.HTTPRedirectHandler):
+			"""
+			Subclass the HTTPRedirectHandler to make it use our 
+			HeadRequest also on the redirected URL
+			"""
+			def redirect_request(self, req, fp, code, msg, headers, newurl): 
+				if code in (301, 302, 303, 307):
+				    newurl = newurl.replace(' ', '%20') 
+				    newheaders = dict((k,v) for k,v in req.headers.items()
+				                      if k.lower() not in ("content-length", "content-type"))
+				    return HeadRequest(newurl, 
+				                       headers=newheaders,
+				                       origin_req_host=req.get_origin_req_host(), 
+				                       unverifiable=True) 
+				else: 
+				    raise urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp) 
+				    
+		class HTTPMethodFallback(urllib2.BaseHandler):
+			"""
+			Fallback to GET if HEAD is not allowed (405 HTTP error)
+			"""
+			def http_error_405(self, req, fp, code, msg, headers): 
+				fp.read()
+				fp.close()
+
+				newheaders = dict((k,v) for k,v in req.headers.items()
+				                  if k.lower() not in ("content-length", "content-type"))
+				return self.parent.open(urllib2.Request(req.get_full_url(), 
+				                                 headers=newheaders, 
+				                                 origin_req_host=req.get_origin_req_host(), 
+				                                 unverifiable=True))
+
+		# Build our opener
+		opener = urllib2.OpenerDirector() 
+		for handler in [urllib2.HTTPHandler, urllib2.HTTPDefaultErrorHandler,
+				        HTTPMethodFallback, HEADRedirectHandler,
+				        urllib2.HTTPErrorProcessor, urllib2.HTTPSHandler]:
+			opener.add_handler(handler())
+
+		response = opener.open(HeadRequest(url))
+		new_url = response.geturl()
+		
+		if url == new_url: return False
+		
+		self.report_following_redirect(new_url)
+		self._downloader.download([new_url])
+		return True
+
 	def _real_extract(self, url):
+		if self._test_redirect(url): return
+		
 		# At this point we have a new video
 		self._downloader.increment_downloads()
 


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
Blip.tv no longer works
Downloading any video from blip.tv results in a 38370 byte file which is unplayable. Running wget `youtube-dl -g URL` does work, however.

example: 

$ ./youtube-dl http://blip.tv/adg/episode-81-animal-quest-6059945
[blip.tv] /adg/episode-81-animal-quest-6059945: Extracting information
[download] Destination: 6043128.m4v
[download] 100.0% of 37.47k at   85.19k/s ETA 00:00
$ ls -l 6043128.m4v
-rw-r--r-- 1 jspenguin jspenguin 38370 2012-02-16 14:58 6043128.m4v
$ ./youtube-dl -g http://blip.tv/adg/episode-81-animal-quest-6059945
http://blip.tv/file/get/Gemini000-Episode81AnimalQuest501.m4v
$ wget http://blip.tv/file/get/Gemini000-Episode81AnimalQuest501.m4v
--2012-04-02 12:08:11--  http://blip.tv/file/get/Gemini000-Episode81AnimalQuest501.m4v
Resolving blip.tv... 74.122.174.250
Connecting to blip.tv|74.122.174.250|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://a66.video2.blip.tv/13330010626287/Gemini000-Episode81AnimalQuest501.m4v?brs=559&bri=7.6 [following]
--2012-04-02 12:09:11--  http://a66.video2.blip.tv/13330010626287/Gemini000-Episode81AnimalQuest501.m4v?brs=559&bri=7.6
Resolving a66.video2.blip.tv... 208.44.23.83, 208.44.23.73
Connecting to a66.video2.blip.tv|208.44.23.83|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53466360 (51M) [video/mp4]
Saving to: `Gemini000-Episode81AnimalQuest501.m4v'

2012-04-02 12:13:05 (69.9 kB/s) - `Gemini000-Episode81AnimalQuest501.m4v' saved [53466360]



Discussion:
Umh... confused by the redirect?
On it.

I've been searching on this and came across this page. Blip.tv is only allowing certain user agent strings to prevent downloading. currently iTunes/10.6.1 works

Note that the current version of get_flash_videos currently supports Blip.tv.  I'd love to have support in youtube-dl, though.


Resolving patch:
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -19,7 +19,7 @@
 	import StringIO
 
 std_headers = {
-	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',
+	'User-Agent': 'iTunes/10.6.1',
 	'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
 	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
 	'Accept-Encoding': 'gzip, deflate',


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
Is there any way to determine the length of a video without downloading it?
I was looking at the output of --write-info-json but could not determine the parameter (if there is any) that says the length of a video.



Discussion:
Currently, we do not determine the length (in seconds, I assume you don't mean in bytes) of the video, but we certainly could.

@phihag Yes - you're correct, I meant seconds. I use ffmpeg to determine the length of a video **after** it's done downloading.  

Are you saying there's a way to determine either the length in seconds or bytes without downloading the entire video?  That'd be really cool and I'd be interested in knowing how you would go about approaching that!

There is a way a webplayer knows it. Thus, there may be an info on that
available before we finished downloading.

The YouTube API provides a "duration" field for each media:content, and there's also a "yt:duration" tag, both providing the length of the video in seconds, so extracting that info shouldn't be too hard.


Resolving patch:
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -414,6 +414,12 @@ def _real_extract(self, url):
 			except Trouble as trouble:
 				self._downloader.trouble(trouble[0])
 
+		if 'length_seconds' not in video_info:
+			self._downloader.trouble(u'WARNING: unable to extract video duration')
+			video_duration = ''
+		else:
+			video_duration = urllib.unquote_plus(video_info['length_seconds'][0])
+
 		# token
 		video_token = urllib.unquote_plus(video_info['token'][0])
 
@@ -480,7 +486,8 @@ def _real_extract(self, url):
 				'thumbnail':	video_thumbnail.decode('utf-8'),
 				'description':	video_description,
 				'player_url':	player_url,
-				'subtitles':	video_subtitles
+				'subtitles':	video_subtitles,
+				'duration':		video_duration
 			})
 		return results
 


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
--audio-quality not working as intended
Hello,
I'm using the following command to download video and convert it into mp3:

youtube-dl -t --extract-audio --audio-format mp3 --audio-quality 256k --max-quality 37 http://www.youtube.com/watch?v=xxxxxxxxx

The problem i have is that every mp3 has 128kbs compression ratio. Before the latest update (youtube and youtube-dl) worked flawlessly.
I tried every command without success, if i miss the quality it gets the mp3 at 28kbs.
i tried even downloading same video that worked before.

Ubuntu server 12 with Python 2.7.3



Discussion:

Resolving patch:
diff --git a/youtube_dl/PostProcessor.py b/youtube_dl/PostProcessor.py
--- a/youtube_dl/PostProcessor.py
+++ b/youtube_dl/PostProcessor.py
@@ -146,7 +146,7 @@ def run(self, information):
 					if int(self._preferredquality) < 10:
 						more_opts += [self._exes['avconv'] and '-q:a' or '-aq', self._preferredquality]
 					else:
-						more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality]
+						more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality + 'k']
 		else:
 			# We convert the audio (lossy)
 			acodec = {'mp3': 'libmp3lame', 'aac': 'aac', 'm4a': 'aac', 'vorbis': 'libvorbis', 'wav': None}[self._preferredcodec]
@@ -156,7 +156,7 @@ def run(self, information):
 				if int(self._preferredquality) < 10:
 					more_opts += [self._exes['avconv'] and '-q:a' or '-aq', self._preferredquality]
 				else:
-					more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality]
+					more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality + 'k']
 			if self._preferredcodec == 'aac':
 				more_opts += ['-f', 'adts']
 			if self._preferredcodec == 'm4a':


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
Colbert Report fails
```
youtube-dl :cr
```

outputs

```
ERROR: unable to find Flash URL in webpage http://www.colbertnation.com/full-episodes/mon-november-26-2012-jake-tapper
```

The daily show works fine.



Discussion:
The string you want (that seems to exist in the Daily Show pages as prefixed with var url=") is in the Colbert Report pages as: `data-mgid="mgid:cms:episode:colbertnation.com:421498"`

I'll see if I can't fix the relevant regex.


Resolving patch:
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -2332,10 +2332,19 @@ def _real_extract(self, url):
 			epTitle = mobj.group('episode')
 
 		mMovieParams = re.findall('(?:<param name="movie" value="|var url = ")(http://media.mtvnservices.com/([^"]*episode.*?:.*?))"', html)
+
 		if len(mMovieParams) == 0:
-			self._downloader.trouble(u'ERROR: unable to find Flash URL in webpage ' + url)
-			return
+			# The Colbert Report embeds the information in a without
+			# a URL prefix; so extract the alternate reference
+			# and then add the URL prefix manually.
 
+			altMovieParams = re.findall('data-mgid="([^"]*episode.*?:.*?)"', html)
+			if len(altMovieParams) == 0:
+				self._downloader.trouble(u'ERROR: unable to find Flash URL in webpage ' + url)
+				return
+			else:
+				mMovieParams = [("http://media.mtvnservices.com/" + altMovieParams[0], altMovieParams[0])]
+		
 		playerUrl_raw = mMovieParams[0][0]
 		self.report_player_url(epTitle)
 		try:


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
Add support for ustream.tv
Forwarding http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659515.



Discussion:

Resolving patch:
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -3805,3 +3805,32 @@ def _real_extract(self, url):
                   }
             videos.append(info)
         return videos
+        
+class UstreamIE(InfoExtractor):
+    _VALID_URL = r'http://www.ustream.tv/recorded/(?P<videoID>\d+)'
+    IE_NAME = u'ustream'
+    
+    def _real_extract(self, url):
+        m = re.match(self._VALID_URL, url)
+        video_id = m.group('videoID')
+        video_url = u'http://tcdn.ustream.tv/video/%s' % video_id
+        try:
+            urlh = compat_urllib_request.urlopen(url)
+            webpage_bytes = urlh.read()
+            webpage = webpage_bytes.decode('utf-8', 'ignore')
+        except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
+            self._downloader.trouble(u'ERROR: unable to download webpage: %s' % compat_str(err))
+            return
+        m = re.search(r'data-title="(?P<title>.+)"',webpage)
+        title = m.group('title')
+        m = re.search(r'<a class="state" data-content-type="channel" data-content-id="(?P<uploader>\d+)"',webpage)
+        uploader = m.group('uploader')
+        info = {
+                'id':video_id,
+                'url':video_url,
+                'ext': 'flv',
+                'title': title,
+                'uploader': uploader
+                  }
+        return [info]
+    pass
diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py
--- a/youtube_dl/__init__.py
+++ b/youtube_dl/__init__.py
@@ -314,6 +314,7 @@ def gen_extractors():
         FunnyOrDieIE(),
         TweetReelIE(),
         SteamIE(),
+        UstreamIE(),
         GenericIE()
     ]
 


Test patch:
diff --git a/test/tests.json b/test/tests.json
--- a/test/tests.json
+++ b/test/tests.json
@@ -115,5 +115,13 @@
     "info_dict": {
         "title": "Terraria 1.1 Trailer"
     }
+  },
+  {
+    "name": "Ustream",
+    "url": "http://www.ustream.tv/recorded/20274954",
+    "files": [["20274954.flv", "088f151799e8f572f84eb62f17d73e5c" ]],
+    "info_dict": {
+        "title": "Young Americans for Liberty February 7, 2012 2:28 AM"
+    }
   }
 ]
Repository: ytdl-org/youtube-dl

Issue:
twitch.tv support only downloads first 30 minutes
The twitch.tv support (https://github.com/rg3/youtube-dl/pull/592) ends up only downloading the first 30 minutes of the video, because that's all that the twitch.tv server provides through that API. One video where you can see this in action is http://www.twitch.tv/avidyazen/b/352351813 -- note that the twitch.tv player shows a length of 5 hours, 34 minutes and 30 seconds, but downloading via youtube-dl currently downloads only the first 30 minutes of the video.

If you experiment with the twitch.tv player by pausing it and letting it download as much of the video as it can, you'll find that it downloads 30 minutes of the video and then stops downloading; if you then jump to the 29-minute mark, you'll see the video stutter a bit at the 30-minute mark, then resume as the player starts downloading the segment from about 0:30:00 to about 1:00:00.

I don't know how to find the URLs for the other segments of the video, but maybe someone else who sees this issue will have in idea of how to find them.



Discussion:

Resolving patch:
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -3524,17 +3524,23 @@ def _parse_page(self, url):
             return
 
         response = json.loads(webpage)
+        if type(response) != list:
+            error_text = response.get('error', 'unknown error')
+            self._downloader.trouble(u'ERROR: Justin.tv API: %s' % error_text)
+            return
         info = []
         for clip in response:
             video_url = clip['video_file_url']
             if video_url:
                 video_extension = os.path.splitext(video_url)[1][1:]
-                video_date = re.sub('-', '', clip['created_on'][:10])
+                video_date = re.sub('-', '', clip['start_time'][:10])
+                video_uploader_id = clip.get('user_id', clip.get('channel_id'))
                 info.append({
                     'id': clip['id'],
                     'url': video_url,
                     'title': clip['title'],
-                    'uploader': clip.get('user_id', clip.get('channel_id')),
+                    'uploader': clip.get('channel_name', video_uploader_id),
+                    'uploader_id': video_uploader_id,
                     'upload_date': video_date,
                     'ext': video_extension,
                 })
@@ -3553,7 +3559,7 @@ def _real_extract(self, url):
             paged = True
             api += '/channel/archives/%s.json'
         else:
-            api += '/clip/show/%s.json'
+            api += '/broadcast/by_archive/%s.json'
         api = api % (video_id,)
 
         self.report_extraction(video_id)


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
ERROR: no suitable InfoExtractor
Hi, i'm trying to download youtube playlist, and got this error below
but if i'm downloading each video one by one, then it's no problem

youtube-dl -t http://www.youtube.com/playlist?list=PLkvTG4A3XyMm50o1mCSrvjBFq4MNEKNV_
[youtube:playlist] PLkvTG4A3XyMm50o1mCSrvjBFq4MNEKNV_: Downloading page #1
[download] Downloading playlist: Tayo the Little Bus Season 1 (ENG)
[youtube:playlist] playlist 'Tayo the Little Bus Season 1 (ENG)': Collected 28 video ids (downloading 28 of them)
[download] Downloading video #1 of 28
ERROR: no suitable InfoExtractor: rtsp://v2.cache5.c.youtube.com/CiULENy73wIaHAnaUjH9PET2DBMYDSANFEgGUglwbGF5bGlzdHMM/0/0/0/video.3gp



Discussion:

Resolving patch:
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -1606,9 +1606,10 @@ def _real_extract(self, url):
                 # Number of videos is a multiple of self._MAX_RESULTS
                 break
 
-            videos += [ (entry['yt$position']['$t'], entry['content']['src'])
-                        for entry in response['feed']['entry']
-                        if 'content' in entry ]
+            for entry in response['feed']['entry']:
+                index = entry['yt$position']['$t']
+                if 'media$group' in entry and 'media$player' in entry['media$group']:
+                    videos.append((index, entry['media$group']['media$player']['url']))
 
             if len(response['feed']['entry']) < self._MAX_RESULTS:
                 break


Test patch:
Repository: ytdl-org/youtube-dl

Issue:
youtube-dl: please support tudou.com
Forwarding http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657148.



Discussion:
If youtube-dl support tudou.com, then it should also support youku.com.
They are all chinese website.
Very few videos speaking english...

We already support Youku.com! :sparkles: 
Has it stopped working?

@FiloSottile Sorry, I don't know about it before. I will test it later.

@phihag i think you should close this issue its solved. :+1: 

@yasoob We support Youku, but not yet tudou.

hmmm thanx for your response. I will see if i can make an IE for it. :+1: 


Resolving patch:
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py
--- a/youtube_dl/extractor/__init__.py
+++ b/youtube_dl/extractor/__init__.py
@@ -58,6 +58,7 @@
 from .youporn import YouPornIE
 from .youtube import YoutubeIE, YoutubePlaylistIE, YoutubeSearchIE, YoutubeUserIE, YoutubeChannelIE
 from .zdf import ZDFIE
+from .tudou import TudouIE
 
 def gen_extractors():
     """ Return a list of an instance of every supported extractor.
@@ -129,6 +130,7 @@ def gen_extractors():
         BreakIE(),
         VevoIE(),
         JukeboxIE(),
+        TudouIE(),
         GenericIE()
     ]
 
diff --git a/youtube_dl/extractor/tudou.py b/youtube_dl/extractor/tudou.py
new file mode 100644
--- /dev/null
+++ b/youtube_dl/extractor/tudou.py
@@ -0,0 +1,32 @@
+import re
+
+from .common import InfoExtractor
+
+
+class TudouIE(InfoExtractor):
+    _VALID_URL = r'(?:http://)?(?:www\.)?tudou\.com/(?:listplay|programs)/(?:view|(.+?))/(?:([^/]+)|([^/]+)\.html)'
+
+    def _real_extract(self, url):
+        mobj = re.match(self._VALID_URL, url)
+        video_id = mobj.group(2).replace('.html','')
+        webpage = self._download_webpage(url, video_id)
+        video_id = re.search('"k":(.+?),',webpage).group(1)
+        title = re.search(",kw:\"(.+)\"",webpage)
+        if title is None:
+            title = re.search(",kw: \'(.+)\'",webpage)
+        title = title.group(1)
+        thumbnail_url = re.search(",pic: \'(.+?)\'",webpage)
+        if thumbnail_url is None:
+            thumbnail_url = re.search(",pic:\"(.+?)\"",webpage)
+        thumbnail_url = thumbnail_url.group(1)
+        info_url = "http://v2.tudou.com/f?id="+str(video_id)
+        webpage = self._download_webpage(info_url, video_id, "Opening the info webpage")
+        final_url = re.search('\>(.+?)\<\/f\>',webpage).group(1)
+        ext = (final_url.split('?')[0]).split('.')[-1]
+        return [{
+            'id':        video_id,
+            'url':       final_url,
+            'ext':       ext,
+            'title':     title,
+            'thumbnail': thumbnail_url,
+        }]


Test patch:
diff --git a/test/tests.json b/test/tests.json
--- a/test/tests.json
+++ b/test/tests.json
@@ -686,5 +686,14 @@
         "upload_date": "20130624",
         "uploader": "Hurts"
     }
+  },
+  {
+    "name": "Tudou",
+    "url": "http://www.tudou.com/listplay/zzdE77v6Mmo/2xN2duXMxmw.html",
+    "file": "159447792.f4v",
+    "md5": "ad7c358a01541e926a1e413612c6b10a",
+    "info_dict": {
+        "title": "卡马乔国足开大脚长传冲吊集锦"
+    }
   }
 ]
Repository: ytdl-org/youtube-dl

Issue:
an IE for wimp.com
example URL: http://www.wimp.com/magneticliquid/

``` html
<div id="player"><embed type="application/x-shockwave-flash" src="/player.swf" width="560" 
height="440" style="undefined" id="mediaplayer" name="mediaplayer" quality="high" 
allowfullscreen="true" wmode="opaque" flashvars="width=560&amp;height=440&amp;
autostart=true&amp;fullscreen=true&amp;file=FILENAME.flv"></div>
```



Discussion:
okay i will see what i can do for wimp.com :+1: 
In 2 to 3 hours from now you will be having a wimp.com IE 


Resolving patch:
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py
--- a/youtube_dl/extractor/__init__.py
+++ b/youtube_dl/extractor/__init__.py
@@ -49,6 +49,7 @@
 from .vevo import VevoIE
 from .vimeo import VimeoIE
 from .vine import VineIE
+from .wimp import WimpIE
 from .worldstarhiphop import WorldStarHipHopIE
 from .xhamster import XHamsterIE
 from .xnxx import XNXXIE
@@ -132,6 +133,7 @@ def gen_extractors():
         VevoIE(),
         JukeboxIE(),
         TudouIE(),
+        WimpIE(),
         GenericIE()
     ]
 
diff --git a/youtube_dl/extractor/wimp.py b/youtube_dl/extractor/wimp.py
new file mode 100644
--- /dev/null
+++ b/youtube_dl/extractor/wimp.py
@@ -0,0 +1,26 @@
+import re
+import base64
+from .common import InfoExtractor
+
+
+class WimpIE(InfoExtractor):
+    _VALID_URL = r'(?:http://)?(?:www\.)?wimp\.com/([^/]+)/'
+
+    def _real_extract(self, url):
+        mobj = re.match(self._VALID_URL, url)
+        video_id = mobj.group(1)
+        webpage = self._download_webpage(url, video_id)
+        title = self._search_regex('\<meta name\="description" content="(.+?)" \/\>',webpage, 'video title')
+        thumbnail_url = self._search_regex('\<meta property\=\"og\:image" content\=\"(.+?)\" />',webpage,'video thumbnail')
+        googleString = self._search_regex("googleCode = '(.*?)'", webpage,'file url')
+        googleString = base64.b64decode(googleString).decode('ascii')
+        final_url = self._search_regex('","(.*?)"', googleString,'final video url')
+        ext = final_url.split('.')[-1]
+        return [{
+            'id':        video_id,
+            'url':       final_url,
+            'ext':       ext,
+            'title':     title,
+            'thumbnail': thumbnail_url,
+        }]
+


Test patch:
diff --git a/test/tests.json b/test/tests.json
--- a/test/tests.json
+++ b/test/tests.json
@@ -695,5 +695,14 @@
     "info_dict": {
         "title": "卡马乔国足开大脚长传冲吊集锦"
     }
+  },
+  {
+    "name": "Wimp",
+    "url": "http://www.wimp.com/deerfence/",
+    "file": "deerfence.flv",
+    "md5": "8b215e2e0168c6081a1cf84b2846a2b5",
+    "info_dict": {
+        "title": "Watch Till End: Herd of deer jump over a fence."
+    }
   }
 ]