Ugrás a főmenüre.
Web 2008.06.30. Internets video

Flash video alapok

Hogyan jön a videó a Flash playerbe? Milyen codec-ek vannak, live videó, média szerverek, pseudo streaming, FLV, h264. Csodák! A végén még a Quicktime-ot is meggyógyítjuk.
Flash video alapok

Video

A videó kódolása háromféle lehet: h263 (Sorenson Sparc), VP6 (On2) vagy h264. A h263 a legrégebbi "kockás YouTube", a VP6 már fasza minőségű, de drága előállítani, a h264 pedig a legjobb, ráadásul open eszközökkel (pl. FFMPEG) készíthető új versenyző. Az első kettő még FLV fájlokban csücsül, a h264 már MP4-ben.

Ha ma valaki h263-ba kódol, akkor nem követi a fejleményeket, ne dolgozz ilyen emberekkel. Sajnos még most is látni h263-al kódolt Flash-es reklámbannereket, hát most szólok, hogy oda kéne figyelni!

Audio

Nellymoser, MP3 vagy AAC lehet. A Nellymoser gagyi, rossz minőséggel és ehhez képest nagy mérettel, az MP3-at nem kell bemutatni, az AAC pedig a legjobb (igen, az MP3-nál is), mind méretben, mind pedig minőségben.

FLV-ben az első kettő, MP4-ben pedig az AAC játszik. A leggyakoribb és sztenderd párosítások tehát (video-audio): h263-Nellymoser, VP6-MP3, h264-AAC.

Live video

A Flash player ismeri a kamerádat és a mikrofonodat, valamint el tudja küldeni egy szervernek a folyamot. Desajnos! Nem áll az összes előbb felsorolt codec a rendelkezésedre, sőt: live videónál jelenleg csak Nellymoser (monó!!!) audió lehet Sorenson h263 videóval, tehát csak a legócskább kombináció érhető el.

Magában a Flash playerben van benne ez a kódoló páros és a szerverhez küldés előtt még a te gépeden kódolja az ügyeket, ezért pörög a procid live videó küldése esetén.

Vannak olyan asztali alkalmazások (pl. Adobe Flash Media Encoder), amelyek már a minőségibb változatokba kódolnak és ugyanúgy a Flash Media Servernek küldik a folyamot. Ezek egyértelműen jobbak, viszont telepíteni kell.

Állítólag a legjobb a Kulabyte (micsoda hülye név), ami élőben kódol majdnem-HD minőséget, ráadásul 2-pass VBR! Durva.

Kis magyarázat: a videókódolás lehet 1 vagy 2 menetes (pass), most ne menjünk a 3 menetes ügyekbe, az amúgy is hülyeség imho. 1 menet esetén egyszer megy végig a videón és bekódolja, pont. Live videónál csak 1 menet volt a Kulabyte megoldásáig.

2 menetesnél először végignézi, megjegyzi a rázós helyeket és a második menetben kódol úgy, hogy az első menetből már tudja mi fog következni és fel tud készülni. Így jobb a minőség, főleg a mozgásoknál. Cserébe persze kábé kétszer lassabb.

Kiszolgálás

Háromféle lehet: progresszív download, streaming és pseudo-streaming. A progresszív download a legegyszerűbb, felteszed valahova a videót és a Flash player letölti. Letöltés közben ha már elegendő adat jött le, akkor elkezdi a lejátszást, nem kell a teljes fájlt megvárni.

A progresszív download nem oldja meg a még nem letöltött részekbe történő ugrást és nem jó a live közvetítésekre sem, ehhez már streaming kell, amit speciális média szerverekkel lehet. Ehhez van ugye az Adobe saját Flash Media Server-e, de az drága, úgyhogy szerencsére vannak már alternatívák.

Ott van a Wowza Media Server (szintén elég drága), az open source Red5 és a szintén open Milenia Grafter. Ezek közül a Milenia a legszimpatikusabb, mert kicsi, könnyű a telepítése és a beállítása, valamint magyar srác terméke.

Pseudo streaming

A pseudo-streaming a harmadik alternatíva, ami ugyan csak egyetlen problémát old meg a progresszív download-hoz képest, de talán ez a leginkább igényelt funkció: pseudo-streaming-gel média szerverek nélkül lehet beletekerni a még nem letöltött részekbe. Ilyenkor a letöltés újraindul a kért résztől.

A pseudo-streaming nem natív Flash funkció, bele kell programozni viszonylag bonyolultabb kóddal, de egy csomó player tudja már, az enyém is. Ugyan nem kell speciális média szerver, de két dolog szükséges:

A videófájlt speciális metaadatokkal kell ellátni, ami tartalmazza a kulcs-frame-ek helyeit (csak kulcs-frame-re lehet állni, "tekerni").

A webszervert is fel kell készíteni, hogy pseudo-streaming beletekerés esetén on-demand módon egy minimális átalakítást végezzen az épp kiszolgált videófájlon.

Szerencsére mindkét feladathoz kiváló open eszközök állnak rendelkezésre, pl. az elsőhöz a Yamdi.

A második megoldására a Lighttpd lett a de-facto sztenderd, mert ahhoz van mod_flv_streaming és mod_h264_streaming modul, tök könnyen le lehet fordítani velük, szimpla kis .c dolgok. A YouTube is pontosan ezt használja.

Qt-faststart

A h264-et is lehet pseudo-streamelni, még Yamdi se kell hozzá, de minden h264-es mp4 fájlon le kell futtatni a qt-faststart szösszenetet, ami a progresszív download-hoz is szükséges.

