Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Streaming videa - 1. Vizme vebové video
Streaming
30. srpna 2010, 00.00 | Trojdílný seriál nabídne bližší pohled na možnosti streamingu videa. Podíváme se na formáty, kodeky, kontejnery a způsob streamování.
Omlouvám se za nesmyslné "v" namísto "w" v nadpisu článku, ale jaksi se mi zachtělo zkusit zlehka zaaliterovat. Tímto článkem otvíráme pohled na možnosti "streamingu", tedy prezentace videa na serveru tak, abychom se na ně mohli dívat z klientského počítače. Přitom se spíše soustředíme na samotné video, tedy na jeho formát a na způsob jeho streamovaní, nežli na vlastní prezentaci ve webových stránkách – podrobný rozbor tagů <video> a podobně si necháme na jindy.
Základní princip
Nejjednodušší způsob prezentace videa prostřednictvím webových stránek je samozřejmě praobyčejné sdílení souborů: datový soubor, obsahující video, uložíme do vhodné oblasti spravované serverem HTTP, a ve stránkách pak použijeme zcela standardní odkaz typu <A HREF...>. Výhodou tohoto přístupu je jednoduchost; nevýhodou ... prakticky vše ostatní. Především jde o to, že uživatel si takový film musí nejprve kompletně celý stáhnout na svůj lokální disk a teprve pak si jej může přehrát. Ačkoli, jak uvidíme níže, díky vymoženostem QuickTime to není zcela absolutní pravda.
Zde právě přichází ke slovu streaming: jeho základem je to, že video se na straně klienta nikam neukládá, ale přehrává se průběžně tak, jak je server poskytuje – jako stálý proud dat, odtud právě "streaming". Právě jeho možnostmi se budeme zabývat podrobněji, samozřejmě se speciálním zaměřením na to, co – a jak – standardně podporují operační systémy Mac OS X a iOS.
Kodek a kontejner
Dříve, než se ale pustíme do konkrétních variant streamingu, ujasníme si pojmy "kodek" a "kontejner"; oba jsou naprosto zásadní pro jakoukoli práci s videem.
Víme, že video je vždy reprezentováno jako řada statických snímků; ty se mění natolik rychle, že lidské oko je vnímá jako plynulý děj (televizní technologie to vzhledem k některým specifickým vlastnostem obrazovky poněkud zkomplikovala tzv. prokládáním; tím se zde ale nepotřebujeme zabývat – na platnost všeho, co si budeme nadále uvádět, to nemá žádný vliv, a zmiňujeme se o tom tedy jen zcela okrajově a pro úplnost). V principu by tedy bylo možné video reprezentovat jako sekvenci obrázků – na počítači tedy třeba jako složku, obsahující postupně jednotlivé snímky jako 1.tiff, 2.tiff, 3.tiff...
Ačkoli v některých velmi specifických situacích se tak skutečně děje, v praxi by to téměř kdykoli bylo neúnosné kvůli potřebné diskové i přenosové kapacitě: má-li běžný snímek v kvalitě, zhruba odpovídající standardnímu televisnímu obrazu, rozlišení 720 x 576 obrazových bodů, zabral by při ukládání v barevném prostoru RGB s osmibitovými barvami něco málo přes megabyte. Při snímkové frekvenci 25 fps ("frame per second", tedy snímků za sekundu) by to znamenalo, že pouhá minuta videa zabere na disku bezmála dva gigabyty. Navíc datový tok, potřebný pro předávání těchto dat s rychlostí dostatečnou pro plynulé přehrávání, je cca 240 mbps (megabitů za sekundu): řádově více, než kolik lze očekávat od téměř libovolného internetového připojení – a to jsme počítali s pouhým videem, bez zvukového doprovodu.
Kodeky
Je tedy zřejmé, že video je nutné nějak komprimovat; a zde právě nastupují kodeky. Kodek je v podstatě způsob komprimace videa; slovo samo vzniklo spojením termínů "kodér" a "dekodér". Kodeků za léta, kdy se pracuje s videem v digitální podobě, vzniklo ukrutně mnoho; v současnosti se naštěstí situace velmi zásadně zjednodušila a za podstatné lze považovat pouze dva (s třetím pro blízkou budoucnost):
- kodek H.264 je patrně nejběžnějším současným standardem pro video na počítači. Můžeme se s ním setkat také pod alternativními názvy "AVC" či přesněji "MPEG-4 AVC" (pro "Advanced Video Coding"), nebo "MPEG-4 part 10". Vzhledem k tomu, že pokrývá nesmírně široký záběr aplikací od nejvyšší kvality videa ve vysokém rozlišení až po co nejnižší datový tok při připojení mobilního telefonu na špatnou linku, rozlišuje se v rámci H.264 řada různých variant – dalo by se říci "podkodeků" – jimž se říká "profily". H.264 je velmi efektivní (tj. dobře komprimuje), existuje spousta zařízení, jež mu rozumějí (skoro každý druhý čip, který pracuje s videem, dnes mj. podporuje dekompresi H.264 pro rychlé přehrávání), a i v software se s ním setkáme všude – mj. třeba i v Adobe Flash; v Mac OS X i iOS je podporován nativně. V tomto miniseriálku se budeme tedy zabývat převážně jím;
- kodek Theora je podle většiny testů poněkud méně efektivní než H.264; na rozdíl od něj však není vázán licencemi a je zdarma (naproti tomu H.264 zdarma nemáme – potřebné licence jsme si zaplatili v ceně operačního systému, resp. u iOS celého zařízení). Prosazuje se proto ve světě Linuxu a je podporován např. prohlížečem Firefox na libovolné platformě;
- kodek VP8 by mohl být velmi zajímavý v budoucnosti; zatím ale nestojí za víc než za tuto krátkou zmínku.
Je vhodné ještě poznamenat, že všechny moderní běžně užívané kodeky videa – speciálně také všechny výše zmíněné – jsou ztrátové: to znamená, že video, které "vyleze" z dekodéru, je poněkud odlišné od toho, na které jsme pustili kodér. Zatímco u obecných dat by něco podobného bylo neakceptovatelné, u videa to nevadí; kodéry totiž jsou promyšleně sestaveny tak, aby ke ztrátám docházelo převážně (ideálně pouze) tam, kde to stejně není vidět. Výhodou, již za to dostaneme, pak je mnohem efektivnější komprese, než jaká by byla možná, kdybychom požadovali bezztrátovost.
Kontejnery
Video, zkomprimované nějakým vhodným kodekem – třeba H.264 – by mohlo být přímo uloženo do datového souboru nebo posíláno prostřednictvím sítě (např. přes socket). Bylo by to ale velmi nepraktické: spolu s videem je totiž zapotřebí předávat i řadu dalších informací – především samozřejmě zvukovou stopu. I na toto ovšem existují standardní formáty; těm se říká kontejnery, protože v sobě obsahují vše potřebné (včetně videa, zkomprimovaného některým z kodeků).
Jak uvidíme níže, z hlediska streamingu v Mac OS X a iOS se v podstatě můžeme soustředit na jediný kontejner, QuickTime; neuškodí ale pro úplnost a lepší přehled vyjmenovat alespoň několik těch nejběžnějších kontejnerů, s nimiž se v současnosti setkáváme:
- kontejner QuickTime je proprietárním formátem Apple; existuje ovšem standardní kontejner "MPEG4", který se od kontejneru QuickTime takřka neliší (přesněji, zdaleka nepodporuje vše, co umí QuickTime, ale z hlediska videa to není podstatné);
- Flash je proprietární kontejner firmy Adobe;
- AVI je starý, pramizerně navržený, ale dodnes velmi rozšířený kontejner firmy Microsoft;
- Ogg je otevřený kontejner, užívaný obvykle pro video v kodeku Theora;
- Matroshka je otevřený kontejner, užívaný často pro video ve vysoké kvalitě tam, kde z nějakých (obvykle licenčních) důvodů není vhodný formát MPEG4; existuje jeho novější verse "WebM", jež by měla být běžným kontejnerem budoucnosti pro kodek VM8.
A co audio
Pro zvukový doprovod platí zhruba totéž, co pro video: ačkoli objem dat a datový tok zvuku není tak extrémní jako u videa, je pořád značný, zvláště jde-li o zvuk vícekanálový (a to se dnes u videa považuje takřka za samozřejmost). Proto se opět používají různé – typicky ztrátové – kodeky; mezi nejběžnější patří:
- kodek MPEG-1 audio layer 3– řekneme-li, že je běžné jej zkráceně nazývat "MP3", není asi co dodat;
- kodek AAC ("Advanced Audio Coding"), který je paralelou H.264 – nabízí lepší kompresi, není ovšem zadarmo, a je standardně podporován a prosazován firmou Apple;
- kodek Vorbis, který je paralelou kodeku Theora – je zadarmo a prosazuje se ve světě Linuxu.
Zvukový doprovod, komprimovaný pomocí některého z kodeků, je spolu s videem uložen do kontejneru. Ačkoli obecně kterýkoli kontejner může obsahovat video i audio v libovolném kodeku, existují typické kombinace: v kontejneru QuickTime/MPEG4 to obvykle bývá spolu s videem H.264 audio AAC; v kodeku Ogg to bývá Vorbis (tak často, že se tento kodek někdy – nesprávně, ale poměrně často – nazývá "Ogg Vorbis") spolu s videem ve formátu Theora. Kontejner WebM by měl typicky obsahovat VM8 a Vorbis.
Nejjednodušší streaming
Nejjednodušší způsob, jak prezentovat na Webu video, které si bude klient moci pustit dříve, než se načte celý (potenciálně velmi dlouhý) soubor, je ... praobyčejné sdílení souborů: datový soubor, obsahující video, uložíme do vhodné oblasti spravované serverem HTTP, a ve stránkách pak použijeme zcela standardní odkaz typu <A HREF...>.
"Moment ale," křičí jistě pozorný čtenář, "vždyť před chvilkou jsme si právě řekli, že to tak nefunguje!"
Inu, obecně ne. Za určitých specifických podmínek ale ano. Ty podmínky jsou velmi jednoduché:
- video je uloženo v kontejneru QuickTime (v podstatě s libovolným kodekem);
- při jeho ukládání byl použit přepínač "Fast Start";
- pro jeho načtení se použije software, který tuto službu – tzv. "Progressive Download" – podporuje (což je přehrávač QuickTime, ať již samostatný, nebo plugin v Safari).
Přepínač "Fast Start" zajistí, že údaje, potřebné pro přehrávání videa, jsou v souboru uloženy hned na začátku, a také to, že video i zvukové složka jsou uloženy tak, aby doprovodný zvuk pro určitou videosekvenci od ní nebyl v souboru příliš daleko (říkáme tomu prokládané – "interleaved" – video a audio, protože to znamená, že v souboru musí postupně být uložen vždy "kus" videa, pak "kus" audia a tak pořád dále). Přehrávač QuickTime pak prostě spustí video nikoli až ve chvíli, kdy je načten celý soubor, ale hned v momentě, kdy má co přehrávat – tedy jakmile je načten začátek kontejneru s technickými informacemi a začátek vloženého videa i audia. Pak plynule přehrává dále, dokud je k dispozici dostatek dat, což při rychlém spojení většinou bývá; při pomalém se přehrávání prostě automaticky pozastaví, dokud se opět nenačte dostatečně velká část souboru.
To vlastně není "opravdický streaming" ale svým způsobem tak trochu švindl – přes internet není předáván datový stream v rychlosti, odpovídající přehrávání videa, ale zcela obecný soubor v maximální rychlosti, kterou připojení umožňuje. Z uživatelského hlediska to ale funguje velmi dobře.
A skutečný streaming? Do toho se pustíme příště.
Obsah seriálu (více o seriálu):
- Streaming videa - 1. Vizme vebové video
- Streaming videa - 2. Protokoly RTSP a RTP
- Streaming videa - 3. HTTP Live Streaming