-- Info-Beamer script with streaming channel support gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT) local json = require "json" local font = resource.load_font "roboto.ttf" local server_url = CONFIG.server_url or "http://192.168.1.22" local player_id = CONFIG.player_id or "default_player" local refresh_interval = CONFIG.refresh_interval or 30 local default_duration = CONFIG.default_duration or 10 local playlist = {} local current_item = 1 local item_start_time = 0 local last_update = 0 local channel_info = {} function update_playlist() -- Fetch channel content from server local url = server_url .. "/api/player/" .. player_id .. "/content" util.post_and_wait(url, "", function(response) if response.success then local data = json.decode(response.content) if data and data.content then playlist = data.content print("Updated channel content: " .. #playlist .. " items") -- Load assets for i, item in ipairs(playlist) do if item.type == "image" then item.resource = resource.load_image(server_url .. "/uploads/" .. item.filename) elseif item.type == "video" then item.resource = resource.load_video(server_url .. "/uploads/" .. item.filename) end end end end end) -- Also fetch channel information local channel_url = server_url .. "/api/player/" .. player_id .. "/channel" util.post_and_wait(channel_url, "", function(response) if response.success then channel_info = json.decode(response.content) or {} end end) last_update = sys.now() end function node.render() -- Update playlist periodically if sys.now() - last_update > refresh_interval then update_playlist() end -- If no playlist items, show waiting message if #playlist == 0 then font:write(100, 100, "Waiting for channel content...", 50, 1, 1, 1, 1) font:write(100, 200, "Server: " .. server_url, 30, 0.7, 0.7, 0.7, 1) font:write(100, 250, "Player ID: " .. player_id, 30, 0.7, 0.7, 0.7, 1) return end local item = playlist[current_item] if not item then current_item = 1 item = playlist[current_item] if not item then return end end local duration = item.duration or default_duration -- Check if it's time to move to next item if sys.now() - item_start_time > duration then current_item = current_item + 1 if current_item > #playlist then current_item = 1 end item_start_time = sys.now() item = playlist[current_item] end -- Display current item if item and item.resource then if item.type == "image" then item.resource:draw(0, 0, WIDTH, HEIGHT) elseif item.type == "video" then item.resource:draw(0, 0, WIDTH, HEIGHT) end -- Show channel info overlay (optional) if channel_info.name then font:write(10, HEIGHT - 60, "Channel: " .. channel_info.name, 20, 1, 1, 1, 0.8) if channel_info.description then font:write(10, HEIGHT - 30, channel_info.description, 20, 1, 1, 1, 0.8) end end end -- Show current time local current_time = os.date("%H:%M") font:write(WIDTH - 100, 20, current_time, 24, 1, 1, 1, 0.9) end -- Initial load update_playlist()