Magyarázat. Kicsit idióta ez a formátum és a legfontosabb fejléceket a fájl végére teszi, így sima letöltés esetén is csak akkor tudna elindulni a lejátszás, ha teljesen letöltődött a videó. A qt-faststart átteszi előre.

A legtöbb Quicktime-os formátum egyébként ilyen, ezért a qt-faststart minden fájlhoz ajánlott, asztalra is: a vele patkolt videók sokkal gyorsabban töltődnek, mert nem kell végigpörgetni mondjuk egy többszáz megás letorrentelt filmet a lejátszás elkezdéséhez.

6 hozzászólás

  1. idézem 2008.06.30. 00:45
    • cadmagician
    szép írás.

    le vagyok maradva, :) a jövő héten rakom át a képtelenség alatt a kiszolgálást lightyra. mod_flvvel. itthon már megy.

    kérdés: érdemes-e a gagyi videokat is mp4be tolni, áttuszkolni a terhelést a juzerre? joval kisebb lenne a file.... lehet igen...
  2. idézem 2008.06.30. 02:13
    A Nellymoser az nem "gagyi", hanem direkt beszédhangra van optimalizálva, ezért olyanok a paraméterei, amilyenek. És sajnos az ő esetében az itt említett pszeudo streaming nem fog működni.

    Lehet böngészőből is tolni VP6-ot:
    http://www.on2.com/index.php?316. Mi is használjuk (nem volt problémamentes a beépítése), javascriptből lehet bizergálni.

    Üdv,
    Felhő
  3. idézem 2008.06.30. 05:19
    @cadmagician Köszi. Ha már van egy kialakult struktúrád, akkor a gagyi videókkal nem érdemes foglalkozni, jók azok a mostaniban is. Azért Yamdi-t és pseudo-streaming-et érdemes rátolni, mert kényelmes a látogatóid számára. A Yamdi úgyis csak egy-két másodperc per videó.

    A jó minőségű VP6-os FLV-hez képest a h264 nem kisebb, esetleg 1-6%-kal. A gagyi kockás h263 FLV-hez képest viszont legalább kétszeres a különbség, amit vagy a minőségben, vagy pedig a méretben érvényesítesz.

    Ha valami új dolgot készítesz, akkor a h264-gyel való foglalkozás mindenképpen előremutató, mert az FLV szerintem 1-2 év múlva nem lesz pálya.
  4. idézem 2008.06.30. 05:21
    @felhő Szerintem gagyi, mert régi és hasonló méretben már az mp3 is sokkal jobbat ad. Meg ahogy említetted, nem lehet pszeudózni.

    A uStream ilyen drága cuccot használ? Akkor miért nem látszik? Egyébként csalás, mert telepíteni kell, a Flash-t meg nem (jó, igen, de eleve fent van).
  5. idézem 2008.07.01. 01:33
    Profi összefoglaló, tudom, mi is végigrágtuk ezen magunkat.

    On2-nél van olyan SDK opció, hogy a saját Flash alkalmazásodat kiegészíted az ő kódjukkal, és így "telepítés" nélkül is mehet a live stream felvétel VP6-ban.
  6. idézem 2008.07.01. 15:40
    Ok, de egyszerűen ez beszédhangra optimalizált, szóval nem is úgy lett kitalálva, hogy bármi másra jó legyen. A pszeudó sztreaming meg nem az ő hibája.

    "A uStream ilyen drága cuccot használ?": mindent a userekért. :) Bár hosszú távon nálunk is valszeg a H264 lesz a nyerő.

    "Akkor miért nem látszik?": nem kényszeríthetjük a usereket, hogy ebben adjanak, de meg van rá a lehetőségük.

    A telepítés nem akkora gond, mert relatíve kevés embert érint, ráadásul a user "motivált" abban, hogy feltegye, mert szeretne jobb minőségben adni.

    @projektor téma: Jasminnal elég sok szopás volt az VP6-os projektorral, de végülis működött. De nem volt egy leányálom, plusz az tényleg elég borsos volt. :)

    Üdv,
    Felhő
Új hozzászólás
A sortörések automatikusak. Csak az üzenet kitöltése kötelező, a többi mező opcionális. A megadott e-mail címet nem tesszük közzé. Engedélyezett HTML tagek: p, a, strong, em, blockquote, ul, ol, li, dl, dt, dd.

Legutolsó hozzászólások

DJ PLAYER Blue Edition: Gábor: Ja, és természetesen megy iPad-en is, hiszen _minden_ iOS app megy iPad-en.

DJ PLAYER Blue Edition: Gábor: Bug report-okat itt fogadunk: http://djplayer.net/page/bug_report_fixes

DJ PLAYER Blue Edition: hohand: Hello!A dj player mukodik iPad-on is?Tegnap feltettem, wifi-n athuztam ra zeneket,de amikor ranyomtam egy zeneszamra,error-t dobott es valami is!...

Uzsidoboz LED!: zo via Google Reader: vicces dolog, csak nem értem mire való

Uzsidoboz LED!: Gábor: @Benjamin Minek forogjanak? Egy falszínezőnek olyat nem kell tudnia, így is épp elég hatásosak.

iMect means internet, media and other cool things. iMect is a small company near lake Velence, Hungary. We’ve a big footer on every page where you can discover what we do and what happens with us.

Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis cég vagyunk közel a Velencei-tóhoz. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.