[vlc-commits] Lua: extreme.com playlist parser.
Konstantin Pavlov
git at videolan.org
Thu Nov 24 11:56:30 CET 2011
vlc | branch: master | Konstantin Pavlov <thresh at videolan.org> | Thu Nov 24 14:12:59 2011 +0400| [4561cb3bc265c50dae38238bfc1d63e18da288c9] | committer: Konstantin Pavlov
Lua: extreme.com playlist parser.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4561cb3bc265c50dae38238bfc1d63e18da288c9
---
share/lua/playlist/extreme.lua | 107 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 107 insertions(+), 0 deletions(-)
diff --git a/share/lua/playlist/extreme.lua b/share/lua/playlist/extreme.lua
new file mode 100644
index 0000000..5c7b2f6
--- /dev/null
+++ b/share/lua/playlist/extreme.lua
@@ -0,0 +1,107 @@
+--[[
+ $Id$
+
+ Copyright © 2011 the VideoLAN team
+
+ Authors: Konstantin Pavlov (thresh at videolan.org)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+--]]
+
+function get_prefres()
+ local prefres = -1
+ if vlc.var and vlc.var.inherit then
+ prefres = vlc.var.inherit(nil, "preferred-resolution")
+ if prefres == nil then
+ prefres = -1
+ end
+ end
+ return prefres
+end
+
+-- Probe function.
+function probe()
+ return vlc.access == "http"
+ and string.match( vlc.path, "extreme.com/." )
+ or string.match( vlc.path, "freecaster.tv/." )
+ or string.match( vlc.path, "player.extreme.com/info/.")
+end
+
+-- Parse function.
+function parse()
+ if (string.match( vlc.path, "extreme\.com/." ) or string.match( vlc.path, "freecaster\.tv/." )) and not string.match( vlc.path, "player.extreme.com/info/") then
+ while true do
+ line = vlc.readline()
+ if not line then break end
+ -- Try to find id of the video
+ if string.match( line, "http://player.extreme.com/FCPlayer.swf" ) then
+ _,_,vid = string.find( line, "id=(.*)\"" )
+ break
+ end
+ end
+ return { { path = "http://player.extreme.com/info/" .. vid; name = "extreme.com video"; } }
+ end
+
+ if string.match( vlc.path, "player.extreme.com/info/." ) then
+ prefres = get_prefres()
+ gostraight = true
+ while true do
+ line = vlc.readline()
+ if not line then break end
+ -- Try to find the video's title
+ if string.match( line, "title>(.*)<" ) then
+ _,_,name = string.find( line, "<title>(.*)<" )
+ end
+
+ -- Try to find image for thumbnail
+ if string.match( line, "<path>(*.)</path>" ) then
+ _,_,arturl = string.find( line, "<path>(*.)</path>" )
+ end
+
+ -- Try to find out if its a freecaster streaming or just a link to some
+ -- other video streaming website
+ -- FIXME: I was unable to find any http-based freecaster streams,
+ -- but I remember there were some a few months back.
+ -- Right now we assume everything is streamed using RTMP, so we feed them to avio.
+ if string.match( line, "<streams type=\"5\" server=\"(.*)\">" )
+ then
+ _,_,rtmpserver = string.find( line, "<streams type=\"5\" server=\"(.*)\">" )
+ gostraight = false
+ end
+
+ -- if we're going outside, we need to find out the path
+ if gostraight then
+ if string.match( line, ">(.*)</stream>" ) then
+ _,_,path = string.find( line, "bitrate=\"0\" duration=\"\">(.*)</stream>" )
+ end
+ end
+
+ -- and if we're using freecaster, use appropriate resolution
+ if not gostraight then
+ if string.match( line, "height=\"(.*)\" duration" ) then
+ _,_,height = string.find( line, "height=\"(%d+)\" duration" )
+ _,_,playpath = string.find( line, "\">(.*)</stream>" )
+ if ( prefres < 0 or tonumber( height ) <= prefres ) then
+ path = "avio://" .. rtmpserver .. " playpath=" .. playpath
+ end
+ end
+ end
+ end
+
+ return { { path = path; name = name; arturl = arturl } }
+
+ end
+
+end
More information about the vlc-commits
mailing list