I making a small extension that play/broadcast in loop all files with a given extension that are in a specific folder.
Code: Select all
-- afptvfbroad.lua -- VLC extension --
--[[
INSTALLATION:
Put the file in the VLC subdir /lua/extensions, by default:
* Windows (all users): %ProgramFiles%\VideoLAN\VLC\lua\extensions\
* Windows (current user): %APPDATA%\VLC\lua\extensions\
* Linux (all users): /usr/share/vlc/lua/extensions/
* Linux (current user): ~/.local/share/vlc/lua/extensions/
(create directories if they don't exist)
Relaunch the VLC with something like:
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" --file-logging --logfile="c:\toto\pp-vlc-log.txt" --scale=0.25 --log-verbose=2 --sout=#duplicate{dst=display,dst="standard{mux=ts,dst=158.50.181.255:10012,access=udp}"} or just the player
Then you simply use the extension by going to the "View" menu and selecting it.
--]]
-----------CORE-----------------
function descriptor()
return {
title = "AFTV FILES UDP BROADCASTER";
version = "0.9";
author = "work.philippe.perquin@gmail.com";
url = '';
shortdesc = "AFTV FILES UDP BROADCASTER";
description = "<div style=\"background-color:lightgreen;\"><b>AFTV FILES UDP BROADCASTER</b> AFTV FILES UDP BROADCASTER is VLC extension (extension script \"afptvfbroad.lua\") that UDP broadcast files in a folder.</div>";
capabilities = {"input-listener", "playing-listener", "meta-listener"}
}
end
counter_update=0
function activate()
display = vlc.dialog( "Playlist Update for: "..video_extension.." In folder: "..video_path )
display1=display:add_label( string.format("0") ,1,1,1,1)
systemTime = os.date("%H:%M:%S")
display2=display:add_label( string.format("0"),2,1,1,1)
display3=display:add_button( "OK", function () display:hide() end,4,2,1,1 )
display:show()
vlc.playlist.clear()
update_playlist_add()
update_playlist_delete()
input_callback("add")
if not vlc.input.is_playing() then vlc.playlist.play() vlc.playlist.loop("on") end
end
function deactivate()
input_callback("del")
if vlc.input.is_playing() then vlc.playlist.loop("off") vlc.playlist.stop() end
end
function close()
vlc.deactivate()
end
function input_changed()
input_callback("toggle")
end
function meta_changed()
end
function playing_changed()
end
old_input="titi"
callback=false
function input_callback(action) -- action=add/del/toggle
if (action=="toggle" and callback==false) then action="add"
elseif (action=="toggle" and callback==true) then action="del" end
local input = vlc.object.input()
if input and callback==false and action=="add" then
callback=true
vlc.var.add_callback(input, "intf-event", input_events_handler, "Hello AFPTV!")
elseif input and callback==true and action=="del" then
callback=false
vlc.var.del_callback(input, "intf-event", input_events_handler, "Hello AFPTV!")
end
end
last_call = 0
function input_events_handler(var, old, new, data)
--Ordinarily one would do this to only act every 2 seconds.
local current_call=os.clock()
local result_call=current_call - last_call
if result_call < 10 then return end
last_call = current_call
update_playlist_delete()
update_playlist_add()
display1:set_text( string.format("Process complete. Removed: " .. totaldelete .. " Added: " ..totaladd.. " Staying: " ..total_in_playlist) ,1,1,1,1)
systemTime = os.date("%H:%M:%S")
display2:set_text( string.format("Last update : " ..systemTime.." Updated: "..counter_update),2,1,1,1)
display3:set_text( "OK", function () display:hide() end,4,2,1,1 )
display:update()
local current_input = vlc.input.item()
local current_input_name = current_input:name()
local path_saved_file=string.format(video_path.."lastplay.txt")
local saved_file = io.open(path_saved_file, "w")
saved_file:write(string.format(systemTime.." Last file read : "..current_input_name))
saved_file:flush()
saved_file:close()
end
----------------------------REGLAGES
--video_path="/Users/pil/Desktop/test liste/"
video_path="C:/test liste/mp4/"
video_extension=".mp4"
ip_for_broadcast=""
totaldelete=0
totaladd=0
total_in_playlist=0
----------------------------CASE DELETE--
--verify if file from playlist are delete and delete them in playlist
function update_playlist_delete()
local counter = 0
for i, v in pairs(vlc.playlist.get("playlist",false).children) do
-- check if delete
if (string.find(v.name,video_extension)== nil) then
--case delete delete it from playlist
vlc.playlist.delete(tonumber(v.id))
--count deleted
counter = counter + 1
end
end
--for all video in playlist
for i, v in pairs(vlc.playlist.get("playlist",false).children) do
-- check if delete
if check_delete(v.path)==true then
--case delete delete it from playlist
vlc.playlist.delete(tonumber(v.id))
--count deleted
counter = counter + 1
end
end
--return number of deleted
totaldelete = counter
-----------TEMP
counter_update = counter_update + 1
end
function check_delete(filepath)
-- remove the file:/// from filepath
local pathval = string.gsub(filepath, "file:\/\/\/", "")
-- if pathval is NULL return
if pathval==nil then return false end
-- remove escape char from pathval
pathval = unescape(pathval)
-- try to acces the file
local file,err,code = io.open(pathval, "r")
-- if error and code 2 then file is deletete
if err and code==2 then return true end
return false
end
function unescape(str)
-- translate the %% in file path
local newstr = string.gsub (str, "%%(%x%x)", function(h) return string.char(tonumber(h,16)) end)
if newstr==nil then newstr=str end
return newstr
end
----------------------------CASE ADD--
--verify if new files are in folder and add files with good video_extension in playlist
function update_playlist_add()
local counter = 0
local counter_in_playlist = 0
local file_allready_exist = false
local new_item = {}
-- Load directory contents into a table
local contents_in_directory = vlc.net.opendir(video_path)
-- for each file in directory
for _, file_in_dir in pairs(contents_in_directory) do
-- compare with each entry in the playlist
for _, in_playlist in pairs(vlc.playlist.get("playlist",false).children) do
--if exits stop compare saying it exist
if in_playlist.name==file_in_dir then file_allready_exist=true end
end
-- if not exist add it to playlist
if not file_allready_exist then
new_item.path = "file:///"..video_path..file_in_dir
new_item.name = file_in_dir
--verify if it s good extension
if not (string.find(file_in_dir,video_extension)== nil) then
--add it to playlist not playing
vlc.playlist.enqueue({new_item})
-- count as added
counter = counter + 1
end
end
file_allready_exist=false
end
-- count total of video staying in playlist
for _, in_playlist in pairs(vlc.playlist.get("playlist",false).children) do
counter_in_playlist = counter_in_playlist + 1
end
totaladd = counter
total_in_playlist = counter_in_playlist
-----------TEMP
counter_update = counter_update + 1
end
This extension seem to work with 2.05 and 2.06 but VLC crach after a few moment (sometime 5 minutes, 2 hours, 30 minutes). And i need to use it 24/24.
Can it comme from Lua?
Regards,
Philippe