Genesis - Knihovna pro zpracování a p°ehrávání videa
Transkript
Genesis - Knihovna pro zpracování a p°ehrávání videa
eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£. graky a interakce Bakalá°ská práce Genesis - Knihovna pro zpracování a p°ehrávání videa Ale² Zavadský Vedoucí práce: Ing. Sloup Jaroslav Studijní program: Softwarové technologie a management, Bakalá°ský Obor: Web a multimedia 11. £ervna 2009 IV V Pod¥kování D¥kuji Ing. Jaroslavu Sloupovi za hodnotné rady a odborné vedení mé práce. VI VII Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon). V Praze dne 11. 6. 2009 ............................................................. VIII Abstract The work deals with the proposal for a multimedia container video sequence to be used in the Genesis project. Multimedia container is used for the video track and audio tracks, which are further supplemented by multijazy£né subtitles. For the production of container is created fullscreen players. Furthermore, the implementation part deals with the editor, which is necessary for the creation of the proposed container. Conclusion The work deals with possibilities of expansion and other uses. Abstrakt Práce pojednává o návrhu multimediálního kontejneru pro video sekvence, který bude pouºit v projektu Genesis. Multimediální kontejner je vyuºit pro video stopy a audio stopy, které jsou dále dopln¥ny o multijazy£né titulky. Pro p°ehrávání tohoto kontejneru je vytvo°en fullscreen p°ehráva£. Implementa£ní £ást práce se zabývá editorem, který je pot°ebný pro vytvo°ení navrºeného kontejneru. Záv¥r práce pojednává o moºnostech roz²í°ení a dal²ího vyuºití. IX X Obsah 1 2 Úvod 1 1.1 1.2 1 2 Analýza a návrh °e²ení 2.1 2.2 2.3 2.4 2.5 2.6 3 3.4 Video . . . . . . . . . . . . . . . . . . . . . 2.1.1 Poºadavky na video stopu . . . . . . 2.1.2 P°ehled kodek· a formát· pro video 2.1.3 Shrnutí . . . . . . . . . . . . . . . . Zvuk . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Poºadavky na audio stopu . . . . . . 2.2.2 P°ehled kodek· a formát· pro audio 2.2.3 Shrnutí . . . . . . . . . . . . . . . . Kontejner . . . . . . . . . . . . . . . . . . . 2.3.1 Poºadavky na kontejner . . . . . . . 2.3.2 P°ehled existujících kontejner· . . . Titulky . . . . . . . . . . . . . . . . . . . . 2.4.1 P°ehled existujících formát· . . . . . P°ehráva£e . . . . . . . . . . . . . . . . . . Návrh °e²ení . . . . . . . . . . . . . . . . . . 2.6.1 Formát souboru pro video . . . . . . 2.6.2 Editor . . . . . . . . . . . . . . . . . 2.6.3 P°ehráva£ . . . . . . . . . . . . . . . Vývojové prost°edí . . . . Pouºité knihovny . . . . . Implementace - p°ehráva£ 3.3.1 Vlákna . . . . . . . 3.3.2 Synchronizace . . . Implementace - Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 4 5 6 6 6 7 8 8 8 12 12 14 14 14 15 15 17 . . . . . . . . . . . . . . . . . . . . . . . . Testování 4.1 4.2 5 3 Programátorská dokumentace 3.1 3.2 3.3 4 Základní pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cíle projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 18 19 20 22 23 Test editoru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Test p°ehráva£e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Záv¥r 25 XI XII OBSAH Literatura 27 A Uºivatelská dokumentace 29 B Obsah CD 31 A.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 A.2 Vlastní pouºití . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Seznam obrázk· 2.1 2.2 2.3 2.4 2.5 Výsledný graf testu kodek· . . . . . . . . Struktura kontejneru ASF . . . . . . . . . Struktura kontejneru Matroska . . . . . . Navrh GUI programu Editor . . . . . . . . Základní pr·b¥h zpracování videosekvence 3.1 3.2 3.3 Info o na£teném kontejneru a výb¥r stop . . . . . . . . . . . . . . . . . . . 18 Schéma vláken pro dekódování videa . . . . . . . . . . . . . . . . . . . . . 19 Gracké rozhraní Editoru . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.1 P°ehráva£ s výstupem pro titulky . . . . . . . . . . . . . . . . . . . . . . . 24 XIII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 9 . 11 . 15 . 16 XIV SEZNAM OBRÁZK Seznam tabulek 2.1 2.2 P°ehled kodek· pro video . . . . . . . . . . . . . . . . . . . . . . . . . . . P°ehled kodek· pro zvuk . . . . . . . . . . . . . . . . . . . . . . . . . . . . XV 5 7 XVI SEZNAM TABULEK Kapitola 1 Úvod V úvodu bych cht¥l zmínit, ºe tato práce si bere za cíl vytvo°it p°ehráva£, který bude pouºit v po£íta£ové h°e projektu Genesis. Bude pouºívat nejnov¥j²í obrazový kodek a p°ehrávat video sekvence ve vysokém rozli²ení. Video sekvencí v po£íta£ových hrách není tolik a pokud n¥jaké v pr·b¥hu hry jsou, tak kvalita nebývá nejlep²í. Dále u t¥chto video sekvencí zpravidla chybí podpora titulk·. Dal²ím nedostatkem po£íta£ových her je fakt, ºe video sekvence v po£íta£ových hrách mají pouze jednu zvukovou stopu (nej£ast¥jí v p·vodním jazyce). Hrᣠtak není pln¥ vtaºen do d¥je a nechápe souvislosti ve videu. Proto tento p°ehráva£ bude aplikovat titulky ve více jazycích ve vztahu k p·vodnímu videu. Vedle volby jazyka titulk· bude mít hrᣠmoºnost zm¥nit i zvukovou stopu dle vlastní volby jazyka. Pro vývojá°e po£íta£ové hry bude k dispozici Editor, který pom·ºe s vytvo°ením video sekvence. 1.1 Základní pojmy Zde si vysv¥tlíme n¥kolik základních pojm·, se kterými se m·ºeme setkat v oblastech kódování videa a je d·leºité si je na za£átku této práce p°iblíºit. Komprese dat Kompresí dat ozna£ujeme ukládání nebo p°evod dat pro pot°eby zmen²ení datového toku nebo zmen²ení datových zdroj· p°i ukládání. Snahou komprese dat je zmen²ení velikosti datového souboru za ú£elem archivace, p°enosu dat po sí´i nebo také pro pot°eby p°enosných p°ehráva£·. Komprese dat se také vyuºívá v GSM síti, kdy mobilní telefon komprimuje hovor. Základním principem kódování v kompresních algoritmech je odstran¥ní redundantních (tzn. nadbyte£ných) informací ze souboru. Tuto kompresi dat lze rozd¥lit do dvou skupin: Ztrátové a bezztrátová komprese dat jak popisuje tento zdroj [4]. Kodek Tento výraz pochází ze slov "kodér a dekodér", respektiv¥ komprese a dekomprese jak uvádí Wikipedie [2]. Kodek je hardwarové za°ízení nebo softwarový program, který se zabývá p°em¥nou datových proud· (tzv. stream·) do zakódované formy, nej£ast¥ji z d·vodu p°enosu, ukládání nebo ²ifrování dat. Nej£ast¥j²í vyuºití je p°i editaci multimediálních soubor· (lmy, hudba) a poskytování t¥chto soubor· v po£íta£ové síti a na internetu. 1 2 KAPITOLA 1. ÚVOD Kodeky m·ºeme rozd¥lit na ztrátové a bezztrátové. Výhoda prvního typu kodek· je skute£nost, ºe se p°i jejich pouºití neztrácejí ºádné informace z videa, ale mají tu nevýhodu, ºe dosahují pouze kompresního pom¥ru 1:2. Tento typ kodek· se spí²e hodí pro dal²í zpracování videa. U ztrátových kodek· se n¥které informace z obrazu vypou²t¥jí, protoºe lidské oko není tak dokonalé a tato ztráta nemá na výsledný dojem z obrazu aº takový vliv. Tato metoda komprese dosahuje hodnot 1:4 - 1:100. Záleºí v²ak na zvoleném kodeku a nastavení. Obecn¥ platí, ºe £ím v¥t²í komprese, tím v¥t²í zkreslení obrazu. Kompresi nejvíce ovliv¬uje datový tok, který m·ºe být bu¤ konstantní, nebo prom¥nlivý. Formát Kodek se n¥kdy chybn¥ zam¥¬uje za formát. Formátem se myslí specikace, se kterou pak pracuje kodek, který je naprogramován nebo implementován do hardwaru. P°íkladem m·ºe být specikace MPEG Layer 3, pro kterou pak existují kodeky jako t°eba LAME, Blade, Xing. K tomuto zam¥¬ování vede zejména shodný název formátu s kodekem. Pokud kodek umí pracovat s n¥jakým formátem, tak by m¥l um¥t tento formát rozkódovat, i kdyº bylo k zakódování pouºito jiného kodeku. Toho se vyuºívá u dvou nejznám¥j²ích kodek· - DivX a Xvid, které pracují se stejným formátem MPEG-4 ASP. Pokud je video zakódováno Xvid kodekem, lze ho p°ehrát i ve stolním p°ehráva£i s podporou DivX. Multimediální kontejner Multimediální kontejner (angl. containers ) je souborový, nebo také streamovací formát, jak je uvedeno ve Wikipedii [3]. Takto navrºený kontejner efektivn¥ ukládá datové streamy do jednoho souboru a zaji²´uje jejich synchronizaci. Video ani audio stopy nekóduje ani jinak neupravuje. Kódování a dekodování zaji²´ují aº kodeky. Jeden soubor tak m·ºe obsahovat video stopu, n¥kolik audio stop které jsou dopln¥ny o multijazy£né titulky. Mimo to m·ºou n¥které pokro£ilé kontejnery obsahovat informace o kapitolách a meta-datech (tzv. tagy). Pro p°ehrátí takového kontejneru je pot°eba tzv. demuxer, nebo tzv. splitter, které separují jednotlivé datové streamy do pot°ebných vstup· pro jejich dekodování. Kontejner sám o sob¥ datové stopy neumí dekódovat a n¥které kontejnery jsou vázané na pouºití kodek·, nap°. MPEG obsahuje jen datové stopy zakódované MPEG kodeky, ale existují i takové kontejnery, které podporují ²irokou ²kálu kodek·, jako nap°íklad otev°ený formát Matroska. Více informací o tomto novém a zcela otev°eném formátu lze najít na ociálních stránkách [5]. Základní £ásti kontejnerového formátu se nazývají "chunks"(kousky), £ast¥ji ale pakety. Hlavním obsahem paket· jsou data nebo payloady. Výhodou n¥kterých kontejner· je, ºe mají u kaºdého paketu hlavi£ku, která zaji²´uje obnovu jiného paketu v p°ípad¥ po²kození framu nebo bitu. 1.2 Cíle projektu Cílem práce je zanalyzovat dosavadní formáty a kodeky jak pro obraz tak i pro zvuk, vybrat nejvhodn¥j²í a ty pouºít v souborovém formátu spolu s multijazy£nými titulky. Práce se dále zabývá vytvo°ením dvou program·. Prvním programem je Editor, který je pot°eba pro vytvo°ení jednoho souboru z n¥kolika samostatných video a audio stream· a p°ípadné p°ipojení titulk·. Druhým programem je p°ehráva£, který p°ehraje navrºený souborový formát ve fullscreenu a zobrazí titulky. Kapitola 2 Analýza a návrh °e²ení V této kapitole se seznámíme se sou£asným stavem v oblasti ukládání videa, audia a jakým zp·sobem se dají uloºit titulky k videu. Vybereme nejlep²í formáty pro uloºení videa a audia a také jak uloºit titulky. Dále se tato kapitola bude zabývat jakým zp·sobem se dají ukládat video a audio sekvence do jediného souboru, pop°ípad¥ zda se do n¥j dají p°idat i dal²í datové soubory, jako nap°íklad titulky. Na konci najdeme návrh °e²ení, které se bude zabývat otázku návrhu vlastního souborového formátu, pop°ípad¥ implementací stávající °e²ení. 2.1 Video Kvalita videa závisí na n¥kolika parametrech ??. Prvním parametrem videa je datový tok neboli bitrate. Je to mnoºství digitálních dat p°enesených za ur£itou £asovou jednotku. Nej£ast¥ji se udává v Kilobitech za sekundu (Kbit/s). Obecn¥ lze °íci, ºe £ím vy²²í hodnota, tím je obraz videa kvalitn¥j²í. Dále u videa sledujeme, zda je prokládané nebo progresivní. Prokládané video znamená, ºe kaºdý snímek obsahuje jen polovinu °ádk· neº má celé video. T¥mito °ádky jsou bu¤to sudé nebo liché, které trvají polovinu doby celého snímku. Kdeºto progresivní video není rozd¥leno na p·lsnímky, ale jsou zobrazeny celé. Nevýhodou takového videa je, ºe bývá technicky náro£n¥j²í, ale pro lidské oko p°íjemn¥j²í. Frame rate je dal²ím parametrem videa a udává po£et zobrazených snímk· za jednotku £asu (frames per second, fps). Standardními hodnotami jsou 25fps pro PAL1 nebo 29,97fps pro NTSC2 . Pro dosaºení iluze plynulého pohybu je t°eba zobrazit alespo¬ 10 snímk· za sekundu. V po£íta£ových hrách je pot°eba 30 aº 60 snímk· za sekundu, jinak obraz p·sobí trhaným dojmem. Dal²ími parametry videa jsou rozli²ení a pom¥r stran. Rozli²ení se udává v pixelech a v poslední dob¥ se nej£ast¥ji uºívá nový formát HDTV3 . Pom¥r stran u tohoto formátu PAL (phase alternating line) je jeden ze standard· kódování barevného signálu pro televizní vysílání. NTSC (National Television System(s) Committee) je standard kódování analogového televizního signálu, který vznikl v USA. 3 HDTV (High-denition television) ozna£uje formát vysílání televizního signálu, který má rozli²ení videa 1280x720, respektiv¥ 1920x1080 1 2 3 4 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ je 16:9 neboli 1,778:1. D°íve se pouºíval pom¥r stran 4:3. Tento údaj vypovídá o pom¥ru mezi vodorovnou a svislou stranou videa. Barevnou reprezentaci videa popisuje barevný model. Barva je sm¥sí sv¥tla a r·zných vlnových délek a r·zné barevné modely se snaºí napodobit barvu co nejv¥rn¥ji. P°íkladem barevných model· je RGB4 , CMYK5 nebo také YUV6 2.1.1 Poºadavky na video stopu Obsahem videa pro °e²ený p°ehráva£ je scéna z po£íta£ové hry, která m·ºe mít rychlé i pomalé scény. V dne²ní dob¥ se p°edpokládá rozli²ení videa 1920x1080, tedy ve Full HD (High Denition). Pro video v takovém rozli²ení je pot°eba vybrat kodek, který bude podporovat takové rozli²ení, ale také nebude tolik náro£né jeho p°ehrávání na doporu£ení konguraci PC. 2.1.2 P°ehled kodek· a formát· pro video V následujícím textu je popsáno n¥kolik známých formát· a kodek· pro video [2], které by bylo vhodné pouºít pro uloºení videa. MPEG-1 je dnes uº nepouºívaný, MPEG-2 je dnes nejroz²í°en¥j²í, ale vhodný jen pro uloºení videa na DVD. My se zam¥°íme na klasický MPEG-4 (coº je DivX nebo Xvid) a nastupující MPEG-4 AVC, neboli téº H.264, který je nástupcem v²ech vý²e zmi¬ovaných formát·. M¥li bychom vybrat takový kodek £i formát, který vyhovuje poºadavk·m na p°ehrávané video. Komprese by m¥la být nastavena tak, aby m¥la minimální ztrátu v kvalit¥ obrazu a musí zvládat vysoké rozli²ení 1920x1080. Komprese by m¥la mít minimální náro£nost na výkon po£íta£e za v²ech uvedených podmínek, protoºe není vhodné pouºít kodek (dekodér), který vytíºí celý výkon po£íta£e a video tak m·ºe mít místy trhaný obraz £i zvuk p°i scénách s vy²²ím datovým tokem. DivX DivX je asi nejznám¥j²í kodek od spole£nosti DivX, Inc., který vyniká velkou kompresí p°i zachování dobré obrazové kvality. První DivX s ozna£ením DivX ;-) 3.11 se objevil jiº v roce 1998 jako pirátská verze MPEG-4 Part 2 od spole£nosti Microsoft. Pro kódování obrazu DivX pouºívá ztrátovou kompresi a implementuje MPEG-4/ASP. DivX byl komer£ní projekt a to se n¥kterým vývojá°·m nelíbilo a odd¥lili se od projektu a zaloºili sv·j, který pojmenovali Xvid. DivX v dne²ní dob¥ není jen kodek ale balík aplikací pro práci s videem. Zdarma je k dispozici pouze DivX kodek a player. Díky jeho popularit¥ existuje spousta DVD p°ehráva£· s DivX podporou. Xvid (d°íve XviD) Xvid je konkurentem kodeku DivX, ale narozdíl od n¥j, je tento kodek ²í°en i se zdrojovými kódy pod licencí GPL. Projekt byl zaloºen na OpenDivXu, který skon£il v roce 2001. Video zakódované tímto kodekem je kompatibilní s MPEG-4 Advenced Simple 4 RGB (£ervená-zelená-modrá) je aditivní zp·sob míchání barev pouºívaný ve v²ech monitorech a projektorech 5 CMYK (Cyan Magenta Yellow blacK) je barevný model zaloºený na subtraktivním míchání barev, která se pouºívá p°edev²ím u reproduk£ních za°ízení 6 YUV je barevný model pouºívaný v televizním vysílání v norm¥ PAL i HDTV, (Y udává jas, U a V jsou barevné sloºky). 5 2.1. VIDEO název kodeku DivX verze max. rozli²ení zajímavost 7 1920x1080x30fps Xvid 1.2.1 1920x1080x30fps WMV9 9 1920x1080x30fps x.264 5.1 4096x2048x30fps podporuje kompresi H.264 a kontejner MKV open-source, pouºívá kompresi MPEG4 ASP znám pod jménem VC-1, sou£ástí Windows, standard pro Blu-ray videa formát je roz²í°ením p·vodního formátu MPEG-4 ASP Tabulka 2.1: P°ehled kodek· pro video Obrázek 2.1: Výsledný graf testu kodek· (více bod· znamená celkov¥ lep²í kvalitu) p°evzato z [7] Prole a lze ho dekodovat v²emi podobn¥ zaloºenými dekodéry na knihovn¥ libavcodec. Oproti DivX lze tento kodek vyuºívat na r·zných opera£ních systémech a platformách. WMV9 Kodek WMV9 vytvo°ený spole£ností Microsoft je znám spí²e pod jménem VC-1. Vedle kodeku H.264 je i tento kodek standardem pro uchování videa na Blu-ray. Verze 7 byla zaloºena na nestandardní MPEG-4 part XX od Microsoftu, ale verze 9 se odli²uje od MPEG-4 a jde svojí cestou. Tento kodek m·ºe být jak v kontejneru AVI, tak v Matrosce ale i v ASF. Hojn¥ se pouºívá pro ²í°ení videa p°es Internet. x264 Zcela od základ· vytvo°ený nový formát, zaloºený na standardu MPEG-4 AVC (H.264), známém také jako MPEG-4 part 10, který nenavazuje na ºádný projekt, jako tomu bylo nap°íklad u Xvidu. Tento formát dosahuje skv¥lých výsledk· p°i kódování videí, lm· atp. I kdyº je kodek pom¥rn¥ mladý, zaºívá rychlý vývoj a je hojn¥ vyuºíván na Internetu. Formát je ²í°en pod licencí GNU GPL a vyuºívá jej spousta projekt·, jako je FFMPEG, VLC player a dal²í. Vlastnostmi tohoto nového formátu jsou nap°íklad CAVLC kódování, paralelní kódování více £ástí, mnohonásobné referen£ní snímky a jiné. I kdyº je vývoj zatím v po£átcích, dosahuje mnohdy lep²ích výsledk· neº komer£ní kodek DivX. 2.1.3 Shrnutí Výb¥r vhodného formátu pro video není v·bec jednoduché. My se zam¥°íme na takové, které mají ²irokou podporu a dále nabízí otev°ené zdrojové kódy, protoºe by nem¥l být takový problém s jejich implementací v p°ipravovaném p°ehráva£i. Testovat kvalitu jednotlivých kodek· je dosti obtíºné. Záleºí dosti na subjektivním pocitu výsledné kvality videa. P°i výb¥ru vhodného kodeku vycházíme z testu, který je uveden na tomto webu 6 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ [7]. Co se tý£e obrazové kvality u v²ech vý²e p°edstavených kodek· a formát· si nejlépe vede formát x.264, jak je patrné z grafu na obrázku 2.1. Bohuºel ºádný kodek nemá integrovanou podporu titulk·, tudíº je nutné pouºívat multimediální kontejnery. 2.2 Zvuk Zvuk je nedílnou sou£ástí videa. Základní reprezentace audio signálu v digitální podob¥ se jmenuje pulzní kódová modulace, zkratka PCM (pulse code modulation). Principem je pravidelné ode£ítání hodnoty signálu pomocí A/D p°evodníku a následné její ukládání do binární podoby. Prvním parametrem u zvuku je vzorkovací frekvence, v praxi se nej£ast¥ji pouºívá hodnota 44,1 kHz. Toto £íslo vychází z rozsahu který poºadujeme, ten je 20 Hz aº 20kHz, zajímá nás ta vy²²í hodnota a vzorkovat musíme minimáln¥ dvojnásobnou frekvencí, tedy 40kHz. Také se pouºivá vzorkovací frekvence 48 kHz, která vychází z násobku 8 kHz pouºívaných v telekomunikacích. D·leºitým parametrem pro uloºení komprimovaného zvuku je bitrate, stejn¥ tak jako u videa. U zvuku se rozli²ují CBR (constant bitrate), ABR (average bitrate) a VBR (variable bitrate). CBR je datový konstatní tok, typický pro PCM. ABR se m·ºe v pr·b¥hu okna m¥nit, ale jinak v ur£itém £asovém okn¥ je konstatní a VBR je datový tok, který se m¥ní a denují se u n¥j jen limity a maximum celkového pr·m¥ru. 2.2.1 Poºadavky na audio stopu Videa v po£íta£ové h°e zpravidla doprovází zvuk, který bohuºel u her nebývá ve více jazykových mutacích. Obsahem zvuku bývá hudba s mluveným slovem. Pokud budeme chtít dosáhnout prostorového zvuku, musí se doplnit dal²í zvukové kanály a bohuºel ne kaºdý formát má tuto podporu. U prostorového zvuku naroste celkový objem dat o po£et kanál·. V následující podkapitole jsou vypsány n¥které nejpouºívan¥j²í kodeky a formáty pro komprimaci zvuku. Vybraný kodek by m¥l poskytovat co nejlep²í kvalitu za pouºití co moºná nejmen²ího datového toku, protoºe £ím men²í datový tok, tím v¥t²í datová úspora, ale nem¥l by být niº²í neº je kvalita blízká CD, tedy NCDQ, který platí pro stereo zvuk. Dále je moºné pouºít variabilní bitrate. 2.2.2 P°ehled kodek· a formát· pro audio Zde jsou popsány kodeky a formáty, které jsou ur£ené pro zvuk. MP3 MP3 je zkrácený výraz pro kodek MPEG-1 Audio Layer 3. Asi nejznám¥j²í formát, který vyvinula v roce 1991 spole£nost Fraunhofer Society a vychází z formátu MP2. Kodek vyuºívá psychoakustického modelu, aby sníºil velikost datového toku aº 11x oproti souboru na CD). Spolu s audio stopou jsou uloºeny informace o autorovi, albu atd. Jedná se o metadata ve formátu ID3. Datové toky se pohybují od 8 kbit/s aº do 320 kbit/s. Pro kvalitu ozna£ovanou jako NCDQ je pot°eba datový tok 128 kbit/s. 7 2.2. ZVUK název kodeku MP3 AAC Vorbis WMA Dolby Digital bitrate pro NCDQ (v kbit/s) Podpora 5.1 otev°ený formát 128 96 112 64 neuvedeno NE ANO ANO NE ANO NE ANO (FAAD2) ANO NE NE Tabulka 2.2: P°ehled kodek· pro zvuk AAC Vylep²ený formát kodeku MP3, roz²í°en o vzorkovací frekvenci aº na 96 KHz. Moºnosti pouºít aº 48 kanál· a 15 nízkofrekven£ních kanál· pro subwoofer (LFE). NCDQ je stanovena pro 96 kbit/s a pro 5.1 kanál· na 320 kbit/s. AAC je jeden z nejpokro£ilej²ích kodek· a má velmi dobré vyhlídky do budoucna. Pro tento kodek existuje mnoho enkodér·, jako t°eba FAAC, Nero Digital nebo profesionální enkodér od rmy Apple. Bohuºel softwarová podpora není nejlep²í. Vorbis Vorbis je otev°ený formát pro jakékoliv pouºítí, coº by mohla být výhoda. Pouºívá variabilní bitrate a také má podporu pro vícekanálové kódování s moºností provázaností kanál·, které se ozna£uje jako coupling a redukuje mnoºství komprimovaných dat. U komprese se nenastavuje bitrate ale pouze kvalita v rozsahu 0-1, kde 0,3 odpovídá NCDQ. Výhodou je skute£nost, ºe p°i p°ekódování na niº²í datový tok se data nemusí dekomprimovat. NCDQ je v¥t²inou udáváno jako 112 kbit/s a tím p°ekonává MP3 a kvalitou je stejný jako AAC. Windows Media Audio (WMA) Kodek vyvinutý rmou Microsoft. Pouºívá stejné metody jako MP3, AAC a Vorbis. Maximální vzorkovací frekvence je 48 kHz. Microsoft uvádí, ºe u WMA dosáhne NCDQ jiº p°i 64 kbit/s, reálný datový tok je kolem 112 kbit/s s o n¥co lep²í kvalitou neº u MP3. Od verze 9.1 °adí tento kodek k t¥m nejlep²ím (Vorbis, AAC) ale existuje pro n¥j pouze jeden enkodér a ten je integrovaný ve Windows Media Playeru (WMP). Je o dost rychlej²í neº Vorbis ale má pouze nastavení Variabilního Bitratu a to jen n¥které pevn¥ danné hodnoty. Pro star²í verzi 8 a níºe existuje implementace v rámci FFmpeg projektu. Bohuºel pro tento kodek neexistuje otev°ená specikace, tudíº nelze pouºít pro enkódování v jiných aplikací neº je WMP. Dolby Digital P·vodn¥ ozna£ován jako AC-3 byl vyvinutý rmou Dolby Laboratories. Navazuje na p°edch·dce Dolby Stereo a Dolby Surround. Tento kodek má podoru sterea a 5.1 reºimu. Pouºívá svázání více kanál· podobné joint-stereu. P·vodní pouºití tohoto formátu byl v kinech, následn¥ na²el vyuºití pro kódování zvuku na discích DVD. Soubor zakódovaný v tomto formátu poznáme podle p°ípony .ac3. Tento formát má podporu v kontejnerech AVI, OGM nebo MKV. Konkurencí tomuto formátu je Sony Dynamic Digital Sound a Digital Theatre System. 2.2.3 Shrnutí P°i výsledné komprimaci je vºdy hlavní otázkou volba formátu. Ta záleºí na tom, kde, kdo a kdy chce zvuk vyuºívat. Volba pro video je závislá na poºadavku kompatibility. 8 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ Na DVD se ve v¥t²í mí°e pouºívá Dolby Digital. Kontejnery mají obecn¥ ²irokou podoru zvukových formát·, takºe u Matrosky m·ºe být zvuk ve formátu Vorbis, AAC nebo MP3. Kdyº je zvolený formát, tak dal²í volba je na konguraci enkodéru. Nejzásadn¥j²ím parametrem je bitrate nebo-li datový tok, který by nem¥l být niº²í, neº je kvalita blízká CD, tedy NCDQ, pro stereo zvuk. U vícekanálového zvuku samoz°ejm¥ nárok na datový tok roste. Dále je ur£it¥ dobré zvolit variabilní datový tok, který maximalizuje kvalitu zvuku p°i snaze o co nejmen²í mnoºství p°eneseních dat. 2.3 Kontejner Multimediální kontejner je formát uloºení n¥kolika proud· multimediálních dat (stop, stream·) do jednoho souboru (obecn¥ datového toku). V jednom soubor· m·ºeme tak mít nap°íklad uloºenou jednu video stopu, n¥kolik zvukových stop v r·zných jazycích a n¥kolik multijazy£ných titulk· a je zaji²t¥na jejich synchronizace. Více v úvodní kapitole. 2.3.1 Poºadavky na kontejner Multimediální kontejner pro navrhovaný p°ehráva£ by m¥l spl¬ovat n¥kolik poºadavk·. První z nich je, ºe musí mít podporu vybraných formát· videa, audia a titulk·, spojit je do jediného datového souboru. Nem¥la by ani být omezena moºnost p°idat více jak jednu stopu audia a videa. Titulk· musí být také více neº jen jedny. Co asi nebude spl¬ovat ºádný z kontejner· je moºnost uzav°ení pro p°ehrání jen v jednom p°ehráva£i, který si pro tento kontejner vytvo°íme. Tato vlastnost by byla pot°eba proto, ºe videa, která budou obsaºena v kontejneru, budou sou£ástí po£íta£ové hry a není vhodné, aby byly p°ístupné z jiného prost°edí, £i p°ehráva£e, neº je samotná hra. Na druhou stranu by bylo ale velmi náro£né vytvo°it si vlastní kontejner, který bude tak propracovaný jako jiº existující navrºené kontejnery. 2.3.2 P°ehled existujících kontejner· V následujících odstavcích si p°edstavíme nejznám¥j²í kontejnery pro spole£né uchování videa a zvuku a p°edstavíme si i ty, které mohou obsahovat i n¥co víc neº jen tyto dva druhy dat. AVI Nejstar²í formát rmy Microsoft, pouºil ho jiº ve Windows 3.11. Poslední verze 2.0 má neomezenou velikost souboru, ale FAT32 omezuje maximální velikost na 4GB, na NTFS je (tém¥°) neomezeno (velikost disku). Na za£átku souboru je hlavi£ka, která obsahuje informace o videu (framerate, rozli²ení, kodek,...) a o zvuku (samplovací frekvence, kvantizace, kodek,...) Na konci je tabulka, ve které jsou informace o po°adovém £ísle jednotlivých snímk· videa resp. audio paketu a jejich pozici v souboru. Soubor nelze p°ehrát, pokud není celý k dispozici (nelze streamovat po internetu) as snímku není ur£en absolutn¥, ale lze ho spo£ítat pouze z framerate videa a jeho indexu. Do tohoto kontejneru není moºné uloºit titulky ani jiné informace (kapitoly). AVI je zvlá²tní p°ípad formátu RIFF (Resource Interchange File Format) rozd¥luje data souboru do blok·. 9 2.3. KONTEJNER Obrázek 2.2: Struktura kontejneru ASF MPEG stream MPEG je ISO/IEC standard, vyuºití najde p°edev²ím pro MPEG video a zvuk. MPEG umoºnuje jak lokální uloºení souboru na disku, tak streamování po internetu Advanced Systems Format (ASF) Tento formát má p°ípony .ASF, pozd¥ji p°ibylo i .WMV a .WMA. Ur£en p°edev²ím pro pouºití MPEG-4 a Windows Media Video a Audio formát·. Nejv¥t²í vyuºití najde pro streamování po internetu. Nevýhodou je jeho uzav°enost pouze na kodeky, které Microsoft dovolí. Struktura ASF v aktuální verzi 1.2 je zaloºena na objektech, který je základní sloºkou, je identikován pomocí GUI. Struktura tohoto formátu je na obrázku 2.2. • File Properties Object - základní statistika o souboru jako délka, velikost, datum vytvo°ení, jedine£né ID souboru atd. • Stream Properties Object - je zde povinn¥ pro kaºdý stream v souboru a obsahuje informace typu streamu a formátu • Header Extension Object - je zde pro dal²í moºné roz²í°ení specikace 10 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ • Codec List Object - zobrazitelné informace o kodecích, které jsou pouºity pro p°ehrání souboru • Script Command Object - seznam p°íkaz· synchronizovaných na ur£itý £as, obsahuje bu¤ URL adresu nebo soubor • Marker Object - jde o £asové zna£ky pro rychlý p°esun v souboru, obdoba kapitol u DVD • Bitrate Mutual Exclusion Object - identikuje streamy, které jsou v·£i sob¥ vylu£ující, nap°. video stopa v ur£itém £ase nem·ºe být p°ehrávaná zárove¬ s jinou, umoº¬uje uºivateli vybrat nap°íklad video s r·zným bitrate apod. • Error Correction Object - identikuje metodu korekce chyb • Content Description Object - popis obsahu jako autor, titul, copyright, apod., obdoba ID3 tagu u MP3 • Extended Content Description Object - roz²í°ení Content Description o dal²í informace • Stream Bitrate Properties Object - informace o pr·m¥rném bitrate kaºdého streamu • Content Branding Object - je moºné p°ipojit zna£ku/banner, který se bude zobrazovat p°i pouºití souboru, lze i pomocí URL R • Content Encryption Object - informace o pouºitém DRM (Microsoft Digital Rights Manager) • Extended Content Encryption Object - moºnost chránit soubor pomocí Windows Media Rights Manager 7 • Digital Signature Object - podpis, který chrání informace v hlavi£ce • Padding Object - umoº¬uje zv¥t²it velikost hlavi£ky o libovolnou velikost, nenese ºádná uºite£ná data Matro²ka Matroska (MKV) je otev°ený formát, vycházející z jazyka XML, resp. jeho binární verze Extensible Binary Meta Language (EBML). MKV kontejner podporuje nejen videa a audia, ale i pro titulky, menu, kapitoly, tituly, lze p°iloºit i soubory. P°ípona video soubor· je .MKV, u zvukových .MKA a u samotných titulk· .MKS. Kontejneru bohuºel chybí ²ir²í podpora tohoto kontejneru, zejména pro editaci. Video kódováno nap°.: MPEG-4 ASP nebo MPEG-4 AVC. Audio je kódováno nej£ast¥ji v open-source Vorbis, v komer£ním MPEG-4 AAC ale i AC3, MP3 a DTS. Podle obsahu se pouºívá i rozdílná p°ípona, u video soubor· je to .MKV, u zvukových .MKA a u samotných titulk· .MKS. Vnit°ní uspo°ádání tohoto formátu je zobrazeno na obrázku 2.3 Na za£átku je hlavi£ka, která identikuje typ EBML souboru a verzi, následuje segkterý tvo°í datovou funk£ní £ást, typicky je jen jeden, ale m·ºe jich být i více. Segment se dále d¥lí na men²í £ásti (sekce), kaºdá obsahuje jiný typ informace. Metaseek udává pozici t¥chto sekcí uvnit° segmentu. Segment Information obsahuje základní informace o souboru jako název titulu, dále unikátní ID a pokud je sou£ástí více soubor·, ment(y), 11 2.3. KONTEJNER Obrázek 2.3: Struktura kontejneru Matroska 12 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ tak i ID dal²ího souboru. Sekce Tracks je seznam stop, tedy video, audio, titulky a také informace o nich, Chapters pak seznam kapitol a jejich umíst¥ní. V sekci Clusters jsou jiº samotná data - video snímky, zvukové pakety atd. Jejich pozice je vºdy jako £as, coº zabra¬uje rozsynchronizování v²ech stop. Pro urychlení hledání pozice v souboru je zde je²t¥ sekce Cueing Data, která slouºí podobn¥ jako index u AVI souboru, není v²ak nezbytná, pouze urychluje vyhledávání. Do sekce Attachment lze p°iloºit jakýkoliv soubor. Poslední sekcí je Tagging, která nese související informace k titulu nebo jednotlivým stopám jako autor, ú£inkující a podobn¥, je to obdoba ID3 tagu u MP3. 2.4 Titulky Formát pro titulky musí spl¬ovat poºadavky, jako je jednoduché formátování písma ( tu£né, kurzíva, atp.), pozicování jednotlivých £ástí titulk· na monitoru. V praxi se nej£ast¥ji vyskytují dva druhy formát·: asový formát Je zaloºen na £asové informaci titulku (p°íklad formát SubRip). Titulky jsou zobrazovány a schovávány v konkrétním £ase. Výhoda tohoto formátu je, ºe není t°eba se ohlíºet na frekvenci lmu (PAL, NTSC). Snímkový formát Je zaloºen na snímkové informaci titulk· (MicroDVD). Titulky jsou zobrazovány v závislosti na po£tu ub¥hlých snímk·. Nevýhoda tohoto formátu je, ºe pro stejný lm ve dvou verzích (PAL, NTSC) musí existovat dvoje titulky. Po£et snímk· je totiº jiný pro PAL a jiný pro NTSC. 2.4.1 P°ehled existujících formát· MicroDVD • P°ípona .sub nebo .txt Ukázka titulk· 12301302Pellentesque id turpis congue nisl volutpat commodo 13401422Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non. 14471512Nam imperdiet turpis sed enim. Donec posuere suscipit diam. SubRIP • P°ípona .srt Ukázka titulk· 1 00:00:21,960 --> 00:00:24,760 Pellentesque id turpis congue nisl volutpat commodo 2 00:00:25,760 --> 00:00:30,160 2.4. TITULKY 13 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non. 3 00:00:32,160 --> 00:00:35,960 Nam imperdiet turpis sed enim. Donec posuere suscipit diam. Sami • P°ípona .sami • Podpora ve Windows Media Playeru • HTML- formát titulk· Ukázka titulk· <SAMI> <HEAD> <TITLE>Whatever</TITLE> <STYLE TYPE="text/css"> <!-P {margin-left:8pt; margin-right:8pt; margin-bottom:2pt; margin-top:2pt; text-align:center; font-size:20pt; font-family:egal, sans-serif; font-weight:normal; color:white;} .KRCC {Name:Korean; lang:kr-KR; SAMIType:CC;} #STDPrn {Name:Standard Print;} #LargePrn {Name:Large Print; font-size:24pt;} #SmallPrn {Name:Small Print; font-size:16pt;} --> <SYNC Start=30886><P Class=KRCC> The Age of Gods was closing. <SYNC Start=34037><P Class=KRCC> The heavens shook as the armies of Falis, SubViewer 2.0 • p°ípona .sub Ukázka titulk· [INFORMATION] [TITLE]xxxxxxxxxx [AUTHOR]xxxxxxxxxx [SOURCE]xxxxxxxxxx [PRG] [FILEPATH] [DELAY]0 14 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ [CD TRACK]0 [COMMENT] [END INFORMATION] [SUBTITLE] [COLF]&H00FFFF,[STYLE]no,[SIZE]12,[FONT]Courier New 00:00:07.00,00:00:11.91 THERE IS A PLACE ON EARTH WHERE IT[br]IS STILL THE MORNING OF LIFE... 00:00:12.48,00:00:15.17 AND THE GREAT HERDS RUN FREE.[br]SO WHAT?! 2.5 P°ehráva£e V sou£asné dob¥ existuje n¥kolik program·, které se zabývají p°ehráváním video sekvencí. Tyto programy mají ²irokou podporu formátu, od t¥ch nejstar²ích aº po ty nejnov¥j²í. Zam¥°ují se spí²e na v²eobecné pouºití, zejména pro p°ehrávání lm·, video klip·, pop°ípad¥ hudebních soubor·. Jedni z nejuniverzáln¥j²ích p°ehráva£· je Media Player Classic nebo t°eba VLC Media Player. P°ehráva£, kterým se zabývá tato práce, se nemá snahu vyrovnat t¥mto p°ehráva£·m, ale implementovat n¥kolik funkcí, které budou pot°eba pro jeho vyuºití v projektu Genesis a následn¥ v po£íta£ové h°e. 2.6 Návrh °e²ení Tato kapitola pojednává o návrhu °e²ení souborového formátu pro video sekvence, který vychází z p°edchozí studie. Zabývat se také budeme otázkou, jak bude vypadat program pro vytvá°ení t¥chto video sekvencí a následn¥ jak a v £em je p°ehrávat. 2.6.1 Formát souboru pro video V souborovém formátu bude zapot°ebí nejmén¥ jedna video stopa, více jak jedna audio stopa s n¥kolika jazykovými verzemi titulk·. D·vodem pro£ do budoucna zavést více video stop je pro vyuºití stereoskopie nebo pro systém CAVE, kde m·ºe být jeden obraz zobrazen na n projektorech. To znamená, ºe je pot°eba n*2 video stream·, pro kaºdý projektor je zapot°ebí dvou video stream·. Nejvhodn¥j²í kodek pro kompresi videa je formát x264, jak je patrné z vý²e uvedeného rozboru. Je to standart pro kompresi videa ekvivalentní s MPEG-4 Part 10 (AVC Advanced Video Coding). Tento kodek obsahuje celou °adu nových funkcí, které umoº¬ují komprimovat video mnohem ú£inn¥ji neº star²í normy. Zvládá video ve vysokém rozli²ení aº 4096x2048x30fps nebo 1920x1080x120fps. Kodek je navrºen tak, aby spl¬oval poºadavky pro r·zné pot°eby. Má mnoho prol· a úrovní, které umoº¬uji r·zné úrovn¥ komprese, kvality a zatíºení CPU, tudíº se hodí jak pro p°enosné za°ízení, které mají nízký výkon, tak pro po£íta£e, kde je pot°eba vysoká kvalita a efektivita komprese. Zvuk by bylo nejlep²í komprimovat do otev°eného formátu Vorbis a nebo do AAC, který je bohuºel komer£ní a nebude tak velká podpora pro jeho implementaci. Dosta£ující by byl kodek MP3, který je zatím jeden z nejroz²í°en¥j²í formát· pro zvuk. 2.6. NÁVRH EENÍ 15 Obrázek 2.4: Navrh GUI programu Editor Titulky se budou ukládat ve formátu SubRIP s koncovkou .srt. Jde o nejroz²í°en¥j²í formát a také je podporován v kontejneru Matroska. Titulky uloºené v tomto formátu jsou p°ehledné a jednodu²e editovatelné. U jednotlivých titulk· je pouze za£átek a konec zobrazení a m·ºou být dopln¥ny o html zna£ky pro formátování písma (nap°.: <i>kurzíva </i>) Poslední volbou v návrhu souboru je kontejner, který bude obsahovat v²echny streamy. Navrh vlastního kontejneru není z hlediska efektivity výhodný a navíc by se nevyrovnal kvalit¥ jiº hotových kontejner·. Z p°edstavených kontejner· nejvíc vyhovuje Matroska, který spl¬uje v²echny poºadavky na video, audio i titulky. Je to otev°ený formát ²í°ený pod licencí GNU L-GPL. Bohuºel je tento formát pom¥rn¥ nový a jeho podpora není tak ²iroká jako nap°íklad u AVI kontejneru a nebude snadné ho implementovat. 2.6.2 Editor Sou£ástí projektu je editor s konvertorem. Je to program, který vytvá°í nální kontejner pro p°ehráva£. Základní funkce tohoto editoru je slou£ení videostop s audio stopami, moºnost p°i°adit k nim n¥kolik jazykových titulk·. Konvertor by m¥l um¥t p°evést audio nebo video z libovolného formátu námi zvolených. Návrh Editoru je vid¥t na obrázku 2.4. 2.6.3 P°ehráva£ Na obrázku 2.5 je znázorn¥no schéma, jak asi bude p°ehráva£ postupovat p°i otevírání video sekvence. Vstupem bude kontejner, který jsme si nadenovali v p°edchozím textu. Tento kontejner bude zapot°ebí p°e£íst tzv. demuxorem, který p°e£te vnit°ní strukturu datového souboru na jednotlivé streamy (datové proudy). Dále se tyto streamy musí rozkódovat. Aby bylo moºno toto u£init, musíme znát jejich dekodér, který dokáºe zakódovaná data p°e£íst, abychom s nimi mohli dále pracovat. V poslední fázi se budeme 16 KAPITOLA 2. ANALÝZA A NÁVRH EENÍ Obrázek 2.5: Základní pr·b¥h zpracování videosekvence snaºit rozkódovaná data prezentovat, coº znamená ºe video zobrazíme na obrazovku, zvuk p°ehrajeme a titulky se vypí²ou bu¤ to p°ímo do videa nebo do výstupu programu (system out). Pokud bude mít vstupní soubor více stream· stejného typu, musíme si p°edem zvolit, který z nich bude pouºit pro p°ehrávání. Dále bude na výb¥r zda p°ehrát video v celoobrazovkovém módu nebo v okn¥. Kapitola 3 Programátorská dokumentace Popis implementace / realizace se zam¥°ením na nestandardní £ásti °e²ení. 3.1 Vývojové prost°edí K naprogramování celé práce bylo pouºito vývojové prost°edí Visual Studio 2008 od spole£nosti Microsoft. Je to komplexní nástroj pro vytvá°ení aplikací a´ uº v jazyce C++ nebo C. C++ bylo zvoleno proto, ºe knihovna pro p°ehrávání bude pouºita v projektu Genesis, který pouºívá vykreslovací engine na platform¥ OpenGL a C++ a také proto, ºe se v práci implementují knihovny, které jsou psány v jazyce C a není takový problém je pouºít i v C++. 3.2 Pouºité knihovny První pokus, jak implementovat kontejner Matroska, byl p°es knihovny libmatroska a libebml z ociálních stránek Matrosky. Bohuºel zde byl první problém a knihovnu se neda°ilo implementovat, p°estoºe u knihovny byly p°iloºeny ukázky pouºití knihoven. Druhý a úsp¥²ný pokus byl u pouºití knihoven libavcodec a libavformat, které jsou vyvíjeny v projektu FFmpeg. FFmpeg je °e²ení pro p°ehrávání, nahrávání, p°evod a streamování audia a videa nezávislé na pouºité platform¥. Její pouºití by m¥lo být jednodu²í neº knihovny libmatroska a libebml. Knihovna libavcodec obsahuje dekodery a enkodery pro video/audio kodeky a knihovna libavformat obsahuje demuxory a muxory pro multimediální kontejnery. Knihovny jsou psány v C a umí pracovat s jakýmkoliv kodekem, který se v dne²ní dob¥ pouºívá. Dále je zapot°ebí knihovna pro správné zobrazení obrazu, pro toto je v projektu FFmpeg také knihovna s názvem libswscale. Pro zobrazení výsledného videa na obrazovku a p°ehrávání zvuku se pouºije knihovna SDL (Simple DirectMedia Layer), která je, tak jako knihovny FFmpeg, nezávislá na platform¥. Tato knihovna také nabízí p°ístup ke klávesnici, my²i, 3D grace p°es OpenGL a k 2D video framebueru. V²echny knihovny jsou nabízeny pod licencí GNU LGPL, která umoºnuje pouºití t¥chto knihoven v komer£ních projektech, pokud jsou linkovány jako dynamické. 17 18 KAPITOLA 3. PROGRAMÁTORSKÁ DOKUMENTACE Obrázek 3.1: Info o na£teném kontejneru a výb¥r stop 3.3 Implementace - p°ehráva£ V první °ad¥ je pot°eba popsat co obsahuje video jako celek, °iká se tomu kontejner, a m·ºe obsahovat r·zná data. Matroska kontejner umoºnuje ukládat nejen video a audio, ale i titulky, kapitoly a dokonce i soubory. Jednotlivé stopy jsou streamy, neboli data, která jsou postupn¥ dodávána v pr·b¥hu £asu a jsou sloºena z element·, které se nazývají framy a kaºdý stream je pot°eba dekodovat na zmín¥né framy, ale k tomu je pot°eba odpovídající kodek. Ze streamu se £tou pakety, které obsahují £ásti dat, které musí být dekódovány. Tyto data se pak musí dále zpracovat, podle toho, jestli se jedná o obraz, zvuk, nebo titulky. Kdyº se jedná o obraz, tak paket obsahuje jeden frame, u audia je to více fram·. Paket s titulkama obsahuje aktuální v¥tu. Takto jednodu²e lze popsat postup [8], jak zpracovat datový soubor s multimediálním obsahem. P°ehráva£ pouºívá pro na£tení souboru strukturu, která obsahuje v²echna data z na£teného/p°ehrávaného souboru. Pro rozd¥lení na£teného kontejneru na jednotlivé streamy je zapot°ebí demuxor, který musí znát strukturu kontejneru a musí s ním um¥t pracovat. Výpis obsahu kontejneru vypadá jako na obrázku 3.1. O audio stream se stará knihovna SDL, která má v sob¥ funkce pro p°ehrávání zvuku. Nejd°íve ale musíme vytvo°it strukturu SDL_AudioSpec, ve které nastavíme ve²keré informace pro audio, viz níºe. wanted_spec.freq = codecCtx->sample_rate; \\vzorkovaci frekvence wanted_spec.format = AUDIO_S16SYS; \\formát zvuku wanted_spec.channels = codecCtx->channels; \\pocet kanál· wanted_spec.silence = 0; \\hodnota pro ticho wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;\\velikost audio bufferu wanted_spec.callback = audio_callback; \\funkce pro p°enos paket· wanted_spec.userdata = is; \\datova struktura s audio streamem P°ehrávání zvuku je realizováno tak, ºe se £tou pakety informací ze zvukového streamu, které se ukládají do fronty. Z fronty se pakety dostávají k dekódovací funkci. Pokud je 3.3. IMPLEMENTACE - PEHRÁVA 19 Obrázek 3.2: Schéma vláken pro dekódování videa audio frame rozloºen do více paket·, tak se musí na£íst v²echny pakety a aº poté se dekódují. Dekódování videa probíhá obdobn¥. K zobrazení fram· také pouºijeme knihovnu SDL. Tato knihovna má n¥kolik funkcí pro zobrazení obrázk· na obrazovku, zejména pak pro zobrazení videa. K tomu je pot°eba znát pojem YUV (nebo také YCbCr). Je to zp·sob ukládání obrazových dat podobn¥ jako RGB, jak je popsáno v kapitole o videu. SDL pouºívá YUV formát, který se nazývá YUV420P s pom¥rem jasové sloºky v·£i barevné v pom¥ru 4:2:0 s parametrem "P", který odd¥lí sloºky do jednotlivých polí. Pro vytvo°ení okna pouºijeme funkci SDL_SetVideoMode, která je sou£ástí jiº zmín¥né knihovny a m·ºeme zobrazit získaný frame tak, ºe ho p°ekonvertujeme do YUV formátu a zobrazíme do vytvo°eného okna. Takto se zpracovávají v²echny snímky videa. 3.3.1 Vlákna Rozd¥lení programu do více vláken zajistí v¥t²í modularitu a také jednodu²í práci s tímto programem p°i provád¥ní synchronizace videa se zvukem. P°ehráva£ musí obstarávat n¥kolik úkol·, které rozd¥líme do samostatných vláken. Jedno z vláken bude zodpov¥dné za dekodování paket·, které se za°adí do fronty. Z fronty si je dále budou p°ebírat vlákna, která mají na starosti zpracování videa nebo audia. Vlákno pro audio se vytvo°í p°i dekódování knihovonou SDL. Zobrazení fram· videa se bude nacházet v hlavním cyklu main funkce, kde je událostní smy£ku. V p°ípad¥ pot°eby snímku se na£te nový z fronty, kde jsou uloºeny dekódované framy. Pro lep²í orientaci ve vláknech slouºí schéma na obrázku 3.2. Ovládání videa je zaji²´ováno pomocí vlákna SDL_Delay, kterým m·ºeme kontrolovat zobrazení dal²ího snímku. P°i synchronizaci jen ur£íme p°esný £as, kdy se má zobrazit dal²í snímek. Poté, co vytvo°íme vlákno pro dekódování videa, o to se postará funkce SDL_CreateThread (), m·ºe toto vlákno £íst pakety z video fronty a dekódvat je do 20 KAPITOLA 3. PROGRAMÁTORSKÁ DOKUMENTACE snímk·, za p°edpokladu ºe na²lo pot°ebný dekodér. Dekódované snímky ukládá do fronty obrázk·, které dále budou zobrazeny na obrazovku. 3.3.2 Synchronizace Nejd·leºit¥j²í vlastností p°ehráva£e videí je bezesporu bezchybná synchronizace audia s videem, to znamená ºe zvuk bude odpovídat zobrazovanému snímku. Pro tento problém mají video a audio streamy v sob¥ informace, podle kterých se dají spolu synchronizovat. U videa to jsou framy za sekundu a audia vzorkovací frekvence. Bohuºel ale nesta£í pouhé vynásobení po£tu snímk· s jejich rychlostí zobrazení, tzv. frame rate. Je dost moºné, ºe obraz stále nebude pln¥ synchronizovaný se zvukem. Proto jsou u videa hodnoty jako DTS (decoding time stamp) a PTS (presentation time stamp). PTS p°edstavuje £as, kdy je snímek z paketu zobrazen a DTS je £as, kdy je snímek z paketu dekódován. DTS je pot°ebný k tomu, abychom v¥d¥li, kdy n¥co dekódovat, a PTS údaj nám °íká kdy je pot°eba n¥co zobrazit. P°i dekódování MPEG videa dostáváme n¥kolik druh· snímk· neboli fram·. I-frame (Intraframe) je klí£ovým snímkem, který obsahuje kompletní obraz a je komprimován do JPEGu. P-frame (Predictive frame) vychází z p°edchozího snímku a jsou v n¥m uloºeny zm¥ny v obraze. B-framy (Bi-directional) mají ze v²ech nejmen²í velikost a vycházejí z p°edchozích, ale i následujících snímk·. Snímky se p°ená²í v po°adí I P B B atd., ale my je pot°ebujeme zobrazit v po°adí I B B P. Obecn¥ PTS a DTS budou rozdílné pouze tehdy, kdyº se budou p°ehrávat B-snímky. Podrobn¥ popsáno v knize [1]. PTS: 1 4 2 3 DTS: 1 2 3 4 stream: I P P B Kdyº dostaneme paket z funkce av_read_frame(), bude obsahovat PTS a DTS údaj. Proto, abychom v¥d¥li, kdy zobrazit dekódovaný frame, musíme znát PTS údaj. Ne vºdy ale dostaneme z paketu údaj PTS, protoºe frame m·ºe být rozd¥len na n¥kolik paket·. Musíme si jej zjistit jinou cestou, která je ve vloºené ukázce kódu. Uloºíme PTS z prvního paketu framu, který dostaneme a který bude zároven nální PTS pro celý frame. Pokud ze stream· nedostaneme DTS hodnotu, pouºijeme tuto PTS uloºenou hodnotu. Jsou t°i moºnosti jak synchronizovat: synchronizovat zvuk s video sekvencí, synchronizovat video se zvukem, nebo synchronizovat audio a video s externími hodinami (systémový £as). double pts; for(;;) { if(packet_queue_get(&is->videoq, packet, 1) < 0) { // means we quit getting packets break; } pts = 0; // dekodovani framu videa len1 = avcodec_decode_video(is->video_st->codec, pFrame, &frameFinished, 3.3. IMPLEMENTACE - PEHRÁVA 21 packet->data, packet->size); if(packet->dts != AV_NOPTS_VALUE) { pts = packet->dts; } else { pts = 0; } pts *= av_q2d(is->video_st->time_base); Denujeme funkci synchronize_video(), která bude °e²it synchronizaci videa, pokud nebudeme mít PTS hodnotu pro nální snímek. Zárove¬ musí sledovat, kdy se o£ekává dal²í snímek, abychom mohla nastavit správnou obnovovací frekvenci. To se nastaví u hodin - video_clock, které sledují, kolik £asu ub¥hlo v závislosti na videu a tuto hodnotu nastavíme do hlavní struktury. P°i p°ehrávání se PTS bude vypo£ítávat z p°edchozích dvou hodnot a tato hodnota bude pouºita pro p°í²tí frame. Dále je pot°eba synchronizovat video se zvukem. Pro zvuk jsme si také vytvo°ili hodiny, které budou mít za úkol sledovat, orientaci v p°ehrávaném zvuku. Tato hodnota se pouºije pokud by byl velký rozdíl mezi videem, jinak ji nepot°ebujeme, protoºe synchronizujeme video na zvuk. Pokud nastane ta situace, ºe je video a audio mimo synchronizaci, tak se PTS pro p°í²tí synchronizaci zdvojnásobí, v p°ípad¥ ºe by byl obraz opoºd¥n za zvukem. Pokud naopak, zvuk by byl opoºd¥n v·£i obrazu, tak se se co nejd°ív obnoví obraz. Obnovovací £as, neboli zpoºd¥ní se je²t¥ bude korigovat s po£íta£ovými hodiny. Kaºddé vypo£tené zpoºd¥ní se bude je²t¥ srovnávat s tímto systémovým £asem (frame_timer) a pouºije se tato hodnota pro dal²í snímek. Tento princip je vypsán v následujícím kódu. delay = vp->pts - is->frame_last_pts; // pts z posledniho casu //ulozi se pro dalsi pouziti is->frame_last_delay = delay; is->frame_last_pts = vp->pts; //aktualizace zpozdeni k synchronizaci audia if(is->av_sync_type != AV_SYNC_VIDEO_MASTER) { // aktualizace zpozdeni pro synchronizaci audia ref_clock = get_master_clock(is); diff = vp->pts - ref_clock; // preskoci nebo zopakuje frame sync_threshold = (delay > AV_SYNC_THRESHOLD) ? delay : AV_SYNC_THRESHOLD; if(fabs(diff) < AV_NOSYNC_THRESHOLD) { if(diff <= -sync_threshold) { delay = 0; } else if(diff >= sync_threshold) { delay = 2 * delay; /*... ...*/ is->frame_timer += delay; 22 KAPITOLA 3. PROGRAMÁTORSKÁ DOKUMENTACE Obrázek 3.3: Gracké rozhraní Editoru // vypocet realneho zpozdeni actual_delay = is->frame_timer - (av_gettime() / 1000000.0); if(actual_delay < 0.010) { actual_delay = 0.010; } schedule_refresh(is, (int)(actual_delay * 1000 + 0.5)); 3.4 Implementace - Editor Editor, který má konvertovat z libovolného formátu do vybraných, tedy video do x264 a zvuk do formátu MP3, je °e²en p°es externí program, který se jmenuje FFMpeg, vyvýjen ve stejnojmeném projektu FFMpeg. Po prostudování n¥kolika program·, které se zabývají touto problematikou (FFmpeg, MKVmerge), není v·bec jednoduché vytvo°it si vlastní program, který by toto °e²il. Výhoda pouºití externího programu je, ºe umí konvertovat z mnoha formát· a nejen to, umí nastavit mnoho parametr· jak uvidea (nap°íklad rozli²ení), tak audia (bitrate atp.) a zastane i funkci slou£ení v²ech multimediálních stop do jednoho nálního kontejneru Matroska. K programu FFmpeg bylo pot°eba dod¥lat gracké rozhraní, které je uºivatelsky p°ív¥tiv¥j²í neº pracovat s p°íkazovou °ádkou. Gracké rozhraní bylo navrºeno a naprogramováno ve Visual Studiu 2008, které má designový nástroj pro vytvá°ení formulá°·. V n¥m bylo sestaveno gracké rozhraní a dopsány funkce pro otev°ení a uloºení souboru a hlavní funkce pro zavolání externího programu FFMpeg. Kapitola 4 Testování V kone£né fázi se oba programy, jak editor pro vytvá°ení multimediálního kontejneru, tak p°ehráva£ t¥chto soubor·, otestovali na datech, která jsou podobná t¥m, pro které byly tyto dva programy naprogramovány. 4.1 Test editoru Testování p°ehráva£e probíhalo tak, ºe se nejprve musel vytvo°it v Editoru kontejner s multimediálním obsahem. P°i spu²t¥ní Editoru se do p°ipravených seznam· ne£etly: video stopa, audio stop. Titulky se nemohly otestovat, konvertor nem¥l podporu formátu .srt pro titulky. Video a audio stopy byly uloºeny v podporovaných formátech p°ehráva£e. Z takto zadaných vstupních dat se vytvo°il jediný multimediální kontejner, který bylo pot°eba otestovat v p°ehráva£i. 3.3. 4.2 Test p°ehráva£e V p°ehráva£i se multimediální kontejner otev°el a postupn¥ se zkou²ely kombinace s r·znými zvukovými stopami v doprovodu s r·zn¥ zvolenými titulkami. Dále se vyzkou²elo p°ehrávání ve fullscreen módu, které také nevykazolo ºádné problém. Titulky se zobrazujou do systémového výstupu, kde se bohuºel £eské znaky nezobrazovaly a je pot°eba dod¥lat pat°i£nou konverzi do znakové sady výstupu. 4.1 23 24 KAPITOLA 4. TESTOVÁNÍ Obrázek 4.1: P°ehráva£ s výstupem pro titulky Kapitola 5 Záv¥r Kódování videa a audia je dost exaktní záleºitost a jeho následné jeho p°ehrávání je závislé na tom, s jakými knihovnami pro audio a video pracujeme. Vytvo°it si vlastní souborový formát pro tyto dva multimediální streamy vyºaduje znalost problematiky programování a je £asov¥ velmi náro£ná. Tato bakalá°ská práce se v¥nuje problematice synchronizace audia a videa sekvencí pouze z hlediska implementace do ²ir²ího herního softwaru s moºností dal²ího rozvoje této problematiky. Na základ¥ vý²e uvedeného textu dosp¥jeme k záv¥ru ºe je výhodn¥j²í pouºívat jiº hotové knihovny k n¥jakému známému formátu, které ale ne vºdy jsou srozumiteln¥ napsané a dostate£n¥ zdokumentované pro dal²í pouºití v jiných projektech, neº pro které p·vodn¥ byly napsány. V takovém p°ípad¥ je lep²í pouºít projekty, které vyuºívají pot°ebné knihovny a mají lep²í dokumentaci ke zdrojovým kód·m. Co se tý£e kodek·, je vývoj v této oblasti velmi dynamický a je jedním z d·vod· masivního roz²í°ení videa ve vysokém rozli²ení (high-denition). Kodeky, které byly vytvo°eny p°ed n¥kolika lety, nebyly na takto rozm¥rné video v·bec p°ipraveny. Nové kodeky, jakým je nap°íklad x264 a jiné H.264 kodeky, které pracují s lep²ími algoritmy komprese, se rychle rozvíjejí a je doporu£eno sledovat nové verze, které p°ijdou s je²t¥ lep²ím pom¥rem komprese, p°i zachování kvality videa. U kodek· pro zvuk je situace obdobná jako u vý²e zmi¬ovaných kodek· pro video sekvence. Nov¥ vytvá°ené formáty pro zvuk, mají podporu více kanálového zvuku. D°íve pouºívaný formát MP3 pro video se v budoucnu bude pravd¥podobn¥ vztahovat pouze na hudební soubory. U lm· jsou dnes nejpouºívan¥j²ími formáty Dolby Digital, DTS nebo bezztrátový formát PCM. Samotný p°ehráva£, který by m¥l být sou£ástí po£íta£ové hry, spl¬uje poºadavky, které jsme si zadali na za£átku práce. Formát zvolený pro audio by m¥l do budoucna nahradit modern¥j²í, který bude mít podporu pro více kanálové audio, neº je stereo. Prostorový zvuk ur£it¥ p°idá videu lep²í pocitový záºitek pokud jde o po£íta£ové hry, neº pouhý stereo zvuk. Nejen zm¥na kodeku pro zvuk, ale i spousta dal²ích vlastností tohoto p°ehráva£e bude dále vylep²ována s nástupem nových kodek·, formát· a kontejner·. P°ehráva£ by se dále pouºít nejen pro video sekvence v po£íta£ových hrách, ale i jako klasický multimediální p°ehráva£ lm· na po£íta£i, jakým je nap°íklad Media Player Classic. Editor spl¬uje jen základní poºadavky pro vytvo°ení multimediálního kontejneru s moºností dal²ího roz²í°ení. V sou£asné fázi editor umoº¬uje dal²í detailn¥j²í nastavení pro 25 26 KAPITOLA 5. ZÁV R konverzi audia a videa. U jednotlivých vloºených stop je moºnost dal²ích úprav (u videa rozli²ení, nastavení enkodování; u zvuku jeho posunutí v·£i stop¥, zm¥na z prostorového zvuku na stereo atp), pop°ípad¥ n¥jakou jednoduchou editaci £i st°ih. Tento program je alternativou do budoucna, jakým zp·sobem tvo°it program nejenom v oblasti po£íta£ových her se zam¥°ením na synchronizaci obrazu, zvuku a textu. Literatura [1] Iain E. G. Richardson: H.264 and MPEG-4 Video Compression. Wiley, 2003, ISBN 978-0-470-87837-5 [2] Wikipedie: Codec http://en.wikipedia.org/wiki/Codec Ke dni: 11. £ervna 2009 [3] Wikipedie: Container format http://en.wikipedia.org/wiki/Container_format_(digital) Ke dni: 11. £ervna 2009 [4] Wikipedie: Komprese dat http://cs.wikipedia.org/wiki/Komprese_dat Ke dni: 11. £ervna 2009 [5] Matroska.org: Homepage of Matroska http://matroska.org/ Ke dni: 11. £ervna 2009 [6] TVFreak: Není kontejner jako kontejner http://www.tvfreak.cz/art_doc-7336C842E0DDDE25C125727C0059416E.html?lotus=1&Highlight=0, kontejner,jako,kontejner Ke dni: 11. £ervna 2009 [7] TVFreak: Test MPEG-4 kodek· http://www.tvfreak.cz/art_doc-B6A4B465D8C16859C12573C5006E1ED4.html http://www.tvfreak.cz/art_doc-03BE07EC21AA7EB7C12573CA006A0E96.html http://www.tvfreak.cz/art_doc-9A4DA058433AE797C12573F1004EF30D.html Ke dni: 11. £ervna 2009 [8] FFmpeg: An ffmpeg and SDL Tutorial http://www.dranger.com/ffmpeg/ffmpeg.html Ke dni: 11. £ervna 2009 [9] FFMpeg: Homepage of FFMpeg project http://ffmpeg.org/ Ke dni: 11. £ervna 2009 27 28 LITERATURA P°íloha A Uºivatelská dokumentace A.1 Instalace Program Editor ani program P°ehráva£ se nijak neinstalují, jen se zkopírují z adresá°e Bakalarka do libovolného adresá°e na lokálním disku. A.2 Vlastní pouºití Program Editor se spou²tí z následujícího umíst¥ní: ..\Program\Bakalarka\Debug\Editor.exe <nazev souboru> Po spou²t¥ní se nám zobrazí formulá°, kde máme moºnost p°idat video stopy, audio stopy. Po skon£ení výb¥ru si je²t¥ musíme vybrat, kam umístíme výstupní soubor a klikneme na tla£ítko Vytvo°it. Program za£ne enkódovat kontejner do jednotného video formátu x264 a audio formátu mp3. Po skon£ení konverze si m·ºeme kontejner spustit v P°ehráva£i. Podpora formátu titulk· .srt není u externího konvertoru podporovaná, musel by se zvolit jiný externí program, jako je t°eba MkvMerge. P°ehráva£ se spou²tí z p°íkazové °ádky a to tak, ºe za názvem programu se vloºí název souboru, který chceme p°ehrát. ..\Program\Bakalarka\Debug\Player.exe <nazev souboru> Spustí se program a zobrazí se seznam stop, které jsou obsaºeny v souboru. Vyberu poºadované stopy, které chceme p°ehrát. Poslední volba je, zda chceme video p°ehrát ve fullscreenu. Zde je uveden p°íklad: Input #0, matroska, from 'test.mkv': Duration: 00:05:01.39, start: 0.000000, bitrate: N/A Stream #0.0(eng): Video: h264, yuv420p, 1280x720, 23.98 tb(r) Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16 Stream #0.2: Subtitle: 0x0000 Výb¥r stream· pro p°ehrávání, zadávejte po°adové £íslo (0, 1, 2,... ) Vyberte video stopu: 0 Vyberte audio stopu: 1 Vyberte titulky: 2 Zobrazit video ve FULLSCREEN modu? (A/N): a 29 30 PÍLOHA A. UIVATELSKÁ DOKUMENTACE P°íloha B Obsah CD • Program - zde jsou ve²keré zdrojové kódy k vytvá°eným program·m, ve sloºce Bakalarka/Debug jsou spustitelné programy • Videa - pot°ebné ukázky k otestování program· • Dokument - dokumentace ve formátu PDF a zdrojové soubory do TeXu 31
Podobné dokumenty
openMagazin 12/2009
Přibyla možnost správy více uživatelských účtů,
podpora pro nastavení HTTPS proxy a stránka
s informacemi o datové schránce. Podporovanými
systémy jsou zatím Linux, Windows, Mac OS X
a FreeBSD.