Commit d1bba6c0 authored by François Revol's avatar François Revol Committed by Jean-Baptiste Kempf

lua: assembleenationale: Fix after website changes

Base urls not probed correctly yet, but hardcoded, I'm too lazy right now.

Parse direct.js some more to get stream name lists.

Fix the live streams list check.
Signed-off-by: default avatarFrançois Revol <revol@free.fr>
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 2c1b60ae
...@@ -31,19 +31,20 @@ end ...@@ -31,19 +31,20 @@ end
-- http://www.assemblee-nationale.tv/direct.html?flux=7# -- http://www.assemblee-nationale.tv/direct.html?flux=7#
-- advertised command line: -- advertised command line:
-- vlc --rtsp-tcp rtsp://a625.l31335None.c31335.g.lq.akamaistream.net/7/625/31335/v0001/assembleenat.download.akamai.com/31335/mp4/fluxh264live7-169.sdp -- vlc --rtsp-tcp rtsp://wowg.tdf-cdn.com/5638/live
-- references & interesting URLs: -- references & interesting URLs:
-- http://www.assemblee-nationale.tv/js/direct.js -- http://www.assemblee-nationale.tv/js/direct.js
-- urlSdp + "fluxh264live"+stream+".sdp";
-- urlIPhone+'live'+stream+'/stream'+stream+'.m3u8
-- http://www.assemblee-nationale.tv/ahp/scripts/ -- http://www.assemblee-nationale.tv/ahp/scripts/
-- arturl http://www.assemblee-nationale.tv/live/images/live1.jpg -- arturl http://www.assemblee-nationale.tv/live/images/live1.jpg
-- seems wrong though, actually depends on agenda -- seems wrong though, actually depends on agenda
-- alive checks:
-- http://www.assemblee-nationale.tv/php/testurl.php?checkUrl=http://www.assemblee-nationale.tv/../../../live/live1/live.txt&rnd=123456 -- 2013-02-02: it seems they changed some urls...
-- http://www.assemblee-nationale.tv/live/live1/live.txt -- rtsp://wowg.tdf-cdn.com/5638/live
-- http://chkg.tdf-cdn.com/5707/stream1.m3u8
-- we should probably probe those but I'm lazy
-- the live feeds list has changed too:
-- http://www.assemblee-nationale.tv/live/live.txt?rnd=
function main() function main()
-- disregard live checks and list all possible feeds -- disregard live checks and list all possible feeds
...@@ -58,14 +59,22 @@ function main() ...@@ -58,14 +59,22 @@ function main()
-- number of probed possible streams -- number of probed possible streams
local nb_streams = 0 local nb_streams = 0
-- base URI for each protocol -- base URI for each protocol
local iphone_base -- XXX: should be probed as in the js code...
local iphone_base = "http://chkg.tdf-cdn.com/"
-- from http://www.assemblee-nationale.tv/json/data.json -- from http://www.assemblee-nationale.tv/json/data.json
-- XXX: maybe parse this file directly? -- XXX: maybe parse this file directly?
local rtmp_base = "rtmp://172.25.13.10/live/" local rtmp_base = "rtmp://172.25.13.10/live/"
local rtsp_base local rtsp_base = "rtsp://wowg.tdf-cdn.com/"
-- RTMP application names, probed from JS file (XXX: use data.json instead?) -- RTMP application names, probed from JS file (XXX: use data.json instead?)
-- latest js has a list for other protocols as well
local rtmp_names = {} local rtmp_names = {}
local app_names = {}
local http_names = {}
local rtsp_names = {}
local hls_names = {}
local idx local idx
-- live status of each stream
local live_streams = {}
-- fetch the main JS file -- fetch the main JS file
fd, msg = vlc.stream( "http://www.assemblee-nationale.tv/js/direct.js" ) fd, msg = vlc.stream( "http://www.assemblee-nationale.tv/js/direct.js" )
...@@ -94,6 +103,39 @@ function main() ...@@ -94,6 +103,39 @@ function main()
str = string.sub(str, len + 2) str = string.sub(str, len + 2)
table.insert( rtmp_names, s ) table.insert( rtmp_names, s )
until string.len(str) == 0 until string.len(str) == 0
-- vlc.msg.warn(table.concat(rtmp_names,","))
elseif( string.find( line, "var appNames = new Array" ) ) then
_, _, str = string.find( line, "Array%( (.*)%);" )
repeat
_, len, s = string.find( str, "\"([^\"]+)\"" )
str = string.sub(str, len + 2)
table.insert( app_names, s )
until string.len(str) == 0
-- vlc.msg.warn(table.concat(app_names,","))
elseif( string.find( line, "var streamNamesHttp = new Array" ) ) then
_, _, str = string.find( line, "Array%( (.*)%);" )
repeat
_, len, s = string.find( str, "\"([^\"]+)\"" )
str = string.sub(str, len + 2)
table.insert( http_names, s )
until string.len(str) == 0
-- vlc.msg.warn(table.concat(http_names,","))
elseif( string.find( line, "var streamNamesRtsp = new Array" ) ) then
_, _, str = string.find( line, "Array%( (.*)%);" )
repeat
_, len, s = string.find( str, "\"([^\"]+)\"" )
str = string.sub(str, len + 2)
table.insert( rtsp_names, s )
until string.len(str) == 0
-- vlc.msg.warn(table.concat(rtsp_names,","))
elseif( string.find( line, "var streamNamesHls = new Array" ) ) then
_, _, str = string.find( line, "Array%( (.*)%);" )
repeat
_, len, s = string.find( str, "\"([^\"]+)\"" )
str = string.sub(str, len + 2)
table.insert( hls_names, s )
until string.len(str) == 0
-- vlc.msg.warn(table.concat(hls_names,","))
end end
line = fd:readline() line = fd:readline()
end end
...@@ -108,54 +150,39 @@ function main() ...@@ -108,54 +150,39 @@ function main()
vlc.msg.warn("Unable to locate iphone base url") vlc.msg.warn("Unable to locate iphone base url")
end end
-- fetch the current live status
-- XXX: disable live checks if show_all?
fd, msg = vlc.stream( "http://www.assemblee-nationale.tv/live/live.txt?rnd=" .. os.time() )
if not fd then
vlc.msg.warn(msg)
return nil
end
line = fd:readline()
while line ~= nil do
local stream = tonumber(line)
if stream ~= nil then
live_streams[stream] = 1
vlc.msg.dbg("live: " .. tostring(stream))
end
line = fd:readline()
end
-- build playlist
for idx=1,nb_streams,1 do for idx=1,nb_streams,1 do
-- we have a live stream -- we have a live stream
local is_live = false local is_live = live_streams[idx] ~= nil
-- the stream is 16/9
local is_169 = false
-- default art for this feed; agenda can have an alternate one -- default art for this feed; agenda can have an alternate one
local arturl = "http://www.assemblee-nationale.tv/live/images/live" .. idx .. ".jpg" local arturl = "http://www.assemblee-nationale.tv/live/images/live" .. idx .. ".jpg"
local line local line
vlc.msg.dbg("assembleenationale: checking live stream " .. tostring(idx))
-- XXX: disable live checks if show_all?
-- check for live stream
fd, msg = vlc.stream( "http://www.assemblee-nationale.tv/php/testurl.php?checkUrl=http://www.assemblee-nationale.tv/../../../live/live" .. idx .. "/live169.txt&rnd=" .. os.time() )
if not fd then
vlc.msg.warn(msg)
return nil
end
line = fd:readline()
if line == "true" then
--vlc.msg.dbg("LIVE 16/9")
is_live = true
is_169 = true
else
fd, msg = vlc.stream( "http://www.assemblee-nationale.tv/php/testurl.php?checkUrl=http://www.assemblee-nationale.tv/../../../live/live" .. idx .. "/live.txt&rnd=" .. os.time() )
if not fd then
vlc.msg.warn(msg)
return nil
end
line = fd:readline()
if line == "true" then
--vlc.msg.dbg("LIVE")
is_live = true
end
end
if is_live or show_all then if is_live or show_all then
-- add rtsp streams -- add rtsp streams
if do_rtsp then if do_rtsp then
local options={"deinterlace=1", "rtsp-tcp=1"} local options={"deinterlace=1", "rtsp-tcp=1"}
local path local path
if is_169 then path = rtsp_base .. rtsp_names[idx] .. "/live"
path = rtsp_base .. "fluxh264live" .. tostring(idx) .. "-169.sdp"
else
path = rtsp_base .. "fluxh264live" .. tostring(idx) .. ".sdp"
end
vlc.sd.add_item( {path=path, vlc.sd.add_item( {path=path,
duration=duration, duration=duration,
artist=artist, artist=artist,
...@@ -179,7 +206,7 @@ function main() ...@@ -179,7 +206,7 @@ function main()
-- add iphone (m3u8) streams, VLC doesn't like them much yet -- add iphone (m3u8) streams, VLC doesn't like them much yet
if do_iphone then if do_iphone then
local options={"deinterlace=1"} local options={"deinterlace=1"}
local path = iphone_base .. 'live' .. tostring(idx) .. '/stream' .. tostring(idx) .. '.m3u8' local path = iphone_base .. hls_names[idx] .. '/stream1.m3u8'
vlc.sd.add_item( {path=path, vlc.sd.add_item( {path=path,
duration=duration, duration=duration,
artist=artist, artist=artist,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment