VLC doplnky- Lua skript- Ako použiť vlc.var.add_callback()?

Programovacie jazyky, rady, poradňa...
mederi
Amateur
Amateur
Príspevky: 16
Registrovaný: 05 feb 2011, 14:33

VLC doplnky- Lua skript- Ako použiť vlc.var.add_callback()?

Príspevok od používateľa mederi »

Nie som si istý, či je to správne fórum na môj dotaz, ale skúsim, keď som už tu zaregistrovaný a možno motyka vystrelí :)

Určite poznáte znamenitý multimediálny prehrávač / streamer / konvertor VLC: http://www.videolan.org/
Dlho som prehliadal možnosť vylepšiť si ho rôznymi doplnkami, no teraz som sa na to pozrel a zistil som, že to má určitý potenciál a programovanie skriptov v Lua nie je až také náročné. Chcel by som spraviť doplnok (extension), ktorý by prehrával titulky v externom okne no s možnosťou aj vo videu: VLC Extension: subtitler >> External / Dual subtitles
Takto by sa dalo sledovať naraz viac nezávislých titulkov napríklad pre účely výuky cudzieho jazyka alebo pre multijazyčných divákov.

Problém však je, že neexistuje dostatočná dokumentácia a príklady použitia jednotlivých funkcií. Vyzerá to tak, že developeri si to spravili skôr len pre seba, než pre bežného užívateľa - neprogramátora. Na tom fóre jeden developer načrtol riešenie (http://forum.videolan.org/viewtopic.php ... 36#p327808 , http://forum.videolan.org/viewtopic.php?f=29&t=98295), no podrobnosti už odmieta prezradiť. Asi platí, že: "Nemaže - klepe to!" :)

Teraz by som potreboval zistiť, ako sa vlasne používa vlc.var.add_callback(). Zmienka o tom je v "README.txt" dokumente (aktuálne pre VLC2), ktorý bol donedávna súčasťou VLC (v adresári ... \lua\).
Na Wiki VLC stránkach je uvedené len ako sa robí playlist a tam dole sú uvedené 2 užitočné adresy o programovaní v Lua:
> Lua 5.1 reference manual
> Lua tutorials
No mňa zaujíma iný typ doplnku - extension, na ktorý návod nie je. Sú len hotové skripty, ktoré slúžia ako príklady použitia. Vo verziách VLC 1.1.x boli v príslušnom podadresári (... \lua\extensions\) napríklad Allociné a IMDb. Práve sa pokúšam podľa toho rozchodiť CSFD.cz extension, ktorý si budete môcť hádam už čoskoro aj vyskúšať. Z grafického rozhrania VLC sa to potom spúšťa cez menu View > CSFD.

========================================
Nedalo by sa to, čo potrebujem vedieť o konkrétnom použití vlc.var.add_callback(), vyčítať napríklad zo zdrojákov VLC? A možno to má obdobné použitie ako v jazyku C, len trochu inú formu. V tom C sa to možno nevolá "callback" ale narazil som na výraz "hook". Čiže potreboval by som nejako sledovať ten "time" objektu "input" a nejako reagovať na určitú udalosť (event). Nie som v tom doma, takže možno mi tu niekto poradí.
========================================

Vlastne ten celý môj záujem o programovanie doplnkov VLC začal, keď som narazil na jednoduchý skriptík, čo som aj prezentoval tu: VLC Extension: When will this be over?
Ešte vám uvediem malý príklad, skriptík, ktorý som si spravil na zobrazovanie času v pravom-hornom rohu počas sledovania filmu. Funguje len vo VLC 1.1.x pretože v novej verzii VLC2 bol vypnutý ten vlc.misc pre extensions. Už som kontaktoval toho príslušného za to zodpovedného developera.

Kód: Vybrať všetko

-- "time.lua"
-- Extension description
function descriptor()
    return { title = "time" ;
             version = "1.0" ;
             author = "" ;
             url = '';
             shortdesc = "";
             description = "";
             capabilities = {""}
		    }
end
-- Activation hook
function activate()
  create_dialog()
end
-- Deactivation hook
function deactivate()
end
function close()
	deactivate()
end


function create_dialog()
    dlg = vlc.dialog("Time")
	w1 = dlg:add_label("Time is running",1,1,1,1)
	w2 = dlg:add_button("STOP", click_STOP, 1, 2, 1, 1)
	dlg:update()

	while w1:get_text()=="Time is running" do
		dlg:update()
		local systemTime = os.date("%H:%M:%S")
		vlc.osd.message(systemTime,channel1)
		vlc.misc.mwait(vlc.misc.mdate() + 500000)
	end
end

function click_STOP()
	w1:set_text("STOP")
	dlg:update()
end
Takže to si dajte do súboru "time.lua" a šup ho do VLC podadresára \lua\extensions\ . Potom počas sledovania filmu z menu View (Zobraziť) > time
Mimochodom, ten čas je potom nezastaviteľný, keďže sa mi nepodarilo vyriešiť, ako pretrhnúť tú čakaciu slučku. Nevadí, len na konci filmu treba potom ten prehrávač vypnúť "natvrdo" :)
Napísať odpoveď