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