[vlc-commits] commit: fixes dailymotion parser ( Rafaël Carré )
git at videolan.org
git at videolan.org
Mon Jul 12 00:27:42 CEST 2010
vlc | branch: master | Rafaël Carré <rafael.carre at gmail.com> | Mon Jul 12 00:26:00 2010 +0200| [e778af8bb60ba6a67c47e8b30c175874726414ee] | committer: Rafaël Carré
fixes dailymotion parser
get the SD video (in flv), the HD and HQ videos (in mp4) causes seeking
back and forth and the video is unplayable
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e778af8bb60ba6a67c47e8b30c175874726414ee
---
share/lua/playlist/dailymotion.lua | 79 ++++++++++++++----------------------
1 files changed, 30 insertions(+), 49 deletions(-)
diff --git a/share/lua/playlist/dailymotion.lua b/share/lua/playlist/dailymotion.lua
index fd88028..5a69d86 100644
--- a/share/lua/playlist/dailymotion.lua
+++ b/share/lua/playlist/dailymotion.lua
@@ -24,7 +24,7 @@
-- Probe function.
function probe()
return vlc.access == "http"
- and string.match( vlc.path, "dailymotion." )
+ and string.match( vlc.path, "dailymotion." )
and string.match( vlc.peek( 2048 ), "<!DOCTYPE.*video_type" )
end
@@ -36,58 +36,39 @@ end
-- Parse function.
function parse()
while true
- do
+ do
line = vlc.readline()
- if not line then break end
- if string.match( line, "param name=\"flashvars\" value=\".*video=" )
+ if not line
then
- arturl = find( line, "param name=\"flashvars\" value=\".*preview=([^&]*)" )
- videos = vlc.strings.decode_uri( find( line, "param name=\"flashvars\" value=\".*video=([^&]*)" ) )
- --[[ we get a list of different streams available, at various codecs
- and resolutions:
- /A@@spark||/B@@spark-mini||/C@@vp6-hd||/D@@vp6||/E@@h264
- Not everybody can decode HD, not everybody has a 80x60 screen,
- H264/MP4 is buggy , so i choose VP6 as the highest priority
-
- Ideally, VLC would propose the different streams available, codecs
- and resolutions (the resolutions are part of the URL)
-
- For now we just built a list of preferred codecs : lowest value
- means highest priority
- ]]
- local pref = { ["vp6"]=0, ["spark"]=1, ["h264"]=2, ["vp6-hd"]=3, ["spark-mini"]=4 }
- local available = {}
- for n in string.gmatch(videos, "[^|]+") do
- i = string.find(n, "@@")
- if i then
- available[string.sub(n, i+2)] = string.sub(n, 0, i-1)
- end
- end
- local score = 666
- local bestcodec
- for codec,_ in pairs(available) do
- if pref[codec] == nil then
- vlc.msg.warn( "Unknown codec: " .. codec )
- pref[codec] = 42 -- try the 1st unknown codec if other fail
- end
- if pref[codec] < score then
- bestcodec = codec
- score = pref[codec]
- end
- end
- if bestcodec then
- path = "http://dailymotion.com" .. available[bestcodec]
- end
- end
- if string.match( line, "<meta name=\"title\"" )
- then
- name = vlc.strings.resolve_xml_special_chars( find( line, "name=\"title\" content=\"(.-)\"" ) )
+ vlc.msg.err("Couldn't extract the video URL from dailymotion")
+ return { }
end
- if string.match( line, "<meta name=\"description\"" )
+ if string.match( line, "\"sequence\",")
then
- description = vlc.strings.resolve_xml_special_chars( vlc.strings.resolve_xml_special_chars( find( line, "name=\"description\" lang=\".-\" content=\"(.-)\"" ) ) )
+ line = vlc.strings.decode_uri(line):gsub("\\/", "/")
+
+ arturl = find( line, "\"videoPreviewURL\":\"([^\"]*)\"")
+ name = find( line, "\"videoTitle\":\"([^\"]*)\"")
+ description = find( line, "\"videoDescription\":\"([^\"]*)\"")
+
+ --[[ we get a list of different streams available, at various codecs
+ and resolutions:
+
+ Ideally, VLC would propose the different streams available,
+ codecs and resolutions (the resolutions are part of the URL)
+
+ For now we just built a list of preferred codecs : lowest value
+ means highest priority
+ ]]--
+
+ -- FIXME: the hd/hq versions (in mp4) cause a lot of seeks,
+ -- for now we only get the sd (in flv) URL
+
+ -- if not path then path = find( line, "\"hqURL\":\"([^\"]*)\"") end
+ -- if not path then path = find( line, "\"hdURL\":\"([^\"]*)\"") end
+ if not path then path = find( line, "\"sdURL\":\"([^\"]*)\"") end
+
+ return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
end
- if path and name and description and arturl then break end
end
- return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
end
More information about the vlc-commits
mailing list