--[[
replay.lua
16/2/2024 by jokel
Version 0.90 beta
]]
local sender_mpd =
{ ["Das Erste HD"] = "https://mcdn.daserste.de/daserste/dash/manifest.mpd",
["arte HD"] = "https://arteliveext.akamaized.net/dash/live/2031004/artelive_de/dash.mpd",
["SWR BW HD"] = "https://swrbw-dash.akamaized.net/dash/live/2018674/swrbwd/manifest.mpd",
["SWR RP HD"] = "https://swrrp-dash.akamaized.net/dash/live/2018680/swrrpd/manifest.mpd",
["WDR HD Köln"] = "https://wdrfs247.akamaized.net/dash/live/2016702/wdrfs247_geo/dash.mpd",
["WDR HD Aachen"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018107/wdrlz_aachen/dash.mpd",
["WDR HD Bielefeld"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018117/wdrlz_bielefeld/dash.mpd",
["WDR HD Bonn"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018112/wdrlz_bonn/dash.mpd",
["WDR HD Dortmund"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018113/wdrlz_dortmund/dash.mpd",
["WDR HD Duisburg"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018115/wdrlz_duisburg/dash.mpd",
["WDR HD Düsseldorf"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018114/wdrlz_duesseldorf/dash.mpd",
["WDR HD Essen"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018118/wdrlz_essen/dash.mpd",
["WDR HD Münster"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018116/wdrlz_muensterland/dash.mpd",
["WDR HD Siegen"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018111/wdrlz_siegen/dash.mpd",
["WDR HD Wuppertal"] = "https://wdrlokalzeit.akamaized.net/dash/live/2018126/wdrlz_wuppertal/dash.mpd",
["BR Süd HD"] = "https://bfrsueddash.akamaized.net/dash/live/2016970/bfs_sued_de/dvbt2/manifest.mpd",
["BR Fernsehen Süd HD"] = "https://bfrsueddash.akamaized.net/dash/live/2016970/bfs_sued_de/dvbt2/manifest.mpd",
["BR Fernsehen Nord HD"] = "https://bfrnorddash.akamaized.net/dash/live/2016971/bfs_nord_de/dvbt2/manifest.mpd",
["NDR FS NDS HD"] = "https://mcdn.ndr.de/ndr/dash/ndr_hbbtv/ndr_hbbtv_nds/ndr_hbbtv_nds.mpd",
["NDR FS MV HD"] = "https://mcdn.ndr.de/ndr/dash/ndr_hbbtv/ndr_hbbtv_mv/ndr_hbbtv_mv.mpd",
["NDR FS HH HD"] = "https://mcdn.ndr.de/ndr/dash/ndr_hbbtv/ndr_hbbtv_hh/ndr_hbbtv_hh.mpd",
["NDR FS SH HD"] = "https://mcdn.ndr.de/ndr/dash/ndr_hbbtv/ndr_hbbtv_sh/ndr_hbbtv_sh.mpd",
["phoenix HD"] = "https://zdf-dash-19.akamaized.net/dash/live/2016512/de/manifest.mpd",
["PHOENIX HD"] = "https://zdf-dash-19.akamaized.net/dash/live/2016512/de/manifest.mpd",
["tagesschau24 HD"] = "https://tagesschau.akamaized.net/dash/live/2020098/tagesschau/tagesschau_3/tagesschau_3.mpd",
["ONE HD"] = "https://mcdn.one.ard.de/ardone/dash/manifest.mpd",
["ARD alpha HD"] = "https://ardalphadash.akamaized.net/dash/live/2016972/ard_alpha/dvbt2/manifest.mpd",
["SR Fernsehen HD"] = "https://swrsrfs-dash.akamaized.net/dash/live/2018687/srfsgeo/dash.mpd",
["Radio Bremen HD"] = "https://rbdashlive.akamaized.net/dash/live/2020436/rbfs/dash.mpd",
["rbb Brandenburg HD"] = "https://rbb-dash-brandenburg.akamaized.net/dash/live/2017827/rbb_brandenburg/manifest.mpd",
["rbb Berlin HD"] = "https://rbb-dash-berlin.akamaized.net/dash/live/2017826/rbb_berlin/manifest.mpd",
["MDR Sachsen HD"] = "https://mdrtvsndash.akamaized.net/dash/live/2094117/mdrtvsn/dash.mpd",
["MDR S-Anhalt HD"] = "https://mdrtvsadash.akamaized.net/dash/live/2094116/mdrtvsa/dash.mpd",
["MDR Thüringen HD"] = "https://mdrtvthdash.akamaized.net/dash/live/2094118/mdrtvth/dash.mpd",
["hr-fernsehen HD"] = "https://hrdashde.akamaized.net/dash/live/2024544/hrdashde/manifest.mpd",
["ZDF HD"] = "https://zdf-dash-15.akamaized.net/dash/live/2016508/de/manifest.mpd",
["ZDFinfo HD"] = "https://zdf-dash-17.akamaized.net/dash/live/2016510/de/manifest.mpd",
["zdf_neo HD"] = "https://zdf-dash-16.akamaized.net/dash/live/2016509/de/manifest.mpd",
["3sat HD"] = "https://zdf-dash-18.akamaized.net/dash/live/2016511/dach/manifest.mpd",
["KiKA HD"] = "https://kikageoilsdash.akamaized.net/dash/live/2099498/dashhbbtv-ebu-proxy-full/manifest.mpd"
}
local outputfile = "/tmp/output.mpd"
local dir = "/tmp/lcd/"
local service = dir .. "service"
local duration = dir .. "duration"
local event = dir .. "event"
local n = neutrino()
local vPlay = video.new()
function pop(cmd)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
return s
end
function sleep(a)
local sec = tonumber(os.clock() + a)
while (os.clock() < sec) do
end
end
function umlaute(s)
s=s:gsub("\xe4","ä")
s=s:gsub("\xfc","ü")
s=s:gsub("\xf6","ö")
return s
end
function getdata(Url, outputfile)
if Url == nil then return nil end
if Curl == nil then
Curl = curl.new()
end
local ret, data = Curl:download{ url=Url, A="Mozilla/5.0", o=outputfile }
if ret == CURL.OK then
if outputfile then
return 1
end
return data
else
return nil
end
end
function putdata(output, outputfile)
file_write = io.open(outputfile, "w")
file_write:write(output)
file_write:close()
end
function get_text(dir_file)
local file_read = io.open(dir_file, "r")
local data = {}
local i = 0
if file_read then
for line in file_read:lines() do
i = i + 1
data[i] = line
end
file_read:close()
--print("file found")
return data
else
--print("file not found")
return nil
end
end
function replay(name,title)
vPlay:setSinglePlay(true)
vPlay:PlayFile("Replay > " .. name, outputfile, title[1], title[2] )
end
function message(txt,s)
local h = hintbox.new{caption="Hinweis ...", text= txt}
if h then
h:paint()
end
sleep(s)
h:hide()
end
------------------- replay ------------------------------
local name = get_text(service)
if name == nil then
message("Die LCD4Linux Unterstützung ist ausgeschaltet \n\n Bitte einschalten.", 5)
return
end
name = umlaute(name[1])
local mpd_url = sender_mpd[name]
if mpd_url then
local file = getdata(mpd_url, outputfile)
if file then
local mpd_pos = (mpd_url:reverse()):find("/")
local mpd_tmp = mpd_url:sub( 1, #mpd_url - mpd_pos + 1)
local host = mpd_tmp
local mpdlines = get_text(outputfile)
mpdlines[2] = string.gsub(mpdlines[2],'timeShiftBufferDepth="PT(.-)S"', 'timeShiftBufferDepth="PT3H0M0S"')
if string.match(mpdlines[3], "' .. host .. '')
if string.match(mpdlines[6], "')
end
local title = get_text(event) -- action
putdata(output, outputfile)
replay(name .. " " .. dauer .. " min.", title)
local replay_end = pop("rm " .. outputfile)
else
message("konnte mpd nicht finden / laden", 3)
end
else
message("kein Replay für diesen Sender", 3)
end
collectgarbage()