[vlc-devel] commit: A simplistic parser for the new and improved anevia playlist format . (JP Dinger )
git version control
git at videolan.org
Fri Jun 12 15:48:00 CEST 2009
vlc | branch: master | JP Dinger <jpd at videolan.org> | Fri Jun 12 15:41:52 2009 +0200| [9f3d2575b9438da25b867c2e8c5c984e8d318b50] | committer: JP Dinger
A simplistic parser for the new and improved anevia playlist format.
Instead of depending on a full xml parser --unavailable in our lua-- we
just assume one bit of information to occupy one line (jpsaman). In case
there are no newlines, fake them (jpd).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9f3d2575b9438da25b867c2e8c5c984e8d318b50
---
share/lua/playlist/anevia_xml.lua | 86 +++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/share/lua/playlist/anevia_xml.lua b/share/lua/playlist/anevia_xml.lua
new file mode 100644
index 0000000..a6eb8e0
--- /dev/null
+++ b/share/lua/playlist/anevia_xml.lua
@@ -0,0 +1,86 @@
+--[[
+ Parse list of available streams on Anevia servers.
+ The URI http://ipaddress/ws/Mgmt/* describes a list of
+ available streams on the server.
+
+ Copyright © 2009 M2X BV
+
+ Authors: Jean-Paul Saman <jpsaman 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.
+--]]
+
+-- Probe function.
+function probe()
+ return vlc.access == "http"
+ and string.match( vlc.path, "/ws/Mgmt/" )
+end
+
+-- Fake readline. Read <>(..*)</> whole, otherwise pretend a newline.
+-- In lua, indices are from 1, not 0, so no +1 needed.
+function readline()
+ local n = string.find(vlc.peek(998),"><") -- A random large number
+ return n and vlc.read(n) or vlc.readline()
+end
+
+-- Parse function.
+function parse()
+ local p = {}
+ local line
+ _,_,server = string.find( vlc.path, "(.*)/ws/Mgmt/" )
+ while true do
+ line = readline()
+ if not line then break end
+ if string.match( line, "<struct name=\"stream\">" ) then
+ while true do
+ line = readline()
+ if not line then break end
+ if string.match( line, "<field name=\"name\">" ) then
+ _,_,name = string.find( line, "name=\"name\">(.*)</field>" )
+ end
+ if string.match( line, "<choice name=\"destination\">" ) then
+ while true do
+ line = readline()
+ if not line then break end
+ if string.match( line, "<struct name=\"(.*)\">" ) then
+ _,_,protocol = string.find( line, "<struct name=\"(.*)\">" )
+ while true do
+ line = readline()
+ if not line then break end
+ if string.match( line, "<field name=\"address\">(.*)</field>" ) then
+ _,_,address = string.find( line, "<field name=\"address\">(.*)</field>" )
+ end
+ if string.match( line, "<field name=\"port\">(.*)</field>" ) then
+ _,_,port = string.find( line, "<field name=\"port\">(.*)</field>" )
+ end
+ -- end of struct tag
+ if string.match( line, "</struct>" ) then
+ media = tostring(protocol) .. "://@" .. tostring(address) .. ":" .. tostring(port)
+ table.insert( p, { path = media; name = name, url = media } )
+ break
+ end
+ end
+ end
+ if not line then break end
+ -- end of choice tag
+ if string.match( line, "</choice>" ) then break end
+ end
+ end
+ end
+ end
+
+ end
+ return p
+end
More information about the vlc-devel
mailing list