Knihovna AVD - AVC internal wiki
1
Knihovna AVD Z AVC internal wiki
Obsah 1 knihovna AVD 1.1 Motivace 1.2 Rešerše - hledání rozhraní pro přístup k videím 1.3 Technický cíl 1.4 Technický popis 2 Implementace 2.1 Cílový tvar kódu 2.1.1 objektový přístup 2.1.1.1 Objektový přístup : s databází 2.2 Základní/abstraktní třídy 2.3 Adresování informací pro ukládání (datacentrum) 2.4 Testovací demonstrační webservice 2.5 Deployment instalace 2.5.1 Standalone(full-client) 2.5.2 Servererové části
knihovna AVD knihovna AVD - AudiovVisualDimension- knihovna pro snadný přístup k AV datům Semestrální projekt - Petr Vacek(
[email protected])
Motivace Při mnohaleté práci s velkým video archívem v AVC Studentů ČVUT jsme často naráželi na problém, kdy není snadné s velkým počtem videí (více jak700 záznamů, které mají každý více AV souborů) pracovat, ve smyslu analýzy technických i jiných chyb v záznamech, jejich korekci či úpravě. Bylo proto zbrzděno mnoho zajímavých nápadů- třidit videa podle barvy, hledat snímky s obličeji, vyhledat chyby ve zvuku (tichá místa), videa s nevyváženým zvukem, případně videas chybějícími znělkami, apod. Problémy snadno řešitelné na jeden konkrétní obraz- fotku se nedají v dnešní době snadno přenést a aplikovat na celý videoarchív. Proto je tu prostor pro knihovnu funkcní, která by toto usnadnila, a umožnila psát jednoduché programy, které již nebudou řešit umístění videí, kodeky a umožní přímý přístup k pixelům jednotlivých video snímků či vzorkům audio dat.
http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34
Knihovna AVD - AVC internal wiki
2
Rešerše - hledání rozhraní pro přístup k videím Opensource řešení, které umožnují programovým kódem operavat s AV soubory a které jsou schopné fungovat na více platformách mnoho není, existuje napojení Quicktime na Javu, které však vypadá, že zastarává, navíc dostupné funkce se liší pod operačnímsystémem Mac OS a Windows, pro linux vůbec není k dispozici. Prvotní pokusy jsem prováděl s projektem FFmpeg-java, který je však už neudržovaný a vyžaduje specifickou verzi ffmpeg, která už není dostupná pro všechny platformy. Jako nejlepší řešení se ukazuje být aktivní projekt Xuggler, který je opensource, a který se aktivně vyvíjí a obsahuje předkompilované funkční verze FFmpegu, které jsou k dispozici pro všechny hlavní platofrmy Windows, Linux ,Mac OS X . Tentoprojekt má také výhodu, že jepsán ve dvou jazycích - v C++ a v jazyce Java, lze jej proto integrovat do více projektů bez vetšíchzměn v kódu.
Technický cíl Cílem by bylo k archívu videí (AVC) přidat vrstvu knihovnu (ideálně platformě nezávislou), která by pak zjednodušila programům přístup k jednotlivým snímkům jednotlivých videí v nativním formátu programovacího jazyka/ platformy, tj. aby se daly tvořit analyzátory/filtry pro videa v archívu (např. archív avc) ,která se nemusejí starat o kodeky a umístění videí, tj. obyčejný program pak může analyzovatzpracovávat video a přidávat k němu (do nějaké formy databáze) informace a například tak třídit videa podle barvy nebo detekovat snímky s obličeji lidí - což jsou pro jeden snímek snadné úlohy ale napojení na celý archív videí není zatím přímočará věc.
Technický popis Kvůli platformové nezávislosti a objektovosti jsem zvolil jazyk a platformu Java Projekt používá knihovnu Xuggler (http://www.xuggle.com/xuggler/) (opensource pod licencí LGPL), která obaluje knihovny FFmpeg (http://ffmpeg.org/) (opensouceGPL/LGPL) a má rozhrání pro jazyk Java, takto lze přistupovat k mnoha typům AV souborů. Projekt nad toto přidává další vrstvu, kdy nezáleží zcela umístění souboru - lze přistupovat k vzdáleným souborům, a lze je zpracovávat po skupinách.
http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34
Knihovna AVD - AVC internal wiki
3
Další vrstva dále umožnuje zjednodušit ukládání informací ze zpracování - poskytuje funkce databáze informací, které samy adresují data zpracování. Dodatečné usnadnění přístupu spočívá v instalaci projektu na server, kde pak probíhá zpracování nezávisle na klientovi, který také nemusí instalovat ani základní knihovny projektu, ale pouze interface a dodat svůj kód , případně využívá předem připravených webovýchslužeb pro zpracování/analýzu videa Pro budoucí urychlení může server k určitýmsouborům přistupovat jako k lokálním pro urychlení toto usnadňuje třída, překládající odkazy - LocalLinksTransformer
Implementace Cílový tvar kódu brána posktyje prostředky pro zpracování : obrazových dat video smímku zvukových dat (pseudo kód demonstrující jednoduchost přístupu) objektový přístup
návrh fungovování v2 draft
// prožene všechny akce na url a jejich framy přes operaci .... Dimension d = new HTTPDimension("http://media.avc-cvut.cz/"); //následující cyklus proběhne všechny díla v archívu (dimenzi) a jejich snímky zpracuje definovanou operací for (AVcreation curCreation: d.getCreations() ) { curCreation.processBy(new OurFrameOperation() ); } static class OurFrameOperation extends VideoFrameOperation {
návrhový class diagramdiagram tříd
@Override public void onVideoPicture(IVideoPictureEvent event) { // .... operace s obrazem } }
Objektový přístup : s databází
// prožene všechny akce na url a jejich framy přes operaci .... Dimension d = new HTTPDimension("http://media.avc-cvut.cz/"); d.attachDatacenter( new FileDatacenter("/datacenter/avd/") ); Datacenter store = d.getDatacenter(); DataChannel ourOperationData = store.createDataChannel("ourOperation.1042"); //kanal pro ukladani for (AVcreation curCreation: d.getCreations() ) { curCreation.processBy(new OurFrameOperation(),ourOperationData ); } static class OurFrameOperation extends VideoFrameOperation { @Override public void onVideoPicture(IVideoPictureEvent event) { // .... operace s obrazem defaultDataChannel.addResult( data ); } }
http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34
Knihovna AVD - AVC internal wiki
4
Základní/abstraktní třídy dimenze - abstraktní - brána obsahující Akce AVC brána - brána pro AVC web HTTP brána - brána pro HTTP adresář av dílo (AVcreation) - shluk video souborů patřící k jednomu obsahu (z hlediska AVC webu "akce") av medium - audiovizuální soubor (video soubor ,zvukový soubor) VideoOperation - operace zpracovávající obrazová data AudioOperation - operace zpracovávající zvuková data PacketOperation - operace zpracovávající paket - umožnuje sdružovat zpracování audio a video operací datacenter - abstraktní - brána umožnující ukládat informace zpracování HypertableDatacenter - databáze uložená v objektovém systému Hypertable FileDatacenter - pseudo databáze používající souborový systém pro ukládání informací datachannel - datový kanál přiřazený operaci v rámci datacentra - umožnujě adresovat/mapovat informace
Adresování informací pro ukládání (datacentrum) datacentrum má charakter stromu adresa dimenze dimenze:adresa akce avsoubor operace snímek ( / číslo paketu ) DATA
výpis Java tříd z hlavní knihovny
• možné hierarchie : hierarchie : akce/videosoubor/snímek/data operací hierarchie : akce/videosoubor/data operací hierarchie : akce/videosoubor/data operací/snímek URL: avd://avcweb/1024/ahoj.mp4/1/colorsort/ .... data URL: avd://avcweb/1024/ahoj.mp4/colorsort/ .... data URL: avd://avcweb/1024/ahoj.mp4/colorsort/1/ .... data tvar dat: požadavky na flexibilitu typu a rozsah dat, vazba na snímeknebo celé video požadavek na nespojitost dat - nemusejí být definoványna každý snímek
Testovací demonstrační webservice Informace o souboru : http://sun.avc-cvut.cz:8080/avd-ws/fileinfo?url=http:// parametr : url = adresa http souboru k analýze http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34
Knihovna AVD - AVC internal wiki
5
příklad: http://sun.avc-cvut.cz:8080/avd-ws/fileinfo?url=http:// media.avc-cvut.cz/Fyzikalni_ctvrtky/2007/COIL_laser/Chemicky_ laser_COIL_laser_pro_specialni_narocne_technologie_divx.avi Náhled ze souboru : http://sun.avc-cvut.cz:8080/avd-ws/thumbnail?url= parametr : url = adresa http souboru k analýze parametr : frame = snimek ze ktereho se delanahled parametr : format = formát výstupu : png | jpg| bmp parametr : scale = 1 , 1.0 , 0.5 .... relativní zmenšení při zachování aspektu parametr : op =rasterove operace ";timecode;" přidá časovou značku do framu ";text-prescale;" přidá text do rohu před změnami rozměrů, text je v parametru text :-) parametr : seekframe = 1 .. 12345678zkusí seekovat na číslo snímku - pozor nemusí se trefitna klíčový (záleží na dost prostředí/obálce/kodeku) příklad: http://sun.avc-cvut.cz:8080/avd-ws/thumbnail? porovnání rybí kosty s scale=0.5&format=jpg&frame=200&url=http://media.avc-cvut.cz/ audacity xml/prague_2007/xml_with_fun/Eric_van_der_Vlist-Processing_ XML_With_Fun_wmv9_400kbit.wmv příklad: http://sun.avc-cvut.cz:8080/avd-ws/thumbnail?frame=200&url=http://media.avc-cvut.cz/ xml/prague_2007/xml_with_fun/Eric_van_der_Vlist-Processing_XML_With_Fun_wmv9_ 400kbit.wmv pokus se seekováním: http://sun.avc-cvut.cz:8080/avd-ws/thumbnail? seekframe=42000&op=;timecode;&frame=1&url=http://media.avc-cvut.cz/xml/prague_2007/ xml_with_fun/Eric_van_der_Vlist-Processing_XML_With_Fun_wmv9_400kbit.wmv poznamka: ziskani 200. snimku cca 1s, 220. ... 1s, 2200. ... odhadem 20s (cim dalve videu, tim to trva hrozne dlouho) seekování je v todo listu :-) Náhled ze souboru s editací obrazu : http://sun.avc-cvut.cz:8080/avd-ws/thumbtime?url= parametr : url = adresa http souboru k analýze parametr : frame = snimek ze ktereho se delanahled příklad: http://sun.avc-cvut.cz:8080/avd-ws/thumbtime?frame=200&url=http://media.avc-cvut.cz/ xml/prague_2007/xml_with_fun/Eric_van_der_Vlist-Processing_XML_With_Fun_wmv9_ 400kbit.wmv
Rybí kostra (visualizace audio peaků) http://sun.avc-cvut.cz:8080/avd-ws/fishbone?url= parametr : url = adresa http souboru k analýze příklad: http://sun.avc-cvut.cz:8080/avd-ws/fishbone?url=sun.avc-cvut.cz/avd/neco.wav
Deployment instalace Standalone(full-client) projekt by měl mít v cestě knihovny , pomohlo nakopírovat do rootu projektu netbeans všechny lib* soubory xuggleru (asi 50 MB) do .bash rc přidat exporty cest
http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34
Knihovna AVD - AVC internal wiki
6
export XUGGLE_HOME=/usr/local/xuggler export LD_LIBRARY_PATH =$XUGGLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$XUGGLE_HOME/bin:$PATH
Servererové části Sun Glassfish server (v 2.1 a vyšší případně v3) na linuxu, musí souhlasit verze knihoven (32bit vs 64bit) , nahrát knihovny do glassfish/lib do .bashrc přidat exporty cest export XUGGLE_HOME=/usr/local/xuggler export LD_LIBRARY_PATH =$XUGGLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$XUGGLE_HOME/bin:$PATH
Citováno z „http://awiki.avc-cvut.cz/awiki/index.php/Knihovna_AVD“ Stránka byla naposledy editována v 09:43, 23. 2. 2010.
http://awiki.avc-cvut.cz/awiki/index.php?title=Knihovna_AVD&printable=yes
11 March , 2010 10:55:34