and_cesbo icon

Astra. Playlist for groups

and_cesbo | PRO | 10/24/17 10:55:49 AM UTC | 0 ⭐ | 1362 👁️ | Never ⏰ | []
Lua |

2.15 KB

|

None

|

0 👍

/

0 👎

-- Script for Astra 5.63 and newer
-- Save script to /etc/astra/mod/playlist.lua , and restart Astra
--
-- Create groups (category and group names for example):
-- Open Settings -> Groups -> New Category
-- Category Name : Genre
-- Group Name : Music
-- Press "Add Group" and append other groups Sport, Movie, etc...
-- Press "Apply", then press "Streams"
-- Select Music and check all channels related to this groups. Then select other group and check related channels
--
-- Link for playlist will be next:
-- http://your-server:8000/playlist/Genre/Music.m3u8 - all music channels
-- http://your-server:8000/playlist/Genre/Sport.m3u8 - all sport channels
-- http://your-server:8000/playlist/Genre.m3u8 - all channels
 
function custom_playlist_m3u8(server, client, request)
    if not request then
        return nil
    end
 
    local a = request.query.server
    if not a then
        a = request.headers["host"]
        if not a then
            server:abort(client, 400, "Server address is not defined")
            return nil
        end
    end
 
    local q = request.request_uri:sub(#request.path + 1)
    if http_play_hls then
        q = "/index.m3u8" .. q
    end
 
    local g = request.path:sub(1, #request.path - 5):sub(11):split("/")
    local category = g[1]
    local group = g[2]
 
    local content = "#EXTM3U\n"
 
    if not group then
        for k,c in pairs(channel_list_ID) do
            if c.config.groups and c.config.groups[category] ~= nil then
                content = content .. "#EXTINF:-1," .. c.config.name .. "\nhttp://" .. a .. "/play/" .. k .. q .. "\n"
            end
        end
    else
        for k,c in pairs(channel_list_ID) do
            if c.config.groups and c.config.groups[category] == group then
                content = content .. "#EXTINF:-1," .. c.config.name .. "\nhttp://" .. a .. "/play/" .. k .. q .. "\n"
            end
        end
    end
 
    server:send(client, {
        code = 200,
        headers = { "Content-Type: application/x-mpegurl", "Connection: close" },
        content = content,
    })
end
 
control_server_instance:insert("/playlist/*", custom_playlist_m3u8)

Comments