• Përshëndetje Vizitor!

    Nëse ju shfaqet ky mesazh do të thotë se ju nuk jeni regjistruar akoma. Edhe pse nuk jeni regjistruar ju arrini të shihni pjesën me të madhe të seksioneve dhe diskutimeve të forumit, por akoma nuk gëzoni të drejten për të marrë pjesë në to dhe në avantazhet e të qënurit anëtar i këtij komuniteti. Ju lutem : REGJISTROHUNI që të dërgoni postime dhe mesazhe në Forum-Al.

    Regjistrohu !

HTTP Streaming – Një guidë praktike

Forum-Al

Aty ku shqiptarët mblidhen
Anëtar
Jan 5, 2010
Postime
560
Pikët
28
Vendndodhja
Forum
Kjo është guida e parë pas më shumë se një muaji dhe më vjen sinqerisht shumë keq për tërë këtë kohë mungesë. Punët, jeta e një kompleksitet gjërash të tjera s’na kanë lejuar të merremi me Feniksin, por shpresoj që në vijim të jemi më aktiv. S’po e zgjas më tepër këtu, se pak pasiv kemi qenë, edhe të mbaj fjalim hyrës na duhet.

Para pak kohësh ndihmova një klient të vinte në punë një server për të bërë stream video. Kisha shumë pak njohuri rreth temës, prandaj mu desh të eksperimentoja (së bashku me klientin) për disa ditë rreth mundësive që ofrohen, teknika optimizimi, kompresim, etj. Këto njohuri që kam përftuar po i ndaj me ju për t’ju lehtësuar punën nëse një ditë do ju duhet të bëni atë që bëra unë. Kuptohet që s’ka asgjë të komplikuar këtu, thjeshtë një guidë praktike për t’ju shkurtuar orë kërkime.

Cfarë është HTTP Streaming?

HTTP Streaming, ose më teknikisht HTTP Server Push, është një teknikë transmetimi të dhënash përmes protokollit HTTP. Shumë shpesh përshkruhet si “shkarkim progresiv” dhe në terma të thjeshta, ky është përshkrimi më i kuptueshëm. Kur dikush sheh një video të transmetuar përmes HTTP Streaming, ajo që ndodh në sfond është shkarkim progresiv. Pjesë të vogla të vidoes shkarkohen, i ofrohen klientit për t’u parë dhe në të njëjtën kohë vijon shkarkimi i pjesëve pasardhëse. Në këtë mënyrë klienti nuk duhet të presë minuta (apo orë për video të gjata) të tëra që shkarkimi të mbarojë për të parë videon, por e sheh në kohë reale me shkarkimin.

Më teknikisht, HTTP Streaming quhet HTTP Server Push. Në pak fjalë, në teknologjinë Push komunikimi niset nga serveri dhe jo nga klienti (si në Pull – shfletimi i një faqeje psh). Në HTTP Server Push, serveri e mban lidhjen me një klient të hapur dhe pret marrjen e udhëzimeve për të ofruar përmbajtje.

HTTP Streaming vs RMTP

Ju thashë më sipër çfarë është HTTP Streaming dhe kjo do jetë teknologjia për të cilën do flas në vazhdim të guidës. Megjithatë, më duhet t’ju them që HTTP Streaming nuk është më e mira që ofrohet. RMTP është shpesh një ide më e mirë, por vjen me anët e saj negative.

RMTP (Real Time Messaging Protocol) është një protokoll i zhvilluar nga Macromedia (tani Adobe) për të transmetuar video dhe audio në internet përmes një serveri dhe një klienti që zotëron Adobe Flash. RMTP është përgjithësisht superior mbi HTTP Streaming për performancën që ofron dhe sigurinë e pronës tuaj intelektuale duke qenë se videot serviren direkt nga serveri dhe bëhen cache direkt atje, jo tek klienti. Si çdo medalje, edhe ajo e RMTP-së ka kahun tjetër – atë negativ dhe çmimi i lartë është anë negative për pjesën më të madhe. Po ju tregoj alternativat që ofrohen për RMTP:


  • Adobe Flash Media Server. Kjo është zgjidhja më e mirë për ata që kanë para të harxhojnë. FMS vjen me çmime nga $1.000 (e konfirmuar) për paketën bazë dhe shkon deri në $40.000 (e pa komfirmuar) për paketën enterprise.
  • WOWZA. Kjo më duket si zgjidhje e mirë për buxhete të vogla apo për plane jo shumë afat-gjatë. Ka një paketë falas për zhvillues (shumë e limituar), ndërsa paketat e tjera nisin me $65/muaj/server. Ofron gjithashtu suport për një sërë platformash si iOS (iPod, iPhone, iPad), Android, Silverlight, Blackberry, Quicktime, etj. Jo se me platforma të tjera (qofshin RMTP apo HTTP Streaming) kjo është e vështirë të arrihet, por gjithmonë është mirë kur e ke të përfshirë.
  • Red5. Red5 është e vetmja alternativë Open Source dhe është i shkruar në Java. Për fat të keq, si shumë software Open Source, dokumentimi është skandaloz dhe për t’a instaluar duhet të dini shumë mirë çfarë bëni. Nëse ja arrini, do keni një server RMTP falas (paratë e serverit ku do hostohet sigurisht s’ju a fal njeri
    ).
Serverat RMTP i njoh shumë pak, prandaj më falni nëse kam dhënë ndonjë të dhënë të gabuar më sipër. Thjeshtë doja t’ju jepja një ide rreth alternativave dhe çmimeve. Në vazhdim do fokusohemi tek HTTP Streaming.

Për ta mbyllur këtë seksion, nëse nuk ju duhet një server streaming që performon maksimalisht dhe nuk ju bëhet vonë se ju shkarkojnë videot, atëherë me HTTP Streaming do keni një server për të cilin paguani vetëm hardware-in dhe trafikun. A thua se këto të fundit nuk janë mjaft të shtrenjta, edhe të paguajmë për software të dedikuar na duhet…

Resurset e Nevojshme

Në fakt nuk është se ju duhen shumë gjëra. Software-et që do përdorim për të konvertuar dhe luajtur videot janë falas. Të tilla janë edhe modulet që do instalojmë për Apache dhe lighthttpd. Por, pavarësisht se do përdorim software-e të lira, hostimi nuk është falas.

Shkarkimi progresiv nuk është proçes i lehtë për serverin. Imagjinoni tani të keni një faqe ku mesatarisht 50 persona shohin video në të njëjtën kohë. Nuk është aspak e lehtë për serverin! Prandaj nëse mendoni të ofroni streaming në një host shared apo VPS, thjeshtë harrojeni. VPS-të dhe hostet shared janë kompjutera që i ndajnë proçeset në shumë klientë dhe si rrjedhim keni në përdorim resurse shumë të limituara. Nga kahu tjetër, një server i dedikuar është një kompjuter (server dmth) që punon vetëm për ju dhe resurset nuk ndahen me askënd tjetër. Por as një server i dedikuar i lirë (psh me CPU Intel Atom, Celeron apo Pentium 4) nuk bën shumë punë sepse suporton pak proçese intensive në të njëjtën kohë. Flas këtu nëse keni ndërmend të ofroni video për masën, jo vetëm për vete dhe 2-3 shokë tuajët.

Përveç performancës, duhet të keni akses (ssh) në server për të instaluar module për Apache ose lighthttpd. Do të përdorim 2 module (do ju flas më vonë për to) respektivisht për 2 formate skedarësh: FLV dhe MP4 (H.264). Këto module duhen instaluar dhe duhet modifikuar konfigurimi i Apache ose lighthttpd për t’i aktivizuar ato. Në servera të dedikuar dhe VPS kjo s’duhet të jetë problem.

Një tjetër detaj i rëndësishëm në varësi të asaj që doni të ofroni është konvertimi dhe proçesimi i videove nga serveri. Nëse doni të ofroni një faqe të tipit YouTube, ku vizitorët kanë mundësi të ngarkojnë video, duhet t’i konvertoni videot e ngarkuara. Kjo arrihet lehtë me ffmpeg, por proçesi është goxha intensiv dhe kam përshtypjen se është synim i largët për buxhetet e shumë personave.

Në projektin që ju fola në hyrje të guidës, po përdorim një server nga ServerLoft (thnx Jonit për sugjerimin) dhe jemi [deri tani] tmerrësisht të kënaqur me çmimin dhe performancën. Serverat atje janë të pa menaxhuar për software dhe në krah të instalimit fillestar të sistemit operativ, jeni tërësisht të vetëm. I këshilloj ServerLoft tek ata persona që kanë eksperiencë në menaxhim serverash apo që njohin dikë të tillë (si unë – thnx Egi). Të tjerët të hedhin sytë diku tjetër.

Formati FLV

FLV është formati ndoshta më i njohur për të gjithë dhe ka qenë standart i streaming për shumë vite. Praktikisht është një format mbajtës për video që transmetohen në web dhe lexohen nga Adobe Flash. Videot zakonisht enkodohen me kodekët VP6 dhe Sorenson Spark.

Që të bësh stream një FLV, nuk mjafton thjeshtë ta konvertosh dhe t’a ngarkosh në server, fatkeqësisht. Duhen injektuar në çdo video disa të dhëna që quhen Metadata, të cilat shërbejnë për të informuar video player-at se çfarë formati është, madhësia, bitrate, vendodhja e keyframes, etj. Nga testet e mia, nuk gjeta një konvertues që i bën të gjitha automatikisht, prandaj m’u desh të përdorja software të posaçme. Për Windows mund të përdorni FLVMDI (FLV MetaData Injector – i limituar për video FLV deri në 700 MB), ndërsa për Linux është FLVTool2, një injektues i mirë dhe pa ndonjë limit në madhësi. Kini kujdes me këtë të fundit nëse i kryeni proçeset në server sepse përdor shumë resurse – ruan videon në memorje, i vendos metadatat dhe më pas e shkruan në skedarin origjinal.

Si ç’e mësova duke gabuar, videot FLV shumë të mëdha (disa GB) kanë probleme të lexohen nga video player-at. Përveç se krijojnë probleme me lexime të ngadalta apo bllokim i videove pa arsye, nuk i instruktojnë si ç’duhet player-at duke i dhënë buffer të gabuar. Si rrjedhim, m’u desh të merrem një ditë të tërë me testime dhe lexime pse një video e madhe nuk tregonte sa ishte ngaruar. Përfundimisht hoqa dorë!

Si c’thashë më sipër, për video të vogla FLV-të janë shumë në rregull. Natyra e kompresimit është pak antike dhe nëse nuk zgjidhni bitrate-in e duhur, mund të përfundoni me video shumë të mëdha, ose të vogla por me cilësi skandaloze. Sipas testeve që bëmë, bitrate mbi 2500 kbps rezulton në video 40-60% më të mëdha se ekuivalenti MP4 dhe çuditërisht me artifakte më të dallueshme. Edhe për bitrate më të ulta madhësia duhet të vlejë, por besoj në raporte më të vogla. Sidoqoftë, tentoni të përdorni bitrate rreth 1000 kbps, që do ju prodhojë cilësi dhe madhësi të pranueshme.

Formati MP4 (H.264)

Për këtë format do flas me pak më tepër entuziazëm, sepse e shoh si një alternativë shumë më të mirë se FLV. E mund në çdo sektor përveç suportit. Fatkeqësisht Adobe Flash suporton MP4 vetëm nga versioni 9.115 e tutje. E mira këtu është se Flash rifreskohet lehtë nga vizitorët, por gjithashtu videot H.264 mund të luhen nga tagu “video” i HTML5. Jo të gjithë kanë shfletues modernë, por të paktën keni në dorë një alternativë.

H.264 është formati standart në shumë ambjente, jo vetëm në atë të webit. YouTube e përdor, disqet Blue-Ray dhe transmetimet televizive po kalojnë në HD përmes H.264. Pra ndryshe nga FLV, H.264 është ideuar të përdoret jo vetëm në web dhe si i tillë, mund të suportojë rezolucione qiellore. YouTube ka testuar disa video në H.264 me rezolucion 4096 x 2304 që mund të shihen nga kushdo. Hidhini një sy! Cilësia është jashtë kësaj bote, por e tillë është edhe ngarkesa në kompjuter dhe linjën e internetit. Në të ardhmen do të shohim të tilla video për mëngjes


Ashtu si metadatat e FLV-ve, edhe H.264 kërkon disa të dhëna për të instruktuar player-at dhe për t’u lexuar si duhet. Pjesa e madhe e konvertuesëve i vendosin këto të dhëna në fund të videos dhe duhen spostuar në fillim që të jenë të vlefshme. Ffmpeg është një nga këto! Për fat të mirë, fare rastësisht zbulova që një program i lirë – të cilin e kisha instaluar prej kohësh për konvertime videosh – e bën këtë automatikisht. Programi quhet Handbrake dhe vjen për Mac, Windows dhe Linux. Më thjeshtë se kaq s’ka ku të shkojë. Më poshtë mund të shihni një pamje të programit në Mac (në platforma të tjera mund të ndryshojë disi).

Pamje nga Handbrake


Si ç’e shihni në foton më lart, programi lejon të vendoset cilësia përmes disa mënyrave: Target Size (Madhësia e dëshiruar), Average Bitrate (bitrate fikse) dhe Constant Quality (Cilësi Konstante me përqindje në raport me origjinalin). Unë do i lija pa përdoruar “Target Size” dhe “Constant Quality” sepse nuk ke asnjë kontrolli mbi cilësinë. Ndërsa duke i vendosur një bitrate të caktuar, e parashikon shumë mirë çfarë cilësie do të ketë video. Sa më i lartë bitrate, aq më cilësore video, duke supozuar që origjinali është gjithashtu cilësor.

Në testet tona, videot origjinale ishin HD 1080 me bitrate-e çmendurisht të larta. Pra kishim burim të pastër me cilësi shumë të lartë, e si rrjedhim mund të testonim konvertime në disa bitrate-e. Synimi ishte të prodhonim video cilësore në formatin HD 720. Testuam disa bitrate nga 2000-4000 dhe dolëm në përfundimin se 2500 është ideal për raportin cilësi/madhësi. Sidoqoftë, kini parasysh që prodhohen skedarë që shkojnë diçka më pak se 1GB për orë video dhe cilësi e tillë mund të mos jetë synimi i të gjithëve. Me 1000-1500 do ja hidhni shumë mirë.

Pyetja që besoj po i bëni vetes është: Kë të përdorim, FLV apo MP4? Nuk ka një përgjigje definitive sepse varet nga kushtet. FLV mund të jetë zgjidhje e mirë për video të vogla sepse nuk duhet që vizitori të ketë Adobe Flash 9.115+ si për H.264. Ndërsa H.264 është zgjidhja logjike për video të mëdha (që shkojnë mbi 20-30 min) sepse përfitohet shumë në madhësi (trafiku kushton!) dhe cilësi (më pak artifakte). Personalisht, do përdorja H.264 në çdo lloj projekti sepse është teknologji moderne dhe e suportuar në shumë meduime.

Pseudo-streaming

S’kemi përfunduar akoma! Deri tani ju kam treguar çfarë është HTTP Streaming dhe 2 formatet tipike që përdoren në stream, por eksperienca që mund t’i ofrojmë vizitorëve nuk mbaron me kaq. Me kaq sa kemi bërë i ofrojmë vizitorëve video që shkarkohen në mënyrë progresive dhe kjo është shumë në rregull për video që nuk zgjasin më shumë se 1 minutë. Po nëse ofrojmë video të gjata dhe duam t’i japim mundësinë vizitorëve të shkojnë në çfarëdo pjese të videos që duan? Këtu hyn në lojë serveri web dhe module (1 modul për secilin format) që lejojnë që kjo të ndodhë.

Nëse nuk e keni kuptuar akoma për çfarë po flas, hapni një video në YouTube dhe provoni të shkoni diku nga mesi. Video do ngarkohet dhe do luajë që nga pjesa ku keni zgjedhur ju. Gjë e mirë apo ajo? Por nuk bëhet me magji; duhet pak punë


Kalimi i videos ne YouTube


Më parë kjo mundësi ka qenë e limituar vetëm në serverat RMTP dhe ata që përdornin HTTP Streaming (YouTube një nga ne) ishin pa fat. Por zhvilluesit janë goxha para nesh dhe limitet janë vetëm në imagjinatë. Tashmë kjo është lehtësisht e arritshme!

Së pari më duhet t’ju udhëzoj pak për serverin web. Në këtë ambient ofrohen 2 alternativa nga të cilat mund të zgjidhni: apache dhe lighthttpd. Apache-in besoj e njihni të gjithë si më popullori dhe “A” tek LAMP (Linux, Apache, MySQL, Perl/Python/PHP). Lighthttpd është një server gjithashtu popullor, i cili është ndërtuar si një alternativë e lehtë për sisteme ku shpejtësia është kritike dhe për të zgjidhur problemin C10k. Për një ambjent ku serviren video, lighthttpd është ide goxha e mirë sepse ka më pak ngarkesë (overhead) se Apache. Nëse nuk mendoni se serveri juaj nuk do e ketë problem shpejtësinë, mendojeni edhe një herë!

Për formatin FLV

Lighthttpd vjen me modulin mod_flv_streaming dhe mjafton të aktivizohet. Ndiqni hapat e treguara në seksionin “7. Configuring Lighthttpd” të kësaj guide në HowtoForge.

Për Apache duhet fare pak më tepër punë, sepse nuk ka asgjë të ngjashme të instaluar. Moduli që na duhet është mod_flvx dhe është ekuivalenti i mod_flv_streaming për lighthttpd. Ndiqni hapat në postimin e parë të kësaj teme dhe jam i sigurt që s’do të keni fare probleme. Nëse e bëra unë, mund t’a bëjë kushdo


Për formatin H.264

Për H.264 puna që do bëjmë është shumë e ngjashme si ajo për FLV-të. Në këtë rast duhet instaluar mod_h264_streaming si për Apache dhe lighthttpd, por s’është aspak e komplikuar. Hidhini një sy kësaj guide për lighthttpd dhe kësaj guide për Apache.

Dokumentimi për të bërë instalimet/konfigurimet e mësipërme besoj është i mjaftueshëm, duke konsideruar që shkalla e vështirësisë është minimale. Thjeshtë ndiqni hapat dhe sigurohuni që modulet janë ngarkuar para se t’i testoni videot në player (seksioni tjetër), pëndryshe do keni dhimbje koke pa fund. Nëse nuk ja dilni vetë dhe keni një server të menaxhuar, mund t’i kërkoni suportit t’i instalojë.

Video Player-i

Që videot të shihen nga vizitorët, duhen transmetuar me diçka. Thjeshtë një server dhe ndonjë modul nuk e bëjnë punën! Këtu hyn në lojë një video player në Flash që merr videon dhe e shfaq përmes shkarkimit progresiv. Kini parasysh që tagu “video” në HTML5 e bën punën, por është teknologji e re dhe e pa suportuar në shfletuesit e vjetër. Unë këtu do të flas për luajtjen e videos me Adobe Flash; për alternativën HTML5 keni mjaft resurse online.

Në treg ka player-a në Flash pa fund, duke filluar nga ata të lirët apo open source, deri në ata që kushtojnë qindra dollarë. Unë kam shënjestruar dy nga player-at më popullor në planet: Flowplayer dhe JW Player. Të dy vijnë me të njëjtat shije dhe 2 tipe licenash: falas dhe komerciale. Licensa falas supozohet të përdoret nga faqe që nuk marrin të ardhura, ndërsa ajo komerciale kuptohet, për faqe ku fitohet. Sidoqoftë, licensa komerciale kushton më pak se $100/faqe dhe për këdo nuk është shifër e lartë.

Po e nis fillimisht me JW Player! Eksperienca ime me të është e mirë dhe e kam përdorur në shumë projekte, por vetëm një herë për të luajtur video shumë të mëdha në një faqe të dedikuar për streaming. Në këtë të fundit nuk kishte performancën që prisja dhe si rrjedhim kalova në Flowplayer. Megjithatë, për shumë njerëz mund të jetë zgjidhja logjike sepse ka suport të mirë, shtojca, stile, etj.

Flowplayer është thjeshtë fantastik për mendimin tim. Mund të personalizohet në çfarëdo mënyre dhe ka disa shtojca për gjërat që mua më duhen (kuptohet dhe shumë më tepër). Më e rëndësishmja është që ka performancë super të lartë edhe me video që shkojnë në disa GB. Unë zgjodha këtë për projektin streaming dhe e këshilloj. Më poshtë do ju tregoj konfigurimin që unë i kam bërë për të luajtur një video H.264 dhe që suporton Pseudo-streaming.

Video
Me kodin më sipër (të komentuar mirë besoj) do të keni një video player që i plotëson të gjitha kushtet. Thjeshtë shkarkoni Flowplayer dhe jQuery (nuk është i domosdoshëm, por në rastin tim më ndohmoi t’i shkruaja disa rreshta më shkurt), vendosini në direktoritë e duhura, bëni ndryshime në kod nëse direktoritë nuk janë si i kam bërë unë dhe ja hodhët.

Përfundimi

Jam i qartë që guida nuk i shërben kujtdo, sepse streaming është një sektor specifik të cilin shumë mund mos t’a prekin ndonjëherë. Por shpresoj t’ju kem dhënë një lexim interesant dhe një ide se si streaming funksionon. Ata që janë në prag të një projekti të tillë besoj do marrin disa informacione të vlefshme.

Në asnjë mënyrë leximi nuk ndalon këtu. T’i japësh vizitorëve munësinë për të parë video është temë komplekse që kërkon specializim të veçantë. Nëse tema shkon edhe tek konvertimi dhe proçesimi i videove të hedhura nga vizitorët, atëherë bëhet edhe më komplekse. Janë shumë gjëra që duhet t’i keni parasysh në çdo rast, duke nisur nga infrastruktura. Kjo guidë tenton thjeshtë t’ju japë një përmbledhje informacionesh për t’ju nisur.

Nëse po mendoni të bëni një faqe të ngjashme me YouTube (kuptohet shumë më e vogël se aq), atëherë hidhini një sy këtij artikulli. Është një lexim vërtetë interesant që shpjegon me shumë pak fjalë infrastrukturën e YouTube dhe si i kanë zgjidhur problemet.

Duke mos qenë ekspert në streaming, servera dhe Linux, mund të ketë gjëra që më kanë shpëtuar apo i kam konceptuar gabim. Jeni të lirë të sugjeroni çdo gjë që e shihni të çuditshme. Pyetjet dhe komentet si gjithmonë janë të mirëpritura.

Mësim të mbarë.

HTTP Streaming – Një guidë praktike është një postim nga: Feniksi.Com - Thesari i Njohurive



Forum-Al.com
Aty ku shqiptarët mblidhen!
 
Top