-- Astra Script
-- Play a list of the files (m3u or simple text file)
-- Address format: pls://path
-- path - full path to the playlist
-- Additional options:
-- loop - start from begining after the end of list
astra_storage["/mod.js"] = [[
make_url_format.pls = function(data, except) {
var r = "pls://";
if(data.addr) { r += data.addr; except.push("addr"); }
return r;
};
]]
init_input_module.pls = function(config)
local instance = transmit({ current = 0 })
local f = io.open(config.addr)
if not f then
log.error("[" .. config.name .. "] playlist not found")
return instance
end
local list = {}
while true do
local l = f:read()
if not l then
break
end
if l:find("^#") then
--
else
table.insert(list, l)
end
end
f:close()
if #list == 0 then
log.error("[" .. config.name .. "] empty playlist")
return instance
end
local function playnext()
local current = instance.__options.current + 1
if current > #list then
instance.__options.current = 0
if config.loop then
playnext()
return nil
else
instance.__options.input = nil
instance.__options.tail = transmit({})
log.info("[" .. config.name .. "] end of playlist")
end
else
instance.__options.current = current
instance.__options.input = file_input({
filename = list[current],
callback = playnext
})
instance.__options.tail = channel({
upstream = instance.__options.input:stream(),
name = config.name,
pnr = 0,
set_pnr = 1,
map = { {"pmt",100}, {"video",101}, {"audio",102} }
})
end
instance:set_upstream(instance.__options.tail:stream())
end
playnext()
return instance
end
kill_input_module.pls = function(instance)
instance.__options.current = nil
instance.__options.input = nil
instance.__options.tail = nil
end
Comments