dobrý den
takže už víte jak se menuju
dnešní přednáška je vlastně určená pro ty kteří se s multimediálními chrie bortí a kafem
pekáči streamery ještě nesetkali
a které zajímají právě multimédia to jaksi napsat vlastní přehrávač editoru vydá kodek nebo něco
podobného
a pokud už jste se s nimi setkali pokud chci píšete aplikace tak
možná že nakonec neska poučíte vy mě
já bych vás na začátek uvedl do kontextů co to vlastně ty multimediální které morky
jsou a proč bysme měli použít co nám to přinese
co jsou to multimédia existuje obrovská spousta definic
pro nás to mohou být data jako máte napsaný tady na tom prvním řádku tech
zvuková data statický obraz animace té sekvence obrazů nebo video T je to znamená zvuk
i obraz
případně nějaké tři D data medicínská data cokoli takového a ještě k tomu přidáme metainformace
to znamená nějaké informace o autorech já nevím název filmu název skladby kapitoly prostě metainformaci
k těm datům
a ty multimediální data se typicky vyznačují tím že sou jednak obrovská
a to znamená jsou to gigabajt i dat nekomprimované formě
a
jednak jsou nestrukturovaná za to znamená že to nejsou nijak že bysme mohli jednoduše parsovat
takže jak se s tímhle vypořádat se bysme snímat chtěli dělat potřebujeme získávat znamená zachytávací
ňáké ve kamery S nějakého mikrofonu nebo ze sítě rádi bysme si je uložili na
disk co se něco sebou přináší ten problém že nechceme aby nám pár minutové video
zabralo C D
třeba půl té roviny s takže je zde potřeba nějaké komprese ram může být buď
pomalá bezeztrátová nebo rychlá a ztrátová účinná
tak dále bysme mohli chtět těchhle datech vyhledávat to znamená chtěli bysme rozumět těm metadatům
tady se bavim o vyhledávání podle popisu nikoli podle obsahu
a můžeme chtít ale data přehrát napsat si přehrávač videa nebo M P třicet přehrávat
případně nějaké větší editace aplikace to true extrakci nějakých kde snímků přeházení znovu uložení do
kontejneru prostě nějaké náročnější úpravy Á kdybysme si tohle všechno měli psát ručně parsovat tady
ty multimediální kontejnery byte po bajtů tak bysme vtom jedna nadělali spoustu chyba jednak by
nám to zabralo spoustu času takže k tomuto máme ty multimediální prej morky když si
chcete psát přehrávač tak je výhodné ho postavit na nějaký multimediální ten korkem a tady
ten gregory by měl zastřešit tady tyhle naše požadavky a to zejména to Ú tu
práci s kontejnerem a tu kompresi
tady je rozebráno ještě jednou to ukládání máme nějaký kontejner firem třeba dejme tomu a
víčko nebo má trošku které jsou uloženy jednotlivé stopy video stopy audio stopy cokoli i
ta meta data jsou tam uloženy a ten multimediální kterému rok musí tohle umět otevřít
a vytáhnout toho push jako nekomprimované ty snímky případně pozpátky umět zabalit do toho kontejneru
zkomprimovat takže k tomuhle to je
to sou multimédia teďka co to vlastně ty multimediální které morky sou já dneska budu
hovořit o dvou první polovině o tom T M P Q a ve druhé polovině
očí streamerů
že multimediální které more veškerou tuhle funkcionalitu za obaluje
a ve
žádný jaksi neumí všechno
žádný neběží na každé platformě takže je to potom takové musíme si vybrat podle našich
omezení
ten borec je typický několik knihoven které mají svoje rozhraní
a plus je to několik jednoduchých nástrojů typicky pro příkazovou řádku které mě umožňují takovouto
rychlou práci zbyde já nevím triviální přehrávač nebo jednoduchý nástroj který vyplivne do koncové informace
o tom hlavičku vote matroš co nějakém webů jako je délku trvání použitou kompresi a
tak dál takže je to soubor nějakých knihoven případně jednoduchých nástrojů
multimediálních nebo
to je s čím umí pracovat musí umět otevřít různé kontejnery to znamená já nevím
případě statického obrazu by to bylo třeba kdysi nebo J fí případě toho videa to
bude to a dýčko ten přímo tak program stream pak transport stream prostě spousta těch
kontejnerů dneska populárním a troška
bude muset umět pracovat z různě s komprimovanými datovými stopami obdiv kontejneru to znamená třeba
video je uložen dvě stě šedesát čtverce ten pro ten port musí k sobě mít
kodek aby tady tu a dvě stě šedesát čtverku dekódoval a nebo naopak při ukládání
aby to není uměl zabalit uložit
takže to sou kodeky a video budeme ještě zachytávat dejme tomu z vysílání přes síť
takže měl by obsahovat různé přístupové protokoly jednak jako k té síti a také jinak
různým subsystémům já nevím video for linux třeba případě toho linuxu abych se dostal teda
kameře nebo o se skoro bych se dostal k tomu mikrofonu nebo abych to zpátky
třeba pustil do ty reproduktorů takže tohle všechno musí umět zařízení protokoly kodeky kontejnery s
různými musím ně pracovat
a jaké nebo máme požadavky
jednak by měl být modulární ale toff tohle myslím v tom smyslu že by měl
umožňovat do sebe zasouvaly další a další moduly nějaké planiny
například ten R T M P který bude za chviličku té jednolitý from borec do
kterého nic nepřidáme li ven dopřidat svůj filtr svůj kodek tak musíme modifikovat zraky překompilovat
hrozná otrava naopak ten druhý číst riemann normální zkompiluje modul nemusíme mě dání nějaké administrátorské
oprávnění zaběhlo za běhu uživatel načte modul a frymburk mi pracovat s mým novým formátem
nebo aplikovat můj nový filtr a tak dál
potřebovali bysme by měl co nejširší podporu formátu například takle mpeg ten implementuje kodér dekodér
boxerem user opravdu téměř ke každému formátu naopak ten R G stream R tak širokou
podporu nemá ale umožňuje nám je takový propracovanější to vidíte dál nemá ale takovou širokou
podporu
těch formátu tady bysme ho jednoduše použili dokumentace výkonů by běžel na té naší platformě
takové další požadavky a jak jsem říkal ne ani jeden neumí vše tenhleten mpeg třeba
není asi tak stabilní jako jeho for clip a ve pak máme další pro linux
limbor ti já nevím C nalito délce von on máme pro jiné platformy je F
morky třeba pro windows je to direct show nebo starší videa video for windows
nebo novější mít jak tamější jejich obrovská spousta tohle okýnko přehrávače který je postavený na
horkém diktální
například takže
teď graficky co to ten multimediální firmware je pro nás je to teda nějaký soubor
nějakých knihoven které mají nějaké rozhraní a po z nějaké jednoduché nástroje pro práci s
tím vlakem horkem
teď nut tímhle kterém horké mívají registr S vystavěny
různé aplikace tady máme například přehrávač videa editor dá nebo ji streamovací server a tak
dál dejme tomu nějaký vojtek klient a naopak poctím to horkem bývají nějaké těch přístupové
moduly jako chtěl mu renderovací zařízení sokolem subsystému prosí nějaké filtry já nevím odstranění prokládání
odstranění šumu a změna snímkové frekvence těch filtrů může být spousta a stejně tak kodér
dekodér nějaké audiovideo stopě planina a tak dále takže byly vidíme že ty rozhraní toho
multimediálního F morku sou vlastně dvě jedno je takový pohled z vrchu s pohledu té
aplikace co využívají a druhé rozhraní je tak nějak interně zespodu s pohledu nějakých N
nových zásuvných modulů C rozšiřují funkcionalitu to from vodku aby to třeba mělo být zvědavi
tou mělo nás dvě stě šedesát čtverku
takhle dál se tam za souvají nějaké tu pluginy a využívají odlišné části toho a
P to rozhraní těch knihoven
takže T nějakých globální pohled na ten frame bod a teď se pojďme podívat dovnitř
toho from dvorku
uvnitř toho from horku závislosti na té naší aplikaci tečou nějakým způsobem data toho lze
znázornit tak zvaný mega ten filtru který vidíte tady
jinak se tomu taky říká pipeline třeba terminologii točí streamerů
a tohle je velmi jednoduchý přehrávač na začátku máme nějaký je zdroj dat
prostě zdrojový filtr těm krabičkami se říká filtry nebo elementy
podle toho v jakém F morku se pohybujeme zdrojový je teda označený zeleně ten posíláte
data tlačíte data dal do té pipeliny dále tu máme nějaké filtry to co provádí
transformaci dat větví ten top spojují převádí to třeba dekomprimují nebo naopak komprimují nebo mění
vzorkovací frekvenci audia to sou transformačních filtry ty modré tohle zrovna demu X R a
vyčká to je prostě takový element černá krabička do které tečou ty bajty ty binární
data kterým nerozumíme aby teče S toho už zvlášť audio stopa zvlášť video sto a
ale zkomprimovaná tatí nerozumíme tak proto to máme dekodér videa audia lichnov teče ten tam
si ten exist a binární data aby tečou s toho de komprimované frame nevydáváš si
můžeme s a na ty pixely push to můžeme vyrendrována obrazovku nebo bys bychom to
mohli poslat zvukové karty
ale je to jeden problém že to pravděpodobně nebude zrovna té formě jaké bysme to
mohli poslat do toho renderovacího zařízení například to bude ve formátu pixelu Y move a
renderovací zařízení bude jenom dvě B tak je třeba provést nějaký převody dát změnou rozměrů
videa formátu to bych s a nebo převzorkování audia a teprve pak to můžeme poslat
do té zvukové karty nebo vyrenderování někam na obrazovku takže tohle velmi typickým jsou teda
cílové filtry velmi typicky graf filtru pro nějaký triviální přehrávač
tak tady sem zároveň už značnou ty pojmy kontejnerových formát jemu se váže teda ten
demu X který umí parsovat ty data s osou uložené ten kontejneru a poslední na
výstupu šli jednotlivé stopy
jaký se mu říká split R a naopak mu X různý chtít audio stoků dvě
video stopy a zabalit to do kontejneru třeba matroš K nebo aby ten se rád
user
a naopak kodér dekodér kodéru umí je zakódované komprimované video nebo audio a dekodér naopak
dekomprimovat kodér i dekodér dohromady říká se tomu kodek
a takové dva typické to tedy T neboli téčko který to není na tom obrázku
ten nedělá vůbec nic že prostě jenom větví na více tady těch výstupů ten vstupní
datový tok ano pokornej ten víci zvés spojí je překryje nějakým způsobem do jednoho s
tím se můžete setkat všude kde je to postavené na tom grafu filtrů typ nymburk
i
že máme zdrojové transformační a cílové elementy a speciální případ těch transformační je třeba týmu
se R over jej nebo nějaké převody tou sou konkrétní nějaké filtry nějaké elementy
takže pojďme na ten let F M P
tak jako template je hrozně používaným známý profláknutý multimediální kterém word
když existuje když řadu let ale dva a půl roku zpátky se stala taková věci
se tam ty vývojáři nějakým způsobem znesvářených a for krysy to vzniklo projektily a V
fork toho takle mpeg Ú alt té doby se ten takle mpeg při vydal takovou
cestou že jsou tam komentovány zběsile nějaká nová funkcionalita naopak ten líp a ve se
vydal takovou cestou pomalého vývoj stability tady klade důraz co se na stabilitu ale nicméně
to co tady jiří tam mělo být společné pro oba tyhle chirurg i když budu
mluvit o tom jaké ten webů jinak ten efekt M P můžeté znát je na
něm postaven přehrávačem player
ve L C je vevnitř využívá třeba editor aby demu cesty znáte nebo na platformě
windows je ji možné využít pomocí takle kde show T takový balíček který si nainstalujete
a pak ve vašich direct show nebo video for windows aplikací můžete využívat funkcionalitu prvkem
P Q je to multiplatformní frame border a
a teď z čeho se skládá máte tady vypsané nějaké knihovny
nejzajímavější s toho je táhli a V kodek které sou implementace těch kodeků kodérů dekodéru
je tam dekodér M P trojky je tam dekodér tech videa M P Q dva
videa nentek čtyři videa potom se ten umožňuje samozřejmě ten from horní už nějaké externí
knihovny
a další část další knihovna je tady a ve formátem jsou ty museli nemuseli to
znamená je ta část co umí pracovat s kontejnerem já nevím aby matroš K který
vás napadne účinnější třeba dejme tomu
tak to ten že teda ne ale aby matroš K je implementováno tady v tom
vybaven formát danej dvě nejdůležitější části knihovny
a další zajímavé je levá V D Y spíš jsme třeba brát video sto video
for windows nějaké ve kamery budeme potřebovat pracovat s touhle knihovnou tady a ve filtr
tam sou nejrůznější audiovideo filtry já nevím překlopení videa odstranění šumu do střední hran na
co si vzpomenete
a líp ve své scale to je ta změna jako rozlišení a formátů pixelu se
týče videa ve své rysem to je naopak co sedíš audia změna to formátů takže
to jsou takové základní knihovny ještě tu vybavení to jde všechno co se co nepasovalo
někam jinam nějaké logování zprávu šetření chyb a tak dále
že můžete se podívat na tady tu adresu
poďme se podívat na ty nástroje příkazové řádky můžete si to resetu máte nulu normálně
zkoušet D práci s tím
takový základní program je jaké lejte triviální přehrávač který otevře zde looking o a co
mu předáte jako parametr to začne přehrávat velice jednoduché použití tady vidíte jak L jméno
toho videa je to přehrávač triviální postavený na ctíme tak ten takže
potom F proud má naopak za úkol vyplit do koncové tady ty informace o T
M P trojce všechno co to obsahuje sto o tom je schopné zjistit podle těch
parametrů kterým tomu přidáte předáte tak nějak informace vypíše to koncové jater servery jednoduchý já
T P streamovací server ukážu jeho použití a ta nejdůležitější části pro ten vektor konvertor
ono mi převést
nějaké vstupy předáte tomu deset vstupů s touto vezme audio s toho video nějak to
vevnitř kura mixu je a uloží do několika výstupů prostě umí to trans kódovat tady
ty multimediální data
podporované formáty záleží na tom jestli si ten takle mpeg zkompilovaný ale můžete vypsat pomlčka
formát schodek chtěl pro s co to umí dycky tam máte téčko déčko to znamená
jestli to umí N kódovat nebo dekódovat do tady toho formátu můžete si to zkusí
napsat do konzole je to takové základní použití
a všechny ty příkazy
mají takovoudle následující syntaxi někdy mírně odlišnou třeba u toho pole se nedává pomlčka input
protože on nemá žádné výstupy tak všechno je vstup ale funguje to takle
dáte T M P krát teď nějaké globální volby nějaké základní parametry ukážu dál všechno
vysvětlení dál a teď následuje sekvence nějakých voleb to co se týkají vstupu
pak název vstupů třeba pomlčka Í moje video tečka vy tam dáte a ten následuje
další vstup další vstup další vstup a vše k tomu předáte všechny vstupní kontejnery nebo
zařízení ve kamery a tak dál tak zase následují výstupy vtom formátu volby pro výstup
výstupu bodu pro výstup další výstup
dobré si na to pamatovat pro že je potom podstatné kam který kterou volbu dáte
takže pomlčka jí předáte název vstupního souboru
jenom tak když tam napíšete méno nějakého soubor tak bude výstupní pomlčka F T takový
zajímavý parametr je můžete přidat formát toho vstupu výstupu a to buď takže mu dáte
jméno toho kontejnerů a nebo jméno vstupního zařízení třeba pomlčka jako S a méno lomeno
D je co budete zachytávací mikrofonu nebo naopak posílat todle nějaké zvukové karty když tam
dáte pomlčka X video for linux lomeno D V lomeno video nula tak budete číst
data z glib kamery
a nebo tomu dáte pomlčka F aby a budete očekávané no aby souboru jako vstup
že teda K základní syntaxe všech pak těch
nás true příkazu příkazové řádky
a teď
je důležité znát několik takových parametru co se opakují napříč a můžete dát jako parametr
vstupu výstupu audia videa prostě na chcete napříč všemi tady země volbami co vstup pro
výstup
pomlčka B určujete datový tok jako bitrate to jednoduché pomačkat se určujete kodek
to vstupu výstup
pomlčka S skočí na pozici a pomačkáte určuje jak dlouhou část toho audia videa bude
ten jako ten tak zpracovávat třeba chcete jenom dvou mi to minutové video svědka miriam
výztuž nechcete můžete tam zadat sekundy youngův takovémhle formátu ten čas
takže tohle je dobré mít na paměti přes za celou
před všechny ty parametry a teď poďme si to upřesním když pracujete zbyde tak můžete
to video vypnout vybrat kodek videa vybrat betray videa můžete použít nějakou snímkovou frekvenci rozměry
videa ve formátu jejich krát Y můžete tady napsat že na to se dá aplikovat
nějaký řetězec filtrů větvit to a tak dál si ještě ukážeme pro samé platí u
audia jiná audio sedej aplikoval nějaké nechat ty filtry takže to jsou pak do speciální
ty volby ušil podle toho jestli pracujete zbyde nebo sandy je
a teď je nejdůležitější asi parametry tady u tohoto sem se hodně často setkal s
tím že lidi si myslí že compact něco neumí že neumí skočit na nějakou pozici
auto přítomní jenom oni nevědí tam to dát jestli jako parametr vstupů nebo jako parametr
výstup
takže když trans koledujete
řekněme nějaký vstupní na nějaký výstup tak můžete vtom vstupů skočit zhruba na nějakou pozici
a to funguje tak že to pomlčka je ze znáte jako parametr vstupu tomu F
M P Q to říká
skoč je na ňákou dobrou pozici před tady tím časem a případně videa on pojede
po klíčových snímcích po king režimech a zastaví ste na něj pozdějším klíčovém snímku ještě
před tím časem takže ono to neskočí na tu pozici tří minut ale skočí to
někam přední
ale je to rychlé pro že to skáče nebo klíčových snímcích
nebo to můžete dát jako parametr výstupu znamená celý ten vstup se valí do té
pipeliny úměře tak pinů dekóduje se jeden snímek po druhém a až se najde přesně
čas který odpovídá přeměnu tam takto začne valid do výstupu ale je to pomalé přesné
a pomalé a nebo to můžete zkombinovat
koči rychle na někam před dvěma minutama třiceti sekunda má to pojede po klíčových snímcích
skočí na tu pozici a pak ty dalších třicet sekund už budete skutečným dekódovat snímek
po snímku ale zato to začne generovat ten výstup přesně a přitom to bude je
celkem rychle pro že ty dvě minuty tři ste se const přeskočili v rychlosti
takže takhle sou tam skoky na nějakou pozici tady je ukázka toho příkazu proud prostě
tomu předáte jako parametr to vaše a víčko ano to vypíše trvání informace o video
stopách audio stopa rozlišení můžete si zobrazím informace o jednotlivých režimech to znamená je díra
audio i video tohle je příkládek jako nějakého to ono to vyplivlo mnohem víc já
jsem tady od mazal všechno nechal tady jenom jádro tohle příklad co vy informace o
nějakém frameů s toho videa koka vy někde uprostřed k a že to tady nějaký
formát pixelů palo osum nějakou výšku šířku takovéto vypsal takže tak asi rychlost příkazové řádky
zjistíte informace o vašem video u
tak přehrávání videa jednoduše F play kulkami nebo zašel do přehrávat prvního kterému jo tady
to kdo začíná jedničkou N nulou takže to je jednička je ten je počáteční trému
nebo skočim na pozici šest sekund to trvá dycky ten frame jednu sekundu a vidíte
že to začalo cen vičky tady v tomhle případě je to každý je z nich
klíčový takže tady nemusíte nějak krát
že ten graf filtrů letectvem peklo ne není postavený takže byste si v něm libovolně
jakýkoli výraz filtrů udělali ale umožňuje na ty jednotlivé větve audia videa ty grafy filtrů
aplikovat takže když máme ten klok aby a chceme vertikálně překlopit dozvídal
vertikálně takhle
a napíšete pomlčka víte filtr videa ve chtěli a to video zobrazí se tohle
vy můžeté přidat parametry těm filtrům třeba krovy nějakých filtr co provádí výřez tady tomu
ztěží tam udělej mě výřez dvě stě padesát šest krát dvě stě padesát šest pixelů
odpor sice nula krát nula pixelů ty parametry najdete samozřejmě dokumentaci a zobrazí se tohle
takový výřezy jenom
můžete řetězit ty jednotlivé elementy ty jednotlivé filtry tady proveďte transponuje to video pak ho
negují
vidíte to výstup tohoto je vstupem tohoto filtru a na výstupu se zobrazí tohleto to
sou takové základy teď můžete také větvit a zpátky spojovat ten byla graf filtrů tady
už je takový složitější případ
protože k tomu abyste ho se správně napojili tak si musíte některé ty přípojné body
to znamená tady tyhle body
pojmenovat
a to se dělá takhle
z jméno toho filtru se uvádí do hranatých závorek ty názvy výstupních připojení bodů a
přes jméno toho filtru se uvázání do hranatých závorek názvy těch vstupních naopak
takže když se podíváte na tento příklad tak máme tady jeden řetězec
střední a středník odděluje větve a druhý řetězec to znamená máme dvě větve ty jsou
tady a
jak to funguje
uděláme
filtr split pojmenujeme jeho první výstup druhý zůstane pojmenovaný
teď je ten tak veděl automaticky propojuje to znamená první nepojmenovaný výstup na první nepojmenovaných
vstup takže ten nepojmenovaný dál na tony gate stejně to sem udělal u toho overlay
je a spojová se mně tady ta spodní větev takhle a teď vezmu ty dva
pojmenované tady a mezi ně vsunul ten filtr krok
a říkám že se jenom tu spodní polovinu vyříznout a tady k tomu v roli
říkám šturcu dát právě octet poloviny
a vznikne mi na výstupu tohle to znamená celou tu negaci jsem ve spodní půlce
jako že před vás nultou ořezanou půlkou a je to posunuté to znamená pasuje to
přesně a to místo kde to má být
takže to je taková se takový složitější graf filtru
tak těch jejich celá řada můžete například jenom posíláte klíčové snímky a to použijete filtr
select
řeknete typ snímku je i snímek tak ho pošle dál můžete na to aplikovat detektor
hran normální neuvidíte to video vidíte černobílé hrany mají strašně moc tady vidíte nějakou negaci
horizontální překlopení odstranění o tady jo rozmazání zostření hrozně moc těch filtrů je tam podle
to jestli to zkompilujte čím vším sto zkontrolujete tady k tomu máte dokumentaci takže můžete
si s tím dá aplikovat nějaké rakety na to video
teď ukázky jaksi převedete na příkazové řádce video napíšete jako temp pomlčka výstupní video a
teď kodek videa je třeba tady ten bezeztrátový F R T jedna kodek audia je
tohleto a kam uložit výstup a je to překóduje se to můžete určit betray že
šedesát čtyři kilobitů za sekundu u videa a bude to mít takový bitrate tavidel
můžete vybrat kodér kodeků videa H dvě stě šedesát čtverka jako formát nenávisti šedesát čtyři
kodek je tolik X dvě stě šedesát čtyři a nějaké přednastaveného obytná fast rychle kódování
tady je to funguje tak že ten prvek obsahuje pouze dekodér to formátu hlavičce set
šedesát čtyři a na ten na ten kódovaný symbol to knihovnu líp X dvě stě
šedesát čtyři a vlastně ty další parametry příslušný té knihovně zaznamená reset vás bude předána
tech jo měli byly X dvě stě šedesát čtyři takže tu dokumentaci získáte když napíšete
do konzole X dvě stě šedesát čtyři pomačkané a uvidíte co tomu všechno můžete předat
takže taky to není komentuje všechno taky to vy může využívat nějaké externí knihovny pro
ty kodeky typicky třeba šedé D R pro ten formát dear a tak dál
jaksi zobrazit co máte tady ve kameru na notebooku jaksi sto zobrazit to vaše video
zadáte pomlčka pech tady zadáte název toho vstupního zařízení a jako ten parametr
jako input vstupní soubor zadáte lomeno D ta vaše ve kamera
a teď jak si to zaznamenáte kamery a ty se zvukem tak po zařízení vstupním
bude S
tady můžete letech unpack takže tady předávám to pomlčka jímku lomeno D R lomeno D
S zvukovka
teďka si dám to samé ten obraz dat kamery a uložím to do nějakého kontejneru
output na to byl to automaticky detekuje co to tam a udělal co ty
podle přípony detekuje co je to za ty kontejneru když tam dáte teďka vy zjistí
že to má použít muset travičko a taktéž to automaticky navrhne dyž to by sme
specifikujete nějaký kodek audia videa co se jako že použije
teď ukázka jednoduchého streamování po síti přes Ú D F téčko
takže otevřu si vstupní soubor file K D jako kodeků videa vyberu aha dvě stě
šedesát čtverku té nějaký rádia se taky to bude kódovat
asi tou jsme si šedesát štyrkou když nevím a vyberu si že to chce do
kontejneru tak transport stream a jako název ve výstupu nám bude C dvojtečka jo není
tam ten soubor ale je tam název toho sítového protokolu to Ú D P a
teď push nějaké ty parametry jo lokálností nějaký pod raz dva tři čtyři a začne
to běžet na tom portu otevře stop odvysílána portu a teď já napíšu B C
nebo nějaký váš oblíbený přehrávač co používáte třeba pole nebo cokoli jiného a teď tu
adresu toho streamu a zpátky do chytám přesto Ú D P velice rychle během jediného
příkazu sem začalo stimulovat přes síť přes Ú D P a zvolil jsem si do
toho kdo či lotosu kódovat nezklamat osu brát
teď na takové složitější když mám několik těch vstupních toků dat které chcu streamovací dát
dohromady a stimulovat je na několik výstupů v několika formáty na různých adresách taky k
tomu slouží jako server
tomu je třeba jeho použití vytvořit si nějaký konfigurační soubory kde je zadán jednak na
kterém portu na které adrese má naslouchat a ty tam se nám adresy všech těch
stupních toku co do něho tečou a naopak všech těch streamů které má poskytovat obojího
tam může být několik nějaké ty parametry
spustíme ten server potom co ever server běží spustíme ve tempem zase tomu přidám nějaké
parametry a řeknu to může výstupem má být H T L tady tohleto souš je
jeden s těch vstupů vtom jaké serveru on se propojí s tím server a hotovo
dodává tomu eclipse rodu vstup krevního tím super takle můžu spustí několik těch jako ten
pojmů a teď naopak v nějakém vašem oblíbeném přehrávači budete chtět jeden s těch streamu
chytat tak napíšete délce nebo co používáte a zadáte tam tuhle adresu za má tam
kde naslouchá ten server na tom portu a adresu sto jedno s těch streamů co
poskytuje a vidíte video přes T P
takže to je takové složitější použití streamování
jestli ten si jako hráli s těmi nástroji jednoduchými příkazové řádky tak poďme se podívat
jak se vlastně ten chcete mpeg použije když ho chcete začlenit do svojí aplikace
takže první nestáhnou zvrátí nakonfigurovat přeloží na nebo to máte vaší distribuci už jako balíček
a
pro zjištění těch parametrů se máte předávat překladači na systémech to unixového typu můžete použít
pokud o konflikt
asi jasné na tom není co vysvětlovat a jak jsem na začátku řekl ten testem
to je jenom balíček nějaký knihoven a vy musíte uvažovat kterou tu knihovnu potřebujete sice
T je využít kodeky videa a nebo chcete zrušit třeba max erbem X v nějakém
kontejneru vám formátu a tak dále tak podle toho si prostě tři linkuje ten a
konec té vaší aplikaci nějaké ty knihovny přikládáte to normálně tam kde to máte nainstalované
jo tady jsem nepoužil ten pokud o konflikt a kterou tu knihovnu použít těch vašich
laviček těch vašich rastrových soubory studujete hlavičkové soubory které taktéž odpovídají těm násobíte
knihoven znamená mohl bych tam napsal if a ve kodek a tady je no a
ve kodek kdybych měl zájem třeba o ty kodér i dekodér videa
a není to připravené na C plus takže pokud používáte C plus tak obalit tu
inkluzi tady těchto souboru do toho externí C aby se vám to pak slinkováno takže
C plus poznají ty identifikátory ty symboly nějakou dekoraci
ale to je v céčku napsané tenhleten tady tak pozor na to
a když teda ste tohle udělali na includován je správně to budete linkovat tak na
začátku to programu vašeho zavoláte a ve registroval to zaregistruje všechny dostupné kodeky museli nemuseli
všechno co ten frame border do zkompilován co poskytuje ad hoc tohoto místa můžete směla
nula používat tady ty funkce s toho si vaši knihoven v tomhle případě zde dále
forma jenom
tak jak vypadá takový začátek takový jednoduchý příklad includu je pesi v tomhle případě to
byl kodeky a ty kontejnerové formáty vyplave kodek byly v formát zaregistruje té všechno a
už můžete volat funkce to znamená já si otevřu nějaký vstupní soubor který byl předán
jako první parametr u todleto tomu mému programu
a ošetřím jestli se to podařilo
najdu nějaké informace to není podstatné a push si šahám na ten první tok to
znamená to mohlo být audiovideo stopa jo tady si všimněte ani ne ošetřuju jestli tam
existuje by správně měl ošetřit je to jenom takový příklad jak to vypadá to programování
tome M P Q je to volání strašné spoustě k unk si ošetřování toho jestli
ty funkce ne zcela tady prostě takové hodně nízkoúrovňové programování jako strašně moc řádků kódu
napíšete proto abyste sto dostali jediný krém videa nebo byste měli ten přehrávač
a můžete tomu taky pak udělat hodně těch i ale zas na druhou stranu nás
to nechá šamana všechny ty interní informace jo máte rodinnému ty beránkem word já nevím
von on tam napíšete přehrávač videa na tři řádky ale zase se nedostanete k tolika
těmi inter mostem takže tady je to takový nízkoúrovňových frame or
takže T otevření video stopy
tohleto jako příklad pro že tady jestli vestou ve se je to je koupit té
stopě video když jo tak s tím dalo pracoviště tak skončí
tak teď když si budu chtěli napsat takový jednoduchý přehrávač tak co musím udělat na
začátku musím potom co otevřu ten kontejner inicializovat nějaký ten dekodér
vyjde to znamená ten kodexy alokuje nějaké informace nějaké interní datové struktury podle informací co
že to má dekódovat jak veliké to je video a tak dál
a potom tomu u
dekodéru přidávám jednotlivé pakety které jsem obdržel sto bodem dceru a nic těchle binárních informací
dekóduje dekomprimuje ty snímky já obdržíme komprimovaný snímek strážců ho třeba z obrazu na obrazovce
a požádám o další a tak ale furt hážou tomu pakety amber úvod toho dekodéru
snímky a na konci požádám aby uvolnil všechno co měl alokované týká se to jenom
té video stopy tady tohle všechno ta přednáška je zaměřena na to vydal
teď když sem obdržel oni ho honil ten dekódovaný snímek tak můžu zobrazíte na obrazovku
nebo se mně můžu nějaké rabat zpracovaného
k tomu potřebuju vědět jak je formátu to mi řekne ten from word
takové základní formát je třeba R G V dvacet čtyři vy máte prokládaně na jednom
bajtu normálně R G P za sebou složku a pixely jsou takové za sebou za
každým řádkem nějaká výplní a pak následuje další řádek a je to paměť uložené odporu
návrh jo
pozor na tom obrácenou orientaci první je poslední řádek to je velice typické uložení snímku
sto dekodéru to pravděpodobně ale dostanete v nějakém Y move něco záleží co to je
můžete tam je podvzorkované ty barvonosné složky
taky typické pro všechny ty tady říká se tomu framebufferu nebo jeden že máte takle
uloženy tak takhle vypadá prostě ten dekomprimovaný snímek move
a teď jak vypadá to jádro ta smyčka to přehrávače budu potřebovat nějaký jeden paket
načtu s kontejneru jeden paket jestli eště nevíme si to příslušel P moji video vstup
jestli to příslušel nějaké jiné audio stopě nebo nějakým informacím
takže porovnám
jestli ten paket
patří do video stopě když ano
požádám push inicializovaný dekodér o dekompresi jednoho paketu do té formy tohoto deko dekomprimovaného snímku
a o D když je set samozřejmě nepovede teda port
ale když se to povede tak to neznamená že jo mně ten snímek dál prože
různé ty kompresní formáty obsahují nejenom klíčové snímky ale ní nějaké s jiné typy snímků
a on může ten dekodér požírá ty snímky desítky snímků před tím než ně vůbec
na výstup vy produkuje jeden dekomprimovaných takže já musím zjišťovali si právě vtom ale kroku
zrovna mě vyprodukoval ten dekodér nějaký dekomprimovaný snímek když ano tak si změním jeho formát
jeho velikost podle toho co s tím co dělat a třeba ho znovu uložím do
jiného kontejneru anebo ho pásku na obrazovku šestý může dělat co chcu
a takhle dál ta jádro té ta smyčka hlavní to přehrávače takže takle vypadá jednoduchý
přehráváš toho
videa
a když si naopak budu psát aplikaci která využívá ten frymburk zespodu budu dolního chtět
zasunout nějaký zásobený modul třeba nějaký filtr videa nebo kodek tak to bude vypadat trošku
jinak budu využívat jiné části to rozhraní tohle je zrovna příklad kostry nějakého video dekodéru
tedy nějaké část nějakého kodeku
takže základem je vyplnění ňáké struktury a V kodek vyplním identifikátor kodeku řek můžete kodeků
videa nějaké jeho názvy a vkládám tady prostě ukazatele na nějaké funkce co má za
úkol inicializovat ten dekodér D inicializovat a co má za úkol dekomprimovat ten jeden snímek
a tak funkce je někde v tom samém modulu jak to překládám obdrží jako parametr
ukazatel na ten zkomprimovaných stoupá a ukazatel kam a uložit ten dekomprimovaný snímek tom nějakém
našem formátu
a provede nějaký ten svůj dekompresní algoritmus uloží to skončí a nelze komprimovaný snímek
bohužel ten jaké ten tak není nijak modulární když co přidat ten můj kodek do
něho musím tady ten modul tam správně přidat musím následně upravit
některé části toho lipami kodeku a tím líp a ve formátu pro že při potřebu
přidat mapování z nějakého for C kódů řekněme dobového jedna na tady ten náš kodek
double dva jedna takže budu muset upravit zdrojové kódy jelita B kodek vybaven formát a
všechno to znovu přeložit nainstalovat do systému jo není to takové jednoduché do to přidávat
i zásuvné moduly
takže tady vidíte nějaký přehled nějakých do funkcí s toho nejpodstatnější je prostě dekódují mi
jeden video frame zakódují mi jeden video from tohle s nějakého paketu udělá dekomprimovaný snímek
a tohle já přesně to opačné
je to nějaké otevření toho vstupního kontejneru podle identifikátorů kodeku to najde vodní kodér dekodér
nějaké pomocné funkce nějaké čtení jednoho paketu
což bude odpovídat případě video stop jednomu snímku zkomprimovanému ve takle pak funkcí se musíte
naučit pak si to přičtete dokumentaci do přesné použití
A zdroje s který jsem vyčerpal jsou tady tyhle
a
teď by měla smývat ještě druhá část máte k tomu nějaké dotazy k tomu R
T M P Q
ano
nějákej asi tenis mistně si to neznamenalo to lásko robert to se dyžtak podívejte na
ty ze stránky jo otázka byla co to znamená F M P kdo by chtěl
zopakoval máte eště dotaz nějaký
nevím okradl výstřel to střel to pochází
tady ten název mám dojem že to původně do to vás forvard tech
proč to pojmenoval takle dyž to umí mnoho těch formátu pracovat těžko říct no
já bych teda v rychlosti proletěl eště tu druhou část té
přednášky a to je G stream R
takový kterém word
tedy opravdu push obsahuje ten graf filtru k sobě a kterém si tu funkcionalitu ty
krabičky o propojuje té jakkoli potřebujete jo ten efektem takto ste museli pomocí nějakých funkcí
přesně definované
rostě pořadí používat když to tady temží stream R umožňuje vám poskládat si funkcionalitu co
dělá tady ve otvíráme kameru a takhle s těch krabiček s těch elementů propojit to
přesně libovolně podle vašich potře
tak
tady tohle bych přeskočil a teď
případně číst trimrů se tady tyhle filtry nazývají elementy jeho ty přípojné body si nazývají
tady
a pečou mezíny nějaký data ty data mohou být jako
posílá na tom té pipeline je v tom grafu filtrů dvěma takovými modely model můžete
znamená že zdrojových kill která neustále produkuje T data a tlačí je do té pipeliny
a ty dán následující tatry prostě přímej znáte spra pasivně to zpracovávají transformují naopak model
půl je že typicky to dělá nějaký ten parseru ten mixer aktivně požaduje od zdroje
dat ty data a zdroj sám o sobě nic neprodukuje jenom na požadavek pod ty
data putují pak dal té pipeliny to znamená aby se ty data ty pipe ani
pohybovali aby toto tou pipeline utekli tak tam musí být použit jeden s těch dvou
modelů bodě zdroj tlačítky data a nebo parseru tahá ty data ten zbytek filtru už
normálně příde k ústupu vyprodukuje plus výstupu tam není problém
ty data mezi těmi elementy mezi těmi krabičkami se předávají tak zvaný makrech ale té
prostě pole bajtů kterém je třeba komprimovaný s nimi nebo dekomprimovaný snímaným pokus audia a
tak dále ale říká se tomu že se předávají bufferech
a každý s těch elementů může být v jednom z několika stavu buď zastaven znamená
nic nedělá pipelinu ne tečou žádná data nebo pozastaven pipeliny jsou data ale elementy zase
nic nedělají anebo spuštěn a data tečou a přehrává s
smyslem toho stavu pozastavený je naplnit tu pipeline daty aby následné spuštění bylo okamžité to
znamená když si za pauzu je ten bod kdy startujete přehrávání tak nechcete čekat třeba
půl sekundy mash po stisku tlačítka play to začne hrát tak proto je ta pipeline
a udržována potom pozastaveném stavu po tady tu dobu
tak teď je ten G stream netypický spíše pro gnome prože postavena digilib je odpovídá
tloukl jak napovídá po unk názvu a je hodně podobný které morku direkt show který
taktéž umožňuje libovolně si postavit ten váš graf filtrů
a tady sou vyjmenovány nějaké ty nástroje které ty v rychlosti proberu a nějaká ta
terminologie co nás pole jsou tedy zdrojový sync do kterého tečou naprosto zdrojového type byly
these to sou nějaká omezení protože ne jak a každá krabička ne každý element do
něho můžete prát jakékoli data tak má na tom vstupním pevnou nějaké omezení a jenom
když se rozhodne ten výstupy ten soubor spec ten výstupní ten vlastně toho prvního elementu
na typu dat s tím do kterého ty data tečou s tím vstupním toho druhého
elementu tak teprve se to propojí tady ty dva elementy takže k tomu jsou tam
ty K to byly these
a jinak několik elementu může být sdruženo do nějakého koše tomu se říká B na
celá pipeline tak je speciálním případem koše a co je zajímavé že tady ty balíčky
všech těch ladinou všech těch elementů ty elementy jsou obsaženy pluginech jsou od vývojářů rozdělený
do takového takových třech
skupin podle to ve filmu hodný zlý a ošklivý
tomu balíčků kladinou boot tam jsou stabilní provádění z dobrou licenci
to má který jsou stabilní se špatnou kde sou nějaké licenční problémy a vtom bad
sou nějaké pluginy které nejsou tak dobře otestované řekněme nestabilní
tak ten takové zajímavé ty vývojáři to rozdělili
tak teďka ta terminologie tou jsem vlastně řekl ještě typy nebyly these ty typy dat
jsou identifikovány mají typy třeba zakódované kodekem tvorby si je takhle dekódované pak co zvukovou
kartu sou přímo flouty jsou označeny takhle
takže je třeba aby se shodli ty propojované elementy
takle vypadá nějaká jednoduchá pipeline a kde se si otevřou nějaký kontejner vůči G vydáno
z něho video audio a video a pošlou to do zvukovky
a na obrazovku
sestavení té pipeliny na příkazové řádce spolu slouží ten nástroj to se to
a normálně případě toho jako ten dobu tady specifikujete pomocí nějaké syntaxe tu pipelinu propojuje
té ty elementy pojmenovávat ty vstupní výstupní body a C dobré u toho čísly může
si můžete napsat vlastní platim třeba kodek nebo filtr zkompilovat ho umístit silně kam nohou
a nastavíte nějakou proměnnou a tady všechno s toho čísly muru i ten konzolový nástroj
pak může použít normálně hledá tam ten váš hladin
takže takovéto umožňují obyčejnému uživateli tam něco přidat
S T inspect slouží šíření informací jednak o planiny
a jednak o elementech těch pluginech obsažený to znamená tady to vypli je že tam
jsou vtom ale planinu a lze dva elementy a za signál se soustředí ramen takle
a dyž jestli nám pan informace přímo v nějakém element oni to řekne informace o
těch se sou rozpadech si vede a nějaké ty parametry co přijímají
a co produkují nebo naopak
tak jednoduché příklady spojení dvou elementů
S video se dat se pošlu to do okýnka na obrazovce zřetězí se ty filtry
takovým vykřičníkem prože nemohli použít svislý jako pipe u
na příkazové řádce nebo zářením filtr
překlad video horizontální vertikálně push tomu předávat parametry pro
přehrávač jaksi postavit přehrávač
normálně použiju bůčku šplhají by na už tomu šeda moc to sestaví sám to pipeline
nic
a nebo použiju zdroj dát použiju nějaký koš ve kterém se sestaví dekodér a už
jenom napojím na výstupu konvertor brno prostoru a pošlu to no já to okýnka na
obrazovce
a nebo si to postavení celé sám zdroj dát demu X hlavička dekodér video stopy
konvertor barevného prostoru a teprve pošlu na obrazovku tady to poslední vidíte na kolika N
vtom editoru deset editor
tady je eště no ukázat deset editor a co je dobrá věc můžete si tu
pipelinu se rizik serializovat dobrých sem velká a pak du ve vaší aplikaci načíst příště
takhle
že tady je nějaký příklad jak to udělat
tak a teď zase jak tu vaší aplikaci je to stejné jako případě toho lépe
tam venku na začátku zavoláte nějakej byl se to init a pak voláte jenom funkce
storočí streamerů
tady je taková kostra máte netriviální aplikace
že ho inicializuju a vše touž to můžu spustit
tady je nějaká kostra jater sestavit jednoduchou pipelinu vytvořím pipelinu vytvoříme zdroj dát zdroj by
dodat vytvořím okýnko a propojím je zdroj dat z okýnkem
u s tímto a probíhá přehrávání nakonec to dej mi celý jsou a hotovo
tak tady tohle ty slajdy budou asi k dispozici dete stažení takže já už nebudu
probírat tady ty další příklady tady máte jak si napsat zásobený modul třeba tady máte
jako vytvořit smyčku ste zprávu kdo dělal pohybu tak to asi z na
a tady máte nějaký přehled to by a
nějaké zdroje s tady jsem čerpal doporučuju přečíst tyhle větší ručky jedna které pěknější nebo
na nula a jedna tu příručku pro psaní planinu ta velice pomůže pochopit intern dosti
toho jak to je skutečně polem implementované nic
takže máte nějaké dotazy teď k tomu číst primeru
bez dotazů
tak
ode mě krát všechno děkuju za pozornost