Ööpäevaringne videoedastus YouTube'is

Viimasel ajal olen hobina videotena salvestanud tuttava psühholoogi loengud. Salvestatud materjali monteerin ja avaldan oma veebisaidil. Kuu aega tagasi tekkis mul idee luua YouTube'is 24/7 voogedastus nende loengute jaoks. Selline temaatiline "telekanal", mis on pühendatud isiklikule arengule.

Kuidas korraldada tavalist voogedastust, tean ma. Kuid kuidas teha nii, et see oleks just videofailide voogedastus? Et see toimuks 24/7, oleks paindlik, maksimaalselt iseseisev ja ei sõltuks minu koduarvutist. Seda pidin ma välja selgitama.

Ööpäevaringne videoedastus YouTube'is

Lahenduse leidmiseks kulus mitu päeva. Uurisin mitmeid foorumeid ja erinevaid juhendeid, ilma milleta minu voogedastus lihtsalt ei õnnestuks. Ja nüüd, kui see hullus on õnnestunud, tunnen vajadust jagada oma lahendust. Nii sündis see artikkel.

Lühidalt öeldes oli lõplik lahendus järgmine: VPS + ffmpeg + bash-skript. Allpool kirjeldan tehtud samme ja räägin „allveelaevadest”, mis ilmnesid voogedastuse korraldamisel.

Samm 1 – kust toimub voogedastus?

Esialgu pidin otsustama, kust edastamine tuleb ja kus on selle allikas. Kõigepealt tuli meelde – kodukompuuter. Koguda videoid esitusloendisse ja käivitada nende esitamine igas videopleieris. Seejärel võtta ekraanipilt ja edastada see YouTube'i. Kuid ma loobusin sellest variandist peaaegu kohe, kuna selle elluviimiseks peaks kodukompuuter pidevalt töötama, mis tähendab müraga koos tuulikutelt isegi öösel ning suurenenud elektritarbimist (+100-150 kWh iga kuu). Seega ei saa kodukompuutrit edastamise ajal kasutada, sest igasugune hiire liikumine oleks edastuselt nähtav.

Seejärel hakkasin vaatama pilveteenuste poole. Otsisin valmis teenust, kuhu oleks võimalik üles laadida oma videoid või näiteks lisada linke YouTube'i videotesse, et see kõik pakitaks kokku ühte nonstop edastusse. Kuid sobivat pole leidnud. Võib-olla otsisin halvasti. Ainus, mis näib ± sobivat funktsionaalsuse poolest, on restream.io, teenus, mis aitab samal ajal edastada mitmele platvormile. Neil tundub, et oma videoid saab üles laadida. Kuid see teenus loodi sootuks teiste eesmärkide jaoks ja nad arvavad, et edastus kestab vaid paar tundi. Arvan, et kui selle teenuse kaudu oleks võimalik korraldada 24/7 edastus, oleks see kuukäive kümnete, kui mitte sadade dollarite ulatuses. Ent edastust sooviks korraldada kas tasuta või madala rahalise investeeringuga.

Sai selgeks, et edastuseks on vajalik erinev seade või lausa eraldi arvuti. Mõtlesin millegi sarnase suunas nagu Raspberry Pi. Miks mitte? Sellel ei ole jahutusi. Salvestasin video mälupulgale, ühendasin Ethernet-kaabli ja las see lihtsalt lebab kuskil varjatud kohas, edastades signaali. Variandi. Kuid mul ei olnud ei plaati ega ka kogemusi selle kasutamisel, seetõttu loobusin ka sellest variandist.

Lõpuks sattusin mingisse arutellu, kus arutati oma serveri loomist. See ei olnud just see, mida ma otsisin, kuid peamise mõtte ma mõistsin – serverit on ju võimalik kasutada! Selles arutelus pakuti välja kombinatsiooni VPS + nginx + OBS. Selgeks sai, et see kombinatsioon võiks sobida ka mulle. Ainult see, et ma polnud kunagi servereid administreerinud, ajas mind natuke segadusse ja tundus, et oma eraldatud server on keeruline ja kallis. Otsustasin uurida, kui palju maksab minimaalsete omadustega serveri rentimine, ja olin meeldivalt üllatunud.

Ööpäevaringne videoedastus YouTube'is

Hinnad on toodud Valgevene rublades ja need on tõeliselt väikesed. Mõistmiseks: 8 Valgevene rubla on umbes 3,5 dollarit või 240 Venemaa rubla. Kogu kuu jooksul kasutades täisfunktsionaalset arvutit, mis töötab 24/7 ja on kiire internetiühendusega. Mulle tundus, et see avastus oli äärmiselt rõõmustav ja ma kõndisin mitu päeva uskumatult rahulolevana, justkui laps, kes avastas kosmoserakette 🙂

Muide, kasutasin esimese veebisaidi pakkumist, mille Google andis mulle otsingusõnade "VPS rent" järgi. Võib-olla on olemas veelgi odavamaid lahendusi, kuid see hind sobis mulle ja edasi ei otsinud.

Serveri loomisel on võimalik valida operatsioonisüsteem, millel see töötab. Iga loetletud süsteemi puhul on võimalik korraldada striimist ning valik tuleb teha vastavalt sinu eelistustele ja rahalistele võimalustele (Windows-i serveri eest küsitakse lisatasu). Valisin CentOS-i. Lihtsalt seetõttu, et mul oli varem selle kasutamise osas väike kogemus.

Ööpäevaringne videoedastus YouTube'is

Samm 2 – serveri seadistamine

Esimene asi, mida pärast серверi loomist teha, on sellele SSH kaudu ühenduse loomine. Alguses kasutasin PuTTy-d, kuid hiljem hakkasin kasutama Secure Shell App rakendust, mis töötab Google Chromes. See osutus mulle mugavamaks.

Seejärel muutsin hostinime, seadistasin serveri ajasünkrone, värskendasin süsteemi, tegelesin iptables'iga... ja tegin veel hulga asju, kuid mitte seetõttu, et see oleks vajalik. Lihtsalt oli huvitav serverit seadistada ja mul õnnestus see. Mulle meeldib, kui asjad õnnestuvad 🙂

Siin on sammud, mida tuleb teha:

  1. Ühendada EPEL-repositorium.
  2. Käivitada FTP-server (valisin vsftp).
  3. Installida ffmpeg.

Ma ei hakka detailseid käske tooma, see juhend on pigem kontseptuaalne, et edastada üldine tegevuskava. Kui teil tekib mõne sammu osas raskusi, lahendatakse need kiiresti otsingupäringuga, nagu "CentOS EPEL-i ühendamine" või "CentOS FTP-serveri installimine". Esimeste linkide kaudu leiate üksikasjalikud samm-sammult juhised.

Nii et, nagu ma juba varem mainisin, vajasin VPS + nginx + OBS kombinatsiooni. VPS on valmis. Kuid ülejäänud punktide osas tekkis küsimusi. OBS on voogedastuse programm, Open Broadcaster Software. See töötab ainult voogudega, st näiteks võtab pildi veebikaamerast ja voogedastab selle. Või salvestab ekraani. Või suunab juba käimasoleva voogedastuse teisele saidile. Aga mul ei ole voogu, mul on ainult kogum videofaile, millest tuleb voog teha.

Hakkasin seda teemat uurima ja leidsin ffmpeg'i. FFmpeg on avatud lähtekoodiga tasuta teegikomplekt, mis võimaldab salvestada, konvertida ja edastada digitaalseid audio- ja videosalvestisi erinevates formaatides.

Ja ma olin väga üllatunud, kui palju ffmpeg suudab. Tahad - tõmbab heli videost välja. Tahad - lõikab video fragmenti ilma ümberkodeerimiseta. Tahad - konverteerib ühe formaadi teiseks. Ja veel palju muud. Kuni selleni, et saad sellele faili määrata, ta konverteerib selle vooguks ja edastab selle otse YouTube'i. Kõik, ahel on kokku pandud. Jäänud on vaid detailide viimistlemine.

Samme 3 - voogedastuse seadistamine

Loome voogedastuse YouTube'is. Sel hetkel vajame vaid linki ja voogedastamise võtme. Alloleval ekraanipildil on need punasega välja toodud.

Ööpäevaringne videoedastus YouTube'is

Seejärel laeme serverisse video-faile, mida kavatseme voogedastada. FTP on tegelikult vajalik ainult selle etapi jaoks. Kui teil on mugavam meetod failide serverisse laadimiseks, siis FTP-serverit pole vaja üles seada.

Edastame voogu YouTube'ile. Vaatamiseks tuleb käivitada ffmpeg koos mitme atribuudiga. Nii näeb välja lühim käsk, mis mul õnnestus:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

Atribuutide tähendused-re – näitab, et fail tuleb konverteerida vooks.

-i – näitab, millist faili tuleb esitada. Oluline on, et käsk käivituks samast kataloogist, kus asub videofail. Vastasel juhul tuleks märkida absoluutne link faili juurde, nagu /usr/media/lecture1.mp4.

-f – määrab väljundi faili formaadi. Minu puhul tähendab see, et ffmpeg konverteerib minu faili mp4-st flv-ks „otse”.

Ja lõpus märkige andmed, mille võtsime YouTube'i tarnetoolide lehelt, st aadress, kuhu tuleb andmeid edastada, ja voogedastuse võti, et voogedastus ilmuks just teie kanalil.

Kui olete kõik õigesti teinud, siis pärast selle käsu käivitamist näeb YouTube edastatavat voogu. Voogedastuse alustamiseks peate lihtsalt YouTube'is vajutama nuppu „Alusta voogedastust”.

Samm 4 – lisame autonoomia

Palju õnne! Nüüd oskate käivitada voogedastust videofailist. Kuid see ei piisa 24/7 voogedastuseks. Oluline on, et pärast esimese video esitamise lõppu käivituks kohe järgmine ja kui kõik videod on näidatud, algaks esitamine uuesti.

Olen välja mõelnud järgmise variandi: luua .sh-fail, kuhu olen kirjutanud käsu iga videofaili kohta ja faili lõpus märkisin uuesti sama skripti käivitamise käsu. Tekkis ikka selline rekursioon:

Käsk 1... (voogedastuse käivitamine failist lecture1.mp4)
Käsk 2... (voogedastuse käivitamine failist lecture2.mp4)
Käsk 3... (voogedastuse käivitamine failist lecture3.mp4)
bash start.sh

Jah, see tõi tulemusi. Olles enda saavutusega rahul, käivitasin proovivoolu ja läksin magama.

Hommikul ootas mind ebameeldiv üllatus. Selgus, et voog läks kestma vaid paar minutit ja lõppes peaaegu kohe, kui ma arvuti kinni panin. Uurimine näitas, et sellisel viisil käivitatud käsud täidetakse vaid siis, kui kasutaja on serveris sisse logitud. Niipea, kui ma välja logisin, katkestati minu käivitatud käskude täitmine. Selle vältimiseks on piisav, et käsule bash lisada käsk nohup. See võimaldab käivitatud protsessil toimida olenemata teie kohalolekust.

Lõplik minimaalne skripti versioon näeb välja järgmine:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%VÕTME_VOO%
ffmpeg -re -i lecture2.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%VÕTME_VOO%
ffmpeg -re -i lecture3.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%VÕTME_VOO%
nohup bash start.sh $

Kus start.sh on fail, kuhu see skript on salvestatud. See fail peab asuma samas kataloogis koos videofailidega.

Dollari märgi lisamine lõpus võimaldab protsessi taustal käivitada, et võiks edasi konsooli kasutada, katkestamata voogu.

Boonuste seast on tulnud järgmised eelised:

  • Saate käsitsi vahetada failide esitamist. Selleks tuleb lõpetada hetkel toimiv ffmpeg protsess. Pärast seda hakkab automaatselt mängima järgmine fail nimekirjast.
  • Uusi videoid saab striimingusse lisada ilma edastamise katkestamiseta. Lihtsalt laadige video serverisse, lisage skripti käsk selle faili käivitamiseks, salvestage. Ja kõik. Järgmise esitusringi ajal hakkab uus fail juba mängima koos vanade failidega.

Samm 5 – kohandame ffmpeg'i

Sellega võiks põhimõtteliselt lõpetada. Kuid soovisime teha edastamise oma vaatajatele veidi sõbralikumaks.

Kujutame ette, et inimene siseneb otseülekandele, hakkab vaatama, talle meeldib ja ta soovib seda loengut alustada algusest, kuid otseülekanne ei võimalda kerida. Loengut algusest peale vaatamiseks peab inimene minema minu veebisaidile ja saama huvitava loengu salvestuse. Kuidas aga teada, milline loeng teda huvitab? Veebisaidil on juba 16 loengut ja igal nädalal lisandub uusi. Arvan, et isegi mina, kes olen kõiki neid loenguid filminud ja monteerinud, ei suuda juhusliku lõigu põhjal kindlaks teha, milline see loeng on. Seetõttu on oluline, et iga loeng oleks kuidagi märgistatud.

Variant lisada pealdiseid algsetesse videofailidesse montaažiprogrammis ei rahuldanud mind. Oli vajalik, et kasutataks originaalfailide eest. Et otseülekande tugi nõuaks minult võimalikult väheseid liigutusi.

Selgus, et ka selles saab mind aidata ffmpeg. Sellel on spetsiaalne atribuut -vf, mis võimaldab teksti videole lisada. Videole teksti lisamiseks tuleb käsule lisada järgmine fragment:

-vf drawtext="fontfile=OpenSans.ttf:text='Loeng 13: Emotsioonide psühholoogia. Kuidas luua rõõmu?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

Parameetrite tõlgendusfontfile= – viide fondifailile. Ilma selleta ei lisata videoteks üle teksti. Lihtsaim on fondifail panna samasse kausta videoga. Vastasel juhul tuleb näidata faili täispikk tee.

text= – tegelikult tekst, mille on vajalik asetada video peale.

fontsize= – fondi suurus pikslites.

fontcolor= – fondi värv.

borderw= – kontuuri paksus teksti ümber pikslites (mul on valge tekst musta kontuuriga, mille paksus on 1 piksel).

bordercolor= – kontuuri värv.

x= ja y= – teksti koordinaadid. Punkt 0;0 asub vasakus ülanurgas. Minu koordinaadid on valitud nii, et tekst paikneb videomõõtmetega 1280x720 pikslites vasakus alumises nurgas.

See näeb välja nii:

Ööpäevaringne videoedastus YouTube'is

Samm 6 – määrame ülekande kvaliteedi

Kõik, ülekande on valmis. FFmpeg edastab, failid mängitakse, minu kohalolek edastamiseks pole vajalik. Iga loeng on isegi allkirjastatud. Tundub, et kõik on valmis.

Kuid selgus veel üks nüanss – valisin serveri minikonfiguratsiooni ja see ei suutnud voogedastust hakkama saada. Serveri konfiguratsioon: 1 tuum (umbes 2.2 GHz), 1 gigabait RAM-i, 25 GB SSD. RAM-i oli piisavalt, aga protsessor oli pidevalt 100% koormuses (mõnikord isegi 102-103% 🙂 See tõi kaasa voogedastuse aeg-ajalt pidurdamise. Mitte eriti ilus.

Olin lihtsalt saanud valida kallima konfiguratsiooni kahe tuumaga, õnneks toimub serveri konfiguratsiooni vahetamine pilvetehnoloogiate abil paari nupu vajutamisega. Kuid ma tahtsin mahutada end minimaalsete konfiguratsiooni ressursside piiridesse. Alustasin ffmpeg dokumentatsiooni uurimist ja jah, seal on ka seadeid, mis võimaldavad süsteemi koormust reguleerida.

Pildikvaliteeti saab saavutada kahel viisil: kas protsessori suur koormus või suur väljundliiklus. Seega, mida rohkem koormust protsessor suudab taluda, seda vähem vajab kanal läbilaskevõimet. Või võib protsessorit mitte koormata, kuid siis on vaja laia kanalit koos suure liiklusvaruga. Kui piirangud on nii protsessoril kui ka väljundkanali mahtudel, tuleb pildikvaliteeti langetada, et edastus toimuks sujuvalt.

Minu serveril on 10 Mbit/s laiusega kanal. Selline laius on täiesti piisav. Kuid liikluse piirang on 1 TB kuus. Seetõttu ei tohi minu väljundvoog ületada ~300 Kb sekundis, seega peab väljundvoo bitikiirus olema maksimaalselt 2,5 Mbit/s. YouTube, muide, soovitab just sellise bitikiirusena edastada.

Süsteemi koormuse reguleerimiseks kasutab ffmpeg erinevaid lähenemisi. Sellega käitutakse hästi. siitKasutasin lõpuks kahte atribuuti: -crf ja -preset.

Constant Rate Factor (CRF) – see on tegur, mille abil saab reguleerida pildi kvaliteeti. CRF võib olla vahemikus 0 kuni 51, kus 0 – esialgse faili kvaliteet ja 51 – halvim võimalik kvaliteet. Soovitav on kasutada väärtusi vahemikus 17 kuni 28, vaikimisi on 23. Kui CRF on 17, on video visuaalselt identne algsega, kuid mitte tehniliselt. Dokumentatsioonis on märgitud, et lõppvideo suurus sõltuvalt määratud CRF-st muutub eksponentsiaalselt, st suurendamine 6 puntiga toob kaasa algse video bitikiirus kaks korda suuremaks.

Kui CRF abil saab määrata väljundpildi „kaalu“, siis presetide (-preset) abil saab määrata, kui palju koormust protsessorile tekib. Selle atribuuti omadused on järgmised:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • kiire
  • medium – see on vaikimisi väärtus
  • slow
  • slower
  • veryslow

Mida „kiiremini“ on parameeter määratud, seda suurem on protsessorikoormus.

Alustasin presetiga, mis oli tervikuna „minu protsessorile sobiv“, ning seejärel valisin koormuse täpsemalt CRF abil. Minu puhul sobis preset kiire, CRF väärtuseks valisin 24.

Kokkuvõte

Sellega on kõik. Minu lõplik käsk voogedastuse käivitamiseks on järgmine:

ffmpeg -re -i lecture1.mp4 -vf drawtext="fontfile=OpenSans.ttf:text='Loeng 1: Maailma piltide žongleerimine':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670" -c:v libx264 -preset fast -crf 24 -g 3 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

Siia on jäänud vaid kaks kirjeldamata punkte:

1) -c:v libx264 – konkreetse kodeki määramine lähtefaili töötlemiseks.
2) -g 3 – selge märge võtmekaadrite arvu kohta. Antud juhul on märgitud, et iga kolmas kaader peaks olema võtme. Standardne väärtus on kas 5 või 8, kuid YouTube nurisenud, palub mitte vähem kui 3.

Voogedastuse kvaliteeti saab vaadata siit.

Serveri koormus oli järgmine:

Ööpäevaringne videoedastus YouTube'is

Ööpäevaringne videoedastus YouTube'is

Monitorimise andmetest nähtub, et protsessori koormus kõigub vahel 70% kuni 95% ja nädala jooksul ei ole voogedastus kordagi 100% ulatusse ulatunud. See tähendab, et selliste seadistustega on protsessor piisav.

Disskoormuse osas võin öelda, et see on peaaegu mittekoormatud ja voogedastuseks peaks olema piisav isegi tavaline HDD.

Kuid mind muretseb väljuva liikluse hulk. Tundub, et minu väljuv voog kõigub vahemikus 450 kuni 650 KB/s. Kuu jooksul läheb see kokku umbes 1,8 terabaiti. Võib-olla pean liiklust juurde ostma või siiski minema kahe tuumaga konfiguratsiooni juurde, kuna ma ei tahaks pilte kvaliteeti langetada.

***

Kokkuvõtteks ütlen, et sellise voogedastuse seadistamine nullist võtab aega umbes 1-2 tundi. Suur osa ajast kulub video serverisse laadimisele.

Turundusvahendina osutus sellise voogedastuse käivitamine ebaefektiivseks. Võib-olla, kui vaateid kunstlikult suurendada, et YouTube'i algoritmid selle voogedastuse üles võtaksid ja aktiivselt soovitustes näitama hakkaksid, siis oleks midagi saanud. Minu puhul vaatati seda 16 päeva jooksul pideva voogedastuse jooksul 58 korda.

Noh, mis seal ikka. Voogedastus sulandub harmooniliselt minu veebisaidi peamisele lehele. See pakkus võimalust kiiresti iseloomustada lektorit ja loengute sisu.

Ja veel üks asi. Oluline on, et ülekanne ei rikuks kellegi autoriõigusi, vastasel juhul see blokeeritakse. Ma olen oma ülekande osas rahulik, kuna valisin muusika osad spetsiaalselt vabaks kasutamiseks, ja sisu autor istub kõrval arvutis ning ei ole sugugi vastu, et ma tema sisu kasutan 🙂

Aga kui teie ülekandes mängib kuskil taustaks raadio või olete montaažis kasutanud oma lemmiklugu või võtnud video materjali populaarsetest muusikavideodest, seeriatest või filmidest – siis on teie ülekande riskiohus. Samuti on oluline, et ülekanne kannaks vähemalt minimaalset sisulist koormust, muidu võivad nad selle blokeerida kui rämpssisu.

***

Sellega ongi kõik. Loodan, et see käsiraamat aitab kedagi. Kui teil on midagi lisada, kirjutage, loen hea meelega täiendusi ja selgitusi artiklile.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster