Transliavimas internetu per Nginx-RTMP: keli paruošti receptai.

Tiesioginė vaizdo transliacija yra tikrai didelis dalykas. Kas gali būti lengviau nei akimirksniu paleisti tiesioginės transliacijos programą išmaniajame telefone? Jis tiesiogiai transliuos jus arba aplink jus vykstantį įvykį... Ir kol jūs transliuojate vaizdo įrašą, jūsų draugai žiūri jį iš savo mobiliųjų įrenginių. Ir viskas, ko jums reikia, kad tai įvyktų, yra fotoaparatas ir integruotas mikrofonas jūsų išmaniajame telefone... Argi ne smagu?

Tiesioginė transliacija suteikė kitokį būdą, kuriuo vartotojai gali susisiekti su draugais, o prekės ženklai gali sudominti ir susisiekti su savo klientais.

Tačiau kaip jūsų įmonė ar pradedančioji įmonė gali lengvai įdiegti tiesioginę transliaciją „Android“, neskirdama tam daug išteklių ir kūrėjų darbo valandų? Kokios technologijos slypi už tiesioginės transliacijos ir paverčia ją realia?

Pasigilinkime į temą, kad rastume išsamius atsakymus į šiuos klausimus, taip pat sužinotume daugiau apie paruoštus naudoti sprendimus, kurie palengvina ir pagreitina tiesioginio vaizdo transliacijos funkcijos įtraukimo į programą procesą.

Kokios yra tiesioginės transliacijos ypatybės

Skirtingai nuo vaizdo įrašo pagal pareikalavimą formato, pagal kurį vartotojas gali pasirinkti ir žiūrėti vaizdo įrašus bet kuriuo metu, tiesioginės transliacijos vaizdo įrašai yra susieti su konkrečiu laiko momentu ir rodomi įrašant.

Ir štai kaip atrodo tiesioginės transliacijos procesas. Vaizdo įrašas ir garsas perduodami pranešimais, kuriais keičiasi vaizdo grotuvas ir medijos serveris. Vaizdo grotuvas pirmiausia prisijungia prie medijos serverio. Serveris perkelia dalį vaizdo įrašo į grotuvą. Šis vaizdo įrašo fragmentas atitinka esamą grojimo laiką. Kelių sekundžių buferis užtikrina vaizdo įrašų atkūrimą be vėlavimų ar pertrūkių. Šis procesas nuolat kartojamas visą žiniatinklio transliacijos laiką.

Tačiau tiesioginis srautas niekada neperkelia medijos failų kaip visumos (taip taupomas pralaidumas). Vietoj to, jis įgalinamas per medijos serverius, atsakingus už skaitmeninio vaizdo, garso ir duomenų perdavimą ir srautinį perdavimą. Tiesioginė transliacija užtikrina šaltinio vaizdo įrašų failų apsaugą, nes jų negalima nukopijuoti į žiūrinčiojo kompiuterį. Naudojant papildomą programinę įrangą, tiesioginė transliacija taip pat palaiko tiesioginį pokalbį ir klausimus bei atsakymus.

Neegzistuoja tik vienas žiniasklaidos duomenų perdavimo formatas. Vietoj to, galite pasirinkti vienas kuri geriausiai atitinka jūsų techninius poreikius.

Kokios vaizdo transliacijos technologijos egzistuoja?

Yra keli būdai, kaip įgalinti tiesioginę transliaciją programoje. Toliau trumpai apžvelgsime esamas technologijas. Tokiu būdu galėsite atskirti pagrindines jų funkcijas ir turinio tipą, kurį jie geriausiai tinka pateikti:

  • RTMP protokolas

Real-Time Messaging Protocol (arba tiesiog RTMP) buvo sukurtas didelio našumo vaizdo ir garso srautų bei realaus laiko duomenų pranešimų perdavimui internete. Srautinis perdavimas realiuoju laiku įgalinamas užmezgus dvipusį ryšį tarp „Flash“ serverio ir „Flash“ grotuvo.

„Adobe Flash Player“ yra labiausiai paplitęs RTMP klientas, palaikantis vaizdo ir garso atkūrimą. Šiuo metu ji yra prieinama kaip atvirojo kodo specifikacija, skirta kurti produktus ir technologijas, teikiančias vaizdo srautus AMF, SWF, FLV ir F4V formatais (suderinamas su „Adobe Flash Player“ formatais) ir garsą AAC ir MP3 formatu.

  • HTTP pagrindu veikiantys srautinio perdavimo protokolai (HLS ir HDS)

HLS formatas yra pagrįstas MPEG2-TS ir yra susijęs su srautiniu perdavimu į iOS įrenginius. Tai nėra HTML5 dalis. HLS sujungia kelis srautus su metaduomenų informacija ir lengvai perjungia skirtingus medijos duomenis.

HDS vaizdo įrašams naudoja Adobe formatą ir pateikia MPEG-4 failų fragmentus. MPEG formatas leidžia saugoti metaduomenis ir garso bei vaizdo srautus įvairiose vietose. HTTP dinaminis srautas yra patogi technologija didelėms medijos bibliotekoms. Tai padeda sumažinti pralaidumą, taupo akumuliatoriaus veikimo laiką ir suteikia geresnę vartotojo patirtį, palyginti su HLS.

  • Silverlight srautinio perdavimo protokolas

Šis vaizdo įrašų srautinio perdavimo formatas naudojamas įvairioms interneto programoms, tokioms kaip „Adobe Flash“, ir filmams rodyti. Nepaisant to, kad „Microsoft Silverlight“ nebeveikia „Chrome“ naršyklėje, ji pasiekiama „Internet Explorer“ ir „Mozilla Firefox“.

  • MPEG-DASH

MPEG-DASH užtikrina aukštos kokybės tiesioginį ir pagal poreikį vaizdo transliaciją, skirtą medijai, gaunamai iš HTTP serverių. Formatas leidžia pridėti skelbimų tarp vaizdo įrašų segmentų abiejų tipų srautiniam perdavimui. Medijos turinys užšifruojamas vieną kartą ir pristatomas į kliento kompiuterį naudojant skirtingas DRM (skaitmeninių teisių valdymo) schemas.

  • Progresyvus atsisiuntimo srautas

Naudojant laipsnišką atsisiuntimą, medijos turinys per HTTP protokolą perkeliamas iš serverio į kliento kompiuterį. Norint jį žiūrėti, nereikia jokio srautinio perdavimo serverio, kad būtų galima prieglobti failus arba atsisiųsti medijos failą. Laipsniškas atsisiuntimas leidžia atkurti vaizdo įrašą prieš visiškai atsisiunčiant.

Didėjantis 4K vaizdo įrašas, dideli vartotojų lūkesčiai dėl kokybės standartų ir sklandaus naudojimo, naujų efektyvių platformų kūrimas ir spartesnis interneto ryšys sugriežtina reikalavimus vaizdo transliacijos formatams. Nepriklausomai nuo turimų technologijų įvairovės, daugiausia dėmesio skirsime RTMP kaip vienam iš labiausiai paplitusių ir mėgstamiausių kūrėjų srautinio perdavimo protokolų.

Taigi, kas yra RTMP protokolas ir kodėl jis toks geras

„Macromedia“ (šiuo metu „Adobe“) sukurtas Real-Time Messaging Protocol užtikrina adaptyvų bitų srautą (ABS). Pasikeitus pralaidumui, vaizdo kokybė automatiškai prisitaiko prie jo. RTMP yra pagrįstas perdavimo valdymo protokolu (TCP), kuris teikia pirmenybę stabilaus ryšio ir mažos delsos palaikymui. Atsižvelgiant į turinio tipą, RTMP leidžia perduoti tiek iš anksto įrašytus, tiek tiesioginius medijos duomenis ir tekstinę informaciją.

Be to, RTMP gali būti naudojamas ne tik mobiliajam srautiniam perdavimui. RTMP serveris gali siųsti medijos duomenis tiek į žiniatinklio programas, tiek į mobiliuosius įrenginius.

Jis dažniausiai giriamas už šiuos privalumus:

  • Jis yra specialiai optimizuotas tiesioginiam srautui

Didžiausia RTMP teikiama nauda yra vaizdo ir garso duomenų perdavimo optimizavimas. Srautiniam perdavimui jis naudoja išskirtinį 1935 prievadą, kuris tinka mažos delsos turinio perdavimui, kuris yra gyvybiškai svarbus tiesioginiam srautiniam perdavimui ir nereikalauja buferio.

  • Tai brandi technologija

RTMP buvo naudojamas tiesioginiam srautui daugiau nei 10 metų. Kūrėjui RTMP serverio nustatymas yra lengva užduotis. Vartotojui vaizdo transliacija vienu metu įgalinama skirtingais formatais. Taip pat taikomos saugos funkcijos, pvz., žaidėjo patvirtinimas.

  • Galite žiūrėti bet kurią transliuojamo vaizdo įrašo dalį

Visi RTMP serveriai leidžia įrašyti gaunamus medijos srautus ir suteikia galimybę rodyti vaizdo įrašus nuo pat pradžių. Naudotojas gali praleisti dalis vaizdo įrašo iki dabartinės transliacijos momento. Ši funkcija ypač naudinga ilgiems vaizdo įrašams (daugiau nei 10 minučių), todėl galima lengvai perjungti į bet kurią jo dalį.

  • Tai populiariausias realaus laiko transliacijos protokolas

RTMP yra nuo platformos nepriklausomas protokolas, kuriam nereikia aparatinės įrangos priklausomybių ir kuris yra suderinamas su Windows, Mac, Linux, Android, iOS ir Windows Mobile. Jis taip pat plačiai naudojamas žaidimų įrenginiuose, tokiuose kaip „PlayStation“, „Xbox One“ ir „PS Vita“.

Kaip veikia RTMP

Paprastais žodžiais tariant, RTMP srautinis perdavimas susideda iš šių trijų objektų:

  • Klientas, kuris sukuria medijos srautą ir transliuoja RTMP protokolu į serverį. Kaip klientų „leidėjai“, galite naudoti daugybę programų įvairiose platformose, pvz., FFMPEG pagrįstus grotuvus, VLC grotuvą, „YouTube“ klientus ir „AVLib“ pagrįstą sprendimą.
  • Serveris, kuris tvarko gaunamą srautą ir prireikus apdoroja bei įrašo. Serveris taip pat teikia transliacijas kitiems klientams. Tarp serverių geriausi variantai būtų Wowza Media Server, Flussonic Media Server ir Simple RTMP Server.
  • Žiūrovai atstovauja bet kuriam klientui, galinčiam žiūrėti paskelbtus srautus. Norėdami rodyti tokius medijos srautus, galite naudoti bet kurį grotuvą, kuris palaiko RTMP protokolą. Geros naujienos yra tai, kad beveik visi šiuo metu naudojami visų esamų platformų grotuvai palaiko RTMP srautus. Galite pasirinkti Flash Player, VLC arba Media Player Classic.

Sudėtingiausios ir daug išteklių reikalaujančios yra transliuotojų programos. „Transliavimo srautas“ apima medijos apdorojimą, maišymą, kodavimą ir tolesnį srautinį perdavimą per RTMP protokolą į serverį. Tai labai priklauso nuo platformos ir aparatinės įrangos ir reikalauja daug pagalbinių išteklių.

Norint perduoti kuo daugiau duomenų naudojant RTMP protokolą, vaizdo ir garso įrašai suskaidomi į įvairaus dydžio fragmentus. Numatytasis dydis yra 64 baitai garso ir 128 baitai vaizdo. Vaizdo įrašų dalių dydžius lemia vartotojo ir serverio sąveikos formatas.

Tada laikmenos fragmentai sujungiami ir sutankinami per vieną ryšį, koreliuojant su kanalo pralaidumu ir delsa. Srautas, gaunamas iš transliuotojo į serverį, susideda iš mažų duomenų blokų, kuriuose yra įvairių tipų duomenų (pvz., vaizdo, garso paslaugos ir kt.). RTMP srautinis perdavimas gali vienu metu perduoti kelis skirtingus duomenų blokus, tokiu būdu apimant vaizdo ir garso įrašus bei įgalinant nuotolinius procedūrų skambučius.

Kai klientas atidaro srautą RTMP grotuve, RTMP serveriui siunčiama užklausa. Seansas inicijuojamas ir keičiamasi paslaugų duomenimis. Kai kliento RTMP grotuvas gauna reikiamą paslaugų duomenų paketų dalį apie vykstantį srautą, jis pradeda dekoduoti, kaupti buferį ir rodyti RTMP medijos srautą.

Naudojant RTMP, laikmenos nereikia laikyti jokioje laikinoje saugykloje. Jis ir toliau tiesiogiai perduodamas tarp klientų ir serverių. Jei pralaidumo pajėgumas leidžia, tas pats srautas nukreipiamas daugeliui klientų, kurie siunčia užklausas. Srautinio perdavimo pajėgumas pagerėja, jei į tinklą įjungiami keli medijos serveriai. Srautinio perdavimo procesas tęsiasi tol, kol serveris arba grotuvas baigia seansą.

Kaip galite naudoti RTMP vaizdo įrašams transliuoti „Android“ programoje?

Galite žiūrėti RTMP srautą bet kurioje platformoje naudodami bet kurį grotuvą, kuris palaiko RTMP protokolą. „Android“ populiariausi trečiųjų šalių grotuvai yra MX, VLC ir BS grotuvai, taip pat bet kuris kitas grotuvas, palaikantis FFMPEG. Norėdami žiūrėti RTMP iš programos, kūrėjas turi integruoti bet kurią grotuvo biblioteką, galinčią skaityti RTMP srautus. Tai yra ijkPlayer ir VLC SDK.

„Onix“ komanda įnešė savo technologinį indėlį ieškodama lengvo ir gražaus vaizdo srautinio perdavimo sprendimo ir sukūrė „AVLib“, „Onix“ išorinę biblioteką, skirtą „Android“ RTMP srautiniam perdavimui.

Pažiūrėkime, kaip tai veikia su tiesiogine „Android“ programų transliacija ir kaip kilo idėja.

Kaip „AVLib“ išsprendžia pagrindinę „Android“ RTMP srautinio perdavimo problemą

https://rtmplib-android.com/

Mūsų „Android“ kūrėjų komanda „AVLib“ idėją atėjo beveik atsitiktinai, tačiau su puikiu rezultatu ir efektu. Dirbdami su užduotimi pridėti funkciją, skirtą „Android“ įrenginių vaizdo ir garso transliacijai į RTMP serverius, jie susidūrė su rimta problema. Kliento reikalavimuose buvo nurodyta, kad programėlė turi turėti galimybę transliuoti vaizdo ir garso duomenis maksimalia talpa per „Android“ kamerą. Taip pat reikėjo įjungti „Android 4.0“ palaikymą kaip minimalią versiją, kad ją galėtų naudoti senesnius mobiliuosius įrenginius turintys vartotojai ir turėti daugybę patogių naudojimo nustatymų.

„Onix“ komanda atliko išsamų esamų komercinių ir atvirojo kodo srautinių bibliotekų tyrimą ir palyginimą. Bet be patenkinamo rezultato. Paaiškėjo, kad rinkoje nėra panašaus sprendimo, kuris galėtų visiškai patenkinti mūsų techninius poreikius. Komandos nariai greitai nusprendė sukurti savo išorinę biblioteką, kuri galėtų palaikyti RTMP srautinį perdavimą, skirtą „Android“. Kadangi šiuo metu naudojama daugybė „Android“ įrenginių ir OS versijų, ši biblioteka buvo sukurta taip, kad atitiktų visų dabartinių „Android“ naudotojų srautinio perdavimo poreikius.

Tačiau niekada nėra prasmės skirti laiko vienkartinio įrankio kūrimui, kuris išsprendžia vieną konkrečią užduotį griežtai iki reikiamo masto. Ką daryti, jei panaši situacija kartojasi? Kodėl nepasinaudojus geriausiomis technologijomis ir nesukūrus gerai patikrinto programinės įrangos produkto?

Norėjome sukurti elegantišką, lankstų ir paprastą sprendimą, todėl bet kuri kita trečiosios šalies „Android“ komanda arba kūrėjas, ieškantis RTMP bibliotekos, galėtų lengvai integruoti ją į programą, neišradęs dviračio iš naujo. Ir mes tai padarėme! „AVLib“ sujungia visas funkcijas, kurių tikėjomės, ir visapusiškai išsprendžia pagrindinę vaizdo transliacijos užduotį.

Kaip buvo sukurta AVLib ir kodėl tai patikima RTMP biblioteka

AVLib yra RTMP biblioteka, kuria mes tikrai didžiuojamės. Tai programinės įrangos produktas, kuris išsprendžia kliento reikalavimus bet kokio sudėtingumo tiesioginei transliacijai. Tai paruoštas naudoti „Android Studio“ įrankis, kuris iš karto integruojamas į programą mobiliesiems.

AVLib yra patogus ir stabilus sprendimas, pagrįstas šiais principais:

  • Lengva integracija su programa

„Android“ kūrėjui prireiktų maždaug valandos, kad užbaigtų „AVLib“ integravimo procesą ir įtrauktų tiesioginę funkciją, kuri būtų transliuojama į programą.

  • Didžiausia talpa

Norėdami įdiegti RTMP biblioteką ir suteikti jai didelį pajėgumą, mūsų komanda pasirinko C programavimo kalbą. Kiekviena funkcija, įtraukta į AVLib, pradedant konvejerio logika, kodavimu, darbu su RTMP ir baigiant apdorojimu, buvo sukurta naudojant gryną C.

  • UI pritaikyta biblioteka

AVLib yra lankstus ir gali būti lengvai pritaikomas prie kliento poreikių vartotojo sąsajos dizaino (t. y. mygtukų, teksto) ir vaizdo nustatymų (t. y. kadrų skyros, garso, kodeko kokybės, bitų perdavimo spartos) srityse.

  • Visų esamų tipų Android įrenginių palaikymas

Ši RTMP biblioteka pateikiama kaip vienas .aar failas be jokių priklausomybių. „AVLib“ buvo išbandytas siekiant įsitikinti, kad jis suderinamas su įvairiais „Android“ įrenginiais ir palaiko 4.0 ir naujesnės versijos „Android“ OS.

Galite rasti daugiau informacijos apie AVLib funkcijas.

AVLib kūrimo procesas buvo tikrai pilnas iššūkių ir pareikalavo mūsų Android komandos mąstymo bei pastangų.

  • Transliuojate iš veiksmo kamerų? Taip!

Viena iš ypatingų „AVLib“ ypatybių yra galimybė skraidyti vaizdo ir garso įrašus iš veiksmo kamerų. Norėdami įjungti šią funkciją, turite dirbti vienu metu įjungę dvi tinklo sąsajas pusė Užduotis buvo atlikta sėkmingai, tačiau pareikalavo kruopštaus Android OS šaltinio kodo tyrimo ir nuolatinio derinimo.

  • Transliacijos gyvavimo ciklo kūrimas

Kitas svarbus iššūkis, su kuriuo susidūrėme kūrimo etape, buvo sklandaus darbo su fotoaparatu ir gyvavimo ciklo apdorojimas skirtinguose įrenginiuose įgalinimas. Tai užtruko gana daug laiko ir pareikalavo daug kruopštaus darbo.

Iš pradžių RTMP (Real Time Messaging Protocol) sukūrė „Adobe Systems“, skirtą garso ir vaizdo srautams, tekstiniams pranešimams ir kitiems duomenims perduoti žiniatinklyje. Pagrindinis jo darbo principas yra sąveikos tarp serverio ir vartotojo „Flash Player“ inicijavimas. RTMP yra pagrįstas TCP, o tai reiškia, kad jo pagrindinis prioritetas yra stabilaus ryšio palaikymas ir mažos delsos sąveikos užtikrinimas. Siekdamas sklandžiai transliuoti srautus ir perduoti kuo daugiau duomenų, RTMP serveris informaciją skaido į fragmentus. Tada fragmentų dydis nustatomas atsižvelgiant į vartotojo ir serverio sąveikos formatą.

RTMP įdomiau yra tai, kad jis apima skirtingus virtualius kanalus, kurie perduoda duomenų paketus per vieną medijos seansą. Šie kanalai gali apimti: RPC užklausų ir jų rezultatų kanalą, vieną valdymo pranešimų kanalą, garso ir vaizdo srautinio perdavimo kanalus. Be to, jie gali veikti vienu metu, nesukeldami vienas kitam jokių techninių problemų.

RTMP vs RTSP

Kalbant apie duomenų perdavimą, yra dar vienas gerai žinomas protokolas, vadinamas RTSP. Taigi, pažvelkime į skirtumus tarp RTMP ir RTSP protokolų.

Pagrindinis RTSP (Real Time Streaming Protocol) tikslas yra palaikyti srautinio perdavimo serverių veiklą. Be to, šis protokolas nustato sąveiką tarp kliento ir serverio. RTSP leidžia galutiniams vartotojams valdyti medijos seansą naudojant paprastas komandas, pvz., paleisti, pristabdyti ir sustabdyti. Be to, tai leidžia klientams žiūrėti vaizdo įrašą iš bet kurio fragmento nelaukiant visiško atsisiuntimo.

Savo ruožtu RTMP taip pat palaiko aukščiau paminėtas savybes. Tačiau RTMP serveris, naudodamas RTMP protokolą, gali stebėti kiekvieną kliento veiksmą nuo seanso pradžios iki seanso uždarymo. Tokiu būdu RTMP ataskaitos tampa tikslesnės ir pateikiamas išsamus vartotojo veiklos konkrečios medijos seanso metu vaizdas. Taip pat RTMP, RTSP taip pat gali perduoti tiesioginę transliaciją. Tačiau srautinis duomenų perdavimas nėra pagrindinė RTSP užduotis, todėl tam reikia papildomų protokolų.

Kaip tai veikia

RTMP darbo principas yra paprastas. Norint pradėti RTMP srautą, pakanka sukurti sąveiką tarp RTMP serverio ir kliento RTMP grotuvo. Kai šis ryšys yra nustatytas, serveris pradeda perduoti laikmeną nuolatiniu baitų srautu. Šis procesas tęsiasi tol, kol serveris arba grotuvas baigs seansą.

Gerai tai, kad RTMP protokolas yra labai lankstus, o garso, vaizdo ir tekstinės informacijos pateikimas įvairiais formatais priklauso jo galimybėms. Pavyzdžiui, RTMP protokolas įgalina vaizdo transliaciją MP4 ir FLV formatais, garso transliaciją – MP3 ir AAC. Be to, šio protokolo dėka RTMP serveris siunčia mediją į žiniatinklio programas ir mobiliuosius įrenginius. Šiuo tikslu vartotojas turi turėti Flash Player įdiegtą naršyklėje arba atitinkamai mobiliajame įrenginyje. Tada „Flash Player“ paleis swf failą, kuriame yra visa srauto medijos informacija. Tačiau vienas didžiausių RTMP protokolo pranašumų yra tai, kad jį galima pritaikyti tiesioginiam ir pareikalavus transliavimui. Pažvelkime į kiekvieną iš šių srautinio perdavimo procesų.

Tiesioginė transliacija

Tiesioginis vaizdo transliavimas priklauso pagrindinėms RTMP protokolo ypatybėms. Su jo pagalba galite tiesiogiai transliuoti vaizdo įrašą jo įrašymo metu. Daugiausia tiesioginė transliacija naudojama sporto renginiams, laidoms, koncertams ir kt. Šiuo atveju RTMP protokolas tiesiogine prasme yra nepakeičiamas. Jis turi mažą delsą realiuoju laiku transliuojant, palyginti su HTTP protokolu, ir daugiau nei dešimt sekundžių vėluoja, o tai netinka profesionaliam tiesioginiam srautui.

Apžvelgsime dar vieną ryškų RTMP išskirtinių tiesioginių transliacijų funkcionalumo pavyzdį. Pavyzdžiui, populiarios IP kameros, palaikančios RTMP protokolą, turi įmontuotus garsiakalbius, todėl galite ne tik tiesiogiai matyti vaizdo įrašą, bet ir dalyvauti transliacijos procese bei išsakyti savo nuomonę transliuotojams.

Transliacija pagal pareikalavimą

Srautas pagal pareikalavimą leidžia vartotojams pasirinkti, kada žiūrėti pasirinktą medijos turinį, o tai jiems patogiau, o ne stebėti šį turinį jo transliacijos metu. Paprastai vaizdo įrašas pagal pareikalavimą (VOD) naudojamas dėl kelių priežasčių: todėl, kad jis sklandžiai atkuriamas net esant mažam interneto ryšio greičiui, kai žiūrinčiųjų skaičius internete nėra didelis, dėl HD kokybės. Su RTMP protokolu net VOD yra efektyvesnis. Visų pirma, jis teikia daugialypės terpės palaikymą. Jei norite turėti vieną srautą savo darbiniame tinkle ir pateikti jį keliems vartotojams, naudojant RTMP nereikės kurti atskirų jungčių kiekvienam vartotojui. Kiti protokolai, tokie kaip HTTP arba CDN, šios funkcijos neturi. Be to, RTMP leidžia vartotojams iš naujo prisijungti prie vaizdo srauto, jei kyla ryšio problemų. Esant ryšio trikdžiams, vaizdo įrašas paleidžiamas iš buferio, o vartotojui vėl prisijungus, buferis pradeda pildytis ir tokiu būdu išvengiama dažnų vaizdo srauto pauzių.

RTMP diegimai

Akivaizdu, kad visa ši informacija verčia jus smalsauti, kaip įdiegti RTMP. Tai yra kelių platformų protokolas ir jis veikia „Windows“, „Mac“, „Linux“, „Android“, „Windows Mobile“, „iOS“. Ar turite konsolę ir mėgstate žaisti žaidimus? Galite lengvai naudoti RTMP paslaugas tokiems įrenginiams kaip Xbox One, PlayStation ir PS Vita.

Dėl RTMP protokolui tinkamų platformų įvairovės, yra daug jo įgyvendinimo variantų. Jie gali skirtis nuo komandinės eilutės diegimo iki visapusiško atvirojo kodo diegimo.

Komandinės eilutės įgyvendinimas

RTMPDump įrankis naudojamas komandų eilutės diegimui, nes puikiai susidoroja su RTMP srautų įrašymu, tiesiogine transliacija ir vaizdo įrašu pagal pareikalavimą. Be to, RTMPDump yra atvirojo kodo įrankis, kurį galima naudoti Linux, Android, Mac OS X ir Microsoft. Ši programa yra labai populiari dėl savo mažo dydžio ir galimybės iššifruoti RTMPE, kuris yra užšifruotas RTMP, ir RTMPS – saugų RTMP.

RTMPDump pakete yra trys programos: rtmpdump, rtmpsrv ir rtmpsuck. Kiekviena iš šių programų atlieka tam tikras funkcijas. Pavyzdžiui, rtmpdump naudojamas ryšiui su RTMP serveriais užmegzti ir pačiam srautui užfiksuoti; rtmpsuck taip pat gali užfiksuoti srautą arba padėti surinkti pagrindinius rtmpdump parametrus. Pagrindinė rtmpsrv funkcija yra sekti ryšius ir srautus.

Pilnas įgyvendinimas

Jei jus labiau domina visiškas diegimas, jums reikės šių trijų programinės įrangos dalių: tiesioginio vaizdo kodavimo priemonės, medijos srautinio perdavimo serverio ir vaizdo kliento programos. Nežinote, kurį tiesioginio vaizdo kodavimo įrenginį įdiegti? Tada galite pasirinkti „Flash Media Live Encoder“, „FFmpeg“, „WireCast“, „Wowza Transcoder“, „Nimble Streamer Transcoder“. Tačiau atminkite, kad populiariausias yra „Flash Media Live Encoder“, kurį galima nemokamai atsisiųsti „Adobe“ svetainėje.

Kalbant apie vaizdo kliento programą, „Adobe Flash Player“ yra tinkamiausias variantas. Tai nemokamas RTMP grotuvas ir veikia kaip naršyklės ar net mobiliojo įrenginio papildinys. Flash grotuvas tinka skirta Windows, OS X, Chrome OS ir Linux. Alternatyvios parinktys yra Gnash ir VLC media player. Abu jie yra atvirojo kodo medijos leistuvai. „Gnash“ turi visas galimybes pakeisti „Flash Player“ RTMP transliacijoje „Linux“. VLC medijos leistuvas savo ruožtu nėra universalus, nes gali tik iš dalies palaikyti RTMP srautus.

Teigiama, kad RTMP serveriai, tokie kaip „Adobe Flash Media Server“, „Wowza Streaming Engine“, „Flussonic Media Server“, yra labai geri. Tačiau galite įdiegti nemokamą RTMP serverį, pvz., „Nginx“ su RTMP moduliu arba „Red5“, kuris taip pat yra atvirojo kodo RTMP serveris „Java“.

Kaip išspręsti dažniausiai kylančias problemas naudojant RTMP protokolą

RTMP protokolas, nepaisant visų jo akivaizdžių pranašumų, turi ir tam tikrų trūkumų. Dėl to, kad jis labai skiriasi nuo HTTP protokolo, HTML5 jo nepalaiko. Be to, RTMP protokolas blogai veikia „iDevices“ ir turi įtakos vaizdo transliacijos kokybei. Tokiu atveju Apple programėlėse geriau naudoti HLS protokolą. HLS ir RTMP darbo principai yra gana panašūs, tačiau HLS atveju srautas yra padalintas į mažų HTTP failų serijas. Iš pradžių šis protokolas buvo sukurtas „Quicktime“, „iOS“ ir „Safari“ naršyklėms. Tačiau dabar HLS protokolas gali būti naudojamas ir daugelyje kitų platformų. Protokolas labai gerai susidoroja su pralaidumo apribojimais ir atitinkamai pritaiko vaizdo kokybę. Atsižvelgiant į vaizdo įrašo pristatymo greitį, HLS nebus geriausias variantas, nes jo delsa yra dvidešimt sekundžių.

Kitas RTMP protokolo trūkumas yra tai, kad jis yra pažeidžiamas pralaidumo problemų. Kartais dėl mažo pralaidumo medijos srautinis perdavimas gali sutrikti arba srautas gali net neprasidėti, jei interneto ryšio sparta nepakankama. Alternatyvus būdas transliuoti ribotą pralaidumą yra naudoti Dash. „Dash“ yra prisitaikanti srautinio perdavimo technologija, užtikrinanti aukštos kokybės medijos transliavimą. Ši technika gali diagnozuoti konkretaus vartotojo pralaidumą ir pritaikyti vaizdo kokybę pagal ryšio greitį. Be to, jis neapsieina be kodavimo įrenginio, kuris koduoja vaizdo įrašą daugeliu bitų dažnių. Tada grotuvas perjungia skirtingas koduotes dėl tinkamų išteklių. Dėl to pasiekiamas mažas buferis ir įgyjama puiki vaizdo įrašų patirtis. Sunku įvertinti visus šios technikos privalumus, pavyzdžiui, transliuojant didelius įvykius nacionaliniu lygiu.

Dar vienas RTMP protokolo minusas – būtinybė įdiegti Flash Player papildinį, be kurio RTMP medijos perdavimas bus neįmanomas. Be to, taikant RTMP CDN srautinio perdavimo paslaugoms kyla tam tikrų problemų.

Ar vis dar turite klausimų dėl RTMP protokolo ar jo įgyvendinimo? o mes jums padėsime ir praktiškai parodysime visus jo privalumus.

Neseniai aptikau temą „Internetinio transliavimo serveris, pagrįstas nginx“ apie nuostabų Romano Harutyunyano (@rarutyunyan) modulį, skirtą nginx: nginx-rtmp-module. Modulis yra labai lengvai konfigūruojamas ir leidžia sukurti serverį vaizdo įrašų publikavimui ir tiesioginei transliacijai nginx pagrindu.

Apie patį modulį galite perskaityti jo puslapyje „GitHub“, bet noriu pateikti keletą paprasti pavyzdžiai naudoti. Tikiuosi, kad ši tema padės vaizdo įrašų kūrimo naujokams (kaip aš).

Trumpai apie RTMP

RTMP (Real Time Messaging Protocol) yra patentuotas „Adobe“ transliacijos protokolas. Numatytasis transportavimas yra TCP (prievadas 1935). Taip pat galima įterpti RTMP į HTTP (RTMPT). RTMP klientas pirmiausia yra „Adobe Flash Player“.
Vaizdo kodekas – H.264, garso kodekas AAC, nellymoser arba MP3, MP4 arba FLV konteineriai.

Vaizdo įrašo publikavimas

Kitaip tariant, vaizdo įrašas pagal pareikalavimą (VOD). Tiesiog pridėkite jį prie nginx.conf rtmp skiltyje (serveris (...)).
programa vod (play /var/videos; )

(Pastaba: žinoma, skyrius nebūtinai turi būti vadinamas vod)
Dabar galite įdėti tinkamo formato vaizdo failą į /var/videos aplanką ir „pateikti“ šaltinį grotuvui, pavyzdžiui, rtmp://server/vod/file.flv. Kiek suprantu, MP4 iš prigimties palaiko vaizdo pervyniojimą, o FLV teks indeksuoti atskirai.

Transliacija internetu

Galime siųsti vaizdo ir garso srautą į serverį naudodami tą patį RTMP protokolą publikavimui. O mūsų klientai galės stebėti transliaciją. Norėdami tai padaryti, prie serverio turite pridėti skyrių:

Programa tiesiogiai (leisti skelbti 1.2.3.4; leisti skelbti 192.168.0.0/24; neleisti skelbti viską; leisti žaisti visiems; tiesiogiai toliau; )

Įrenginyje, iš kurio transliuosime, pirmiausia turime gauti „DirectShow“ įrenginių sąrašą. Pradėti - Vykdyti - cmd, eikite į aplanką ffmpeg/bin ir paleiskite:
ffmpeg -list_devices true -f dshow -i dummy

Jei jūsų šaltinio pavadinime yra rusiškų raidžių, jos gali būti rodomos kaip šlykštūs simboliai. Tikri administratoriai naudoja iconv, o tokie paprasti vaikinai kaip aš iššifruoja Lebedevo svetainės nesąmones. FFmpeg“ turite pateikti skaitomą užrašą.

Dabar, žinodami vaizdo ir garso šaltinio pavadinimą, galite jį užfiksuoti naudodami ffmpeg ir nusiųsti į serverį.

Interneto kamera

Turite nurodyti bent vaizdo įrašo šaltinį, kodeką ir serverį:
ffmpeg -f dshow -i video="Webcam C170" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

Vietoj „Webcam C170“ turite pakeisti savo fotoaparato pavadinimą iš sąrašo.
Jungiklis -an reiškia, kad mes neperduodame garso srauto. Jei reikia garso srauto, paleidimo eilutė atrodys maždaug taip:
ffmpeg -f dshow -i video="Webcam C170" -f dshow -i audio="Mikrofonas..." -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv "rtmp://1.2 .3.4/live/test.flv live=1"
Čia mes naudojame libfaac kodeką, diskretizavimo dažnį 44100, 2 kanalus (stereo). Vietoj AAC galite naudoti MP3 (libmp3lame kodekas).

Analoginė kamera

Jei jūsų fotoaparatas turi analoginę išvestį, galite prijungti jį prie kompiuterio naudodami fiksavimo įrenginį. Naudoju pigią PAL kamerą ir USB fiksavimo plokštę iš Dealextreme.

Ffmpeg -r pal -s pal -f dshow -i video="USB2.0 ATV" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

Ekrano fiksavimas

Čia yra dvi parinktys: įdiegti FFSplit arba naudoti ekrano užfiksavimo įrašymo programą su FFmpeg.
FFSplit naudoti lengviau, nes ji turi patogią grafinę sąsają, tačiau ji neveikia naudojant XP/2003.

Jei nuspręsite pasirinkti antrąjį metodą, FFmpeg paleisties eilutė atrodys maždaug taip:
ffmpeg -f dshow -i video="screen-capture-recorder" -c:v libx264 -an -r 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
Garso srautas gali būti užfiksuotas naudojant virtualų garso įrašymo įrenginį.


Ekrano fiksavimo programoje pavyzdys

Retransliuoti

Žinoma, galite perduoti FFmpeg vaizdo ar garso failą (arba srautą) į serverį. Toliau pateiktame pavyzdyje mes perduodame MJPEG vaizdo įrašą iš nuotolinio fotoaparato:
ffmpeg -f mjpeg -i video="http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c:v libx264 -f flv "rtmp://1.2.3.4/live/test.flv live =1"
Tačiau tokiems tikslams tikslingiau naudoti stūmimo parinktį pačiame RTMP serveryje, kad būtų pašalinta tarpinė nuoroda ir ištrauktų srautą pačiame serveryje.


Kažkokia internetinė kamera Japonijoje

Derinimas, problemų sprendimas

- iš anksto nustatytas vardas H.264 turi kelis suspaudimo/greičio santykio nustatymų rinkinius: itin greitas, itin greitas, labai greitas, greitesnis, greitas, vidutinis, lėtas, lėtesnis, labai lėtas. Todėl, jei norite pagerinti našumą, turėtumėte naudoti:
- iš anksto nustatytas itin greitas
-crf numerį tiesiogiai veikia pralaidumą ir kokybę. Priima reikšmes nuo 0 iki 51 – kuo didesnis skaičius, tuo prastesnė vaizdo kokybė. Numatytasis 23, 18 – neprarandama kokybė. Pratimo sparta maždaug padvigubėja, kai CRF sumažėja 6.

-r numerį nustato įvesties ir išvesties FPS. Šaltiniams, iš kurių fiksuojate vaizdą, galite nustatyti jį vietoj -r -re naudoti vietinį FPS.

-rtbufsize numerį realaus laiko buferio dydis. Jei nuolat gaunate buferio perpildymo ir kadrų kritimo pranešimus, galite nustatyti didelį buferį (pvz., 100000k), bet tai gali padidinti perdavimo delsą.

-pix_fmt nurodo spalvos modelį. Jei vietoje paveikslėlio matote juodą kvadratą, bet garsas veikia, pabandykite nustatyti yuv420p arba yuv422p.

-s plotisxaukštis įvesties ir išvesties vaizdo dydis.

-g numerį Kiek suprantu, tai yra maksimalus kadrų skaičius tarp raktų kadrų. Jei jūsų FPS yra labai žemas, galite nustatyti šią reikšmę mažesnę, kad sumažintumėte transliacijos pradžios delsą.

-keyint_min numerį minimalus kadrų skaičius tarp pagrindinių kadrų.

-vf "crop=w:h:x:y" apkarpyti vaizdo įrašą

- sureguliuoti nulinį laiką„stebuklinga“ parinktis, skirta sumažinti transliacijos delsą. Neradau, ką tiksliai tai daro (-:

- analizė 0 išjungia trukmės analizę, kuri padeda sumažinti transliacijos delsą

Be aukščiau aptartų garso parametrų, jums gali prireikti - acodec kopija jei jūsų garso srautui nereikia papildomo perkodavimo į MP3/AAC.

Pavyzdys: transliacija iš internetinės kameros su maža delsa be garso, nubrėžkite dabartinį laiką nuotraukos viršuje

Ffmpeg -r 25 -rtbufsize 1000000k -analyzeduration 0 -s vga -copyts -f dshow -i video="Webcam C170" -vf "drawtext=fontfile=verdana.ttf: [apsaugotas el. paštas]:fontsize=48:box=1: [apsaugotas el. paštas]:text=%(localtime)" -s 320x240 -c:v libx264 -g 10 -keyint_min 1 -iš anksto nustatytas UltraFast -tune zerolatency -crf 25 -an -r 3 -f flv "rtmp://1.2.3.4:1935/ live/b.flv live=1"

Grotuvas svetainėje

Čia viskas paprasta. Pavyzdžiui, įdiekite vieną iš populiarių grotuvų savo svetainėje

Ar jums patiko straipsnis? Pasidalinkite su draugais!