Dabar labai populiaru internete talpinti video informaciją. Dažniausiai tai daroma pasitelkus Adobe Video () formatą. Beveik bet kas šiuo metu gali pasinaudoti YouTube.com ar VideoGaga.lt ar bet kokiu panašiu tinklalapiu. Pažengęs vartotojas gali ir pats paversti bet kokį video failą į formatą, patalpinti jį savo tinklalapyje bei leisti parsisiųsti ar parodyti per bet kokį leistuvą (pvz.: FlowPlayer). Bet ar galėsime mes pasinaudoti visomis galimybėmis, kurias suteikia šiuolaikiniai leistuvai?

Kas liečia mažus failus, kuriuos galime greitai parsisiųsti ir peržiūrėti, berods, nėra jokių problemų. Leistuvas juos greitai parsisiunčia ir leidžia peržiūrėti, persukti į bet kurią vietą. Todėl čia galima naudoti HTTP protokolą.

Bet jeigu failas didelis, kad peržiūrėti paskutines 5 minutes nejaugi mums reikia siųstis visas prieš jas esančias 45 minutes ir tuos visus megabaitus? Pasirodo ne! Tereikia įvykdyti du reikalavimus: privalo savyje turėti meta-informaciją apie raktinius kadrus (angl. keyframes), o serveris turi palaikyti srautus per HTTP, na leistuvas savaime aišku irgi privalo tai palaikyti. Meta-informaciją apie raktinius kadrus gali sugeneruoti Jūsų programinė įranga arba specialus įrankis (pavyzdžiui, FLV MetaData Injector). O kas liečia HTTP srautą, čia teks pasinaudoti Lighttpd su įskiepiu - mod_flv_streaming arba Jūsų sukurto kodo gabalu (tinka PHP, Perl, Ruby, Python ar bet kokia kita programavimo kalba, kurią galite paleisti serverio pusėje, PHP pavyzdys).

Pastaba: srautas per HTTP - nėra nieko nuostabaus ar sudėtingo. Užkrovus failą leistuvas leidžia persukti ne tik užkrautą failo dalį, bet ir persukti į neužkrautą dalį. Vartotojui progreso juostoje spragtelėjus į neužkrautą dalį, leistuvas, pasinaudodamas meta-informacija apie raktinius kadrus, pasirenka arčiausią kadrą ir per HTTP nusiunčia užklausą į serverį su tikslia to kadro vieta faile baitais. Tik jis pasinaudoja standartine GET užklausa į failą, pavyzdžiui, http://www.example.com/video/chemijos_paskaita_3.?start=458795, kur 458795 yra tiksli raktinio kadro padėtis baitais faile chemijos_paskaita_3.. Jei jūs naudojate Lighttpd, jo įskiepis pradeda siųsti jums failą chemijos_paskaita_3. tikslai nuo to baito (na, priekyje prideda keletą sisteminių baitų). O jei Jūs naudosite PHP, tai užklausa būtų: http://www.example.com/video/mystream.php/chemijos_paskaita_3.?start=458795 ir visus veiksmus jau atliktų PHP skriptas. O aš visada maniau, kad jie panaudos Range Retrieval Requests iš HTTP/1.1 arba kažką stebuklingesnio.

Viskas gražu ir daugelį vartotojų šie dalykai galėtų patenkinti. Bet aš norėjau kažko stebuklingesnio. Ir radau!

Specialiai Adobe sukurtas protokolas, skirtas srautams internete - (Real Time Messaging Protocol). Kodėl? Na, FlowPlayer galima nurodyti, kad jis grotų ne visą failą, o tam tikrą dalį sekundėmis (pavyzdžiui, jei klipas yra 5 minučių, o jums reikia pagroti tik nuo 60 sekundės iki 150 sekundės, be jums tai vargiai pavyks) bei prasukti video nuspaudus pauzės mygtuką. Na, gal kiti leistuvai tai ir gali, bet ne aš rinkausi leistuvą.

Sprendimų, kurie pilnai realizuoja galimybes nėra daug: mokami Adobe Media Server ir Wowza Media Server (komerciniai produktai, uždaras kodas) bei nemokamas Red5 (atviro kodo kalba sukurtas produktas). Todėl man teko garbė susipažinti artimiau su sprendimu, jo galimybėmis (ne tik ta dalimi, kur atsako už srautus), konfigūravimu, diegimu ir trupučiu jo galimybių praplėtimų.

Nekreipiant dėmesio į tai, kad vis dar neturi 1.0.0 versijos, tikėdamas, kad jis bus geras produktas (bei atsižvelgdamas į kitas aplinkybes), aš jį įdiegiau ir pradėjau aiškintis, kaip jis konfigūruojamas. Kaip ir bet kuriame atvirojo kodo projekte iki 1.0.0 versijos nėra geros dokumentacijos, konfigūravimo nurodymų ar kitos naudingos informacijos. Bet kodo ir konfigūracinių failų (XML formatas) komentarai leidžia visai laisvai operuoti tiek kodu, tiek konfigūraciniais failais. Todėl jau per kelias valandas aš galėjau išvysti filmuką. Tik buvau nustebintas, kad negalima nurodyti atskiro katalogo konfigūravimo failuose, iš kurio bus rodomi failai, bet šią informaciją radau internete. O po to jau tapo viskas aišku. Nors ir nesu programuotojas ir su esu programavęs tik keletą valandų, man be problemų pavyko parašyti kodą ( klases pagal API), kuris leido jau iš konfigūracinio failo pasiimti katalogo su video nustatymus, performuoti užklausą failui pasiekti (labai įmantrų būdą saugoti failus sugalvojo projekto kūrėjai, kuriam buvo pritaikomas šis sprendimas, nors būdas pasiteisino), pakeisti failo meta-informacijos podėlio (angl. cache) katalogą bei priversti suprasti failus be . plėtinio. Be to, viską vėliau sukonfigūruoti po Debian platforma su žemesnės versijos Development Kit (nepamirškite, kad patirties programuojant kalba teturiu keletą valandų) pavyko per 3 įtemptas darbo dienas ir pavyko tiesiog puikiai. Tik dėl to, kad kodas yra labai gerai dokumentuotas, naudoja vieną standartą ir yra labai aiškiai parašytas, o programos struktūra yra labai gerai apgalvota ir pritaikyta išplėtimams (na ir dėl to, kad aš esu labai geras programuotojas ir nebijau naujų technologijų bei iššūkių).

Pabaigai: Dabar Jūs susipažinote, kaip yra daromas video srautas naršytojui per HTTP be ir su prasukimo galimybėmis bei pasinaudojus . Nieko sudėtingo tame nėra - tereikia pasirinkti technologiją (serverį ir leistuvą) ir siekti užsibrėžto tikslo.

Panašūs straipsniai


““Įvaldom” FLV formato pateikimą” komentarų: 1

  1. elt.lt » Blog Archive » Apžvalga. Šiandien aš skaičiau… #22

    […] bOOm pamokins kaip nemokamai atsisiųsti muzikos… o Pixel.lt dalinasi FLV vaizdo medžiagos formato valdymo paslaptimis. […]

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.