Viime aikoina olen harrastuksena kuvannut tuntemani psykologin luentoja. Editoin materiaalin ja julkaisen sen verkkosivuillani. Kuukausi sitten sain idean aloittaa näiden luentojen lähettämisen ympäri vuorokauden YouTubessa. Se olisi eräänlainen temaattinen "tv-kanava", joka on omistettu henkilökohtaiselle kasvulle.
Tiedän, miten tavallinen lähetys tehdään. Mutta miten teen siitä videostriimin? Niin, että se toimii 24/7, on joustava ja mahdollisimman itsenäinen, mutta ei ole riippuvainen kotikoneestani. Sen minun piti selvittää.

Ratkaisun löytäminen vei useita päiviä. Tutkin lukuisia foorumeita ja erilaisia käyttöoppaita, joita ilman lähetykseni ei yksinkertaisesti olisi toiminut. Ja nyt kun keppos on onnistunut, tunnen tarvetta jakaa ratkaisuni. Näin tämä artikkeli syntyi.
Lyhyesti sanottuna lopullinen päätös oli seuraava: VPS + ffmeg + bash-skriptiAlla kuvailen ottamiani vaiheita ja puhun lähetystä järjestäessäni kohtaamistani sudenkuopista.
Vaihe 1 – Mistä lähetys tulee?
Aivan alussa oli tarpeen määrittää, mistä lähetys tulisi, mikä sen lähde olisi. Ensimmäinen mieleen tullut asia oli… kotitietokoneeltaVoisin lisätä videoita soittolistaan ja toistaa niitä millä tahansa videosoittimella. Sitten kaapata näytön ja lähettää sen YouTubeen. Mutta hylkäsin tämän vaihtoehdon melkein heti, koska se olisi edellyttänyt kotikoneeni pitämistä päällä koko ajan, mikä aiheuttaisi tuulettimen ääntä jopa yöllä ja lisäisi virrankulutusta (+100–150 kWh kuukaudessa). Se tarkoitti myös, etten voinut käyttää kotikonettani lähetyksen aikana, koska kaikki hiiren liikkeet olisivat näkyneet lähetyksessä.
Sitten aloin katsoa poispäin pilvipalvelutEtsin valmista palvelua, johon voisin ladata videoitani tai esimerkiksi lisätä linkkejä YouTube-videoihin ja pakata kaiken yhdeksi tauottomaksi lähetykseksi. En kuitenkaan löytänyt mitään sopivaa. Ehkä etsin huonosti. Ainoa, joka sopii tarpeisiini, on restream.io, palvelu, joka mahdollistaa samanaikaisen lähetyksen useille alustoille. He ilmeisesti sallivat omien videoiden lataamisen. Mutta tämä palvelu on luotu täysin eri tarkoituksiin, ja he odottavat lähetysten kestävän vain pari tuntia. Jos he voisivat järjestää 24/7-lähetyksen tämän palvelun kautta, se maksaisi kymmeniä, ellei satoja, dollareita kuukaudessa. Ja halusin todella järjestää lähetyksen joko ilmaiseksi tai minimaalisella taloudellisella investoinnilla.
Kävi selväksi, että lähetys tarvitsi joko erillinen laite Tai jopa erillinen tietokone. Harkitsin jotain Raspberry Pi:n kaltaista. Miksi vaivautua? Siinä ei ole jäähdytintä. Tallentaisin videon muistitikulle, kytkeisin ethernet-kaapelin ja antaisin sen olla jossain turvallisessa paikassa ja suoratoistaisin. Se oli yksi vaihtoehto. Mutta minulla ei ollut emolevyä eikä kokemusta siitä, joten suljin senkin pois.
Lopulta törmäsin keskusteluun, jossa keskusteltiin luomisesta oma palvelin Lähetykset. Se ei ollut aivan sitä, mitä etsin, mutta ymmärsin asian ytimen – tarvitsisin palvelimen! Keskustelussa he ehdottivat VPS + nginx + OBS -kokoonpanoa. Kävi selväksi, että tämä kokoonpano saattaisi toimia myös minulle. Ainoa asia, joka minua häiritsi, oli se, etten ollut koskaan aiemmin hallinnoinut palvelinta, ja ajattelin, että dedikoitu palvelin olisi monimutkainen ja kallis. Päätin selvittää, kuinka paljon peruskokoonpanolla varustetun palvelimen vuokraaminen maksaisi, ja olin positiivisesti yllättynyt.

Hinnat on lueteltu Valko-Venäjän ruplissa, ja ne ovat pelkkiä maapähkinöitä. Kontekstin vuoksi 8 Valko-Venäjän ruplaa on noin 3.5 dollaria eli 240 Venäjän ruplaa. Se on kuukauden hinta täysin toimivalla tietokoneella, joka on päällä 24/7 ja jossa on nopea internetyhteys. Jostain syystä tämä löytö oli minulle valtava ilo, ja vietin useita päiviä tuntien oloni uskomattoman onnelliseksi, kuin lapsi, joka on juuri löytänyt avaruusraketit. 🙂
Muuten, käytin hyväkseni ensimmäistä eteen tulevaa verkkosivustoa, kun googlasin "VPS-vuokraus". Saattoi olla edullisempiakin vaihtoehtoja, mutta hinta oli ihan ok, joten lopetin etsimisen.
Palvelinta luodessasi voit valita käyttöjärjestelmän, jolla se toimii. Lähetys voidaan järjestää millä tahansa luetelluista järjestelmistä, ja valinnan tulisi perustua mieltymyksiisi ja budjettiisi (palvelimelle, jossa on Windows (He pyytävät lisämaksua.) Valitsin CentOSYksinkertaisesti siksi, että minulla oli jonkin verran kokemusta työskentelystä hänen kanssaan aiemmin.

Vaihe 2 – Palvelimen asentaminen
Ensimmäinen asia, joka sinun on tehtävä palvelimen luomisen jälkeen, on muodostaa siihen SSH:n kautta. Aluksi käytin PuTTy:tä, mutta sitten vaihdoin Secure Shell -sovellukseen, joka toimii Google Chromessa. Mielestäni se on kätevämpi.
Sitten muutin isäntänimeä, asetin aikasynkronoinnin palvelimelle, päivitin järjestelmän, sähläsin iptablesin kanssa… ja tein vaikka mitä muuta, mutta en siksi, että se olisi ollut välttämätöntä. Nautin vain palvelimen asentamisesta ja pystyin tekemään sen. Rakastan sitä, kun asiat sujuvat 🙂
Tässä ovat tarvittavat vaiheet:
- Yhdistä EPEL-arkisto.
- Asenna FTP-palvelin (valitsin vsftp:n).
- Asenna ffmpeg.
En aio käydä läpi komentoja yksityiskohtaisesti; tämä ohje on enemmän käsitteellinen ja tarkoitettu välittämään yleinen toimintasuunnitelma. Jos kohtaat vaikeuksia jonkin vaiheen kanssa, ne voidaan ratkaista nopeasti etsimällä "CentOS yhdistä EPEL" tai "CentOS FTP-palvelimen asentaminen." Ja yksityiskohtaiset vaiheittaiset ohjeet löytyvät ensimmäisistä linkeistä.
Kuten aiemmin kirjoitin, tarvitsin VPS + nginx + OBS -asennuksen. VPS – valmis. Mutta kysymyksiä alkoi herätä muista asioista. OBS on lähetysohjelma, Open Broadcaster Software. Ja se toimii vain striimien kanssa, eli se esimerkiksi ottaa kuvan web-kamerasta ja lähettää sen. Tai se tallentaa näytön. Tai se ohjaa olemassa olevan lähetyksen toiselle sivustolle. Mutta minulla ei ole striimiä; minulla on vain joukko videotiedostoja, jotka täytyy muuntaa striimiksi.
Aloin kaivamaan tietoa ja törmäsin ffmpegiin. FFmpeg on joukko ilmaisia, avoimen lähdekoodin kirjastoja, joiden avulla voit tallentaa, muuntaa ja suoratoistaa digitaalista ääntä ja videota eri muodoissa.
Olin todella yllättynyt siitä, kuinka paljon ffmpeg pystyy tekemään. Se voi poimia ääntä videosta. Se voi leikata osan videosta ilman uudelleenkoodausta. Se voi muuntaa tiedostomuotoa toiseen. Ja paljon, paljon muuta. Voit jopa osoittaa sen tiedostoon, se muuntaa sen striimiksi ja lataa sen sitten YouTubeen. Siinä kaikki, koko ketju on valmis. Jäljellä on enää vain työstää hienommat yksityiskohdat.
Vaihe 3 – Lähetyksen asettaminen
Luodaan lähetys YouTubeen. Tässä vaiheessa tarvitsemme vain linkin ja suoratoistoavaimen. Ne on korostettu punaisella alla olevassa kuvakaappauksessa.

Edelleen lataamme videotiedostoja palvelimelle, jonka aiomme lähettää. Itse asiassa FTP:tä tarvitaan vain tähän vaiheeseen. Jos sinulla on toinen kätevä tapa ladata tiedostoja palvelimelle, sinun ei tarvitse määrittää FTP-palvelinta.
Lähetämme striimin YouTubeen. Lähetyksen aloittamiseksi sinun on suoritettava ffmpeg useilla attribuuteilla. Tämä on lyhin komento, jonka keksin:
ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
Dekoodausominaisuudet-re – ilmaisee, että tiedosto tulisi muuntaa suoratoistoksi.
-i – määrittää, mikä tiedosto toistetaan. On tärkeää, että komento suoritetaan samasta hakemistosta, jossa videotiedosto sijaitsee. Muussa tapauksessa sinun tulee määrittää tiedostoon absoluuttinen linkki, kuten /usr/media/lecture1.mp4.
-f – määrittää lähtötiedostomuodon. Minun tapauksessani ffmpeg muuntaa tiedostoni mp4-muodosta flv-muotoon lennossa.
Lopuksi syötämme YouTubesta saamamme tiedot lähetysasetusten sivulle. Tämä sisältää osoitteen, johon tiedot siirretään, ja lähetysavaimen, jotta lähetys näkyy juuri sinun kanavallasi.
Jos olet tehnyt kaiken oikein, YouTube näkee striimin lähetyksen tämän komennon suorittamisen jälkeen. Aloita lähetys napsauttamalla YouTuben "Aloita lähetys" -painiketta.
Vaihe 4 – Autonomian lisääminen
Onnittelut! Nyt tiedät, miten lähetys aloitetaan videotiedostosta. Mutta tämä ei riitä 24/7-lähetykseen. On tärkeää, että ensimmäisen videon toiston päätyttyä seuraavan toisto alkaa välittömästi, ja kun kaikki videot ovat loppuneet, toisto alkaa alusta.
Keksin seuraavan ratkaisun: loin .sh-tiedoston, johon kirjoitin komennon jokaiselle videotiedostolle ja aivan lopussa määritin komennon saman skriptin suorittamiseksi uudelleen. Tuloksena oli eräänlainen rekursio:
Команда 1... (запуск трансляции файла lecture1.mp4)
Команда 2... (запуск трансляции файла lecture2.mp4)
Команда 3... (запуск трансляции файла lecture3.mp4)
bash start.sh
Ja kyllä, se toimi. Tyytyväisenä itseeni käynnistin testilähetyksen ja menin nukkumaan.
Minua odotti tänä aamuna epämiellyttävä yllätys. Lähetys kesti vain pari minuuttia ja päättyi lähes välittömästi tietokoneen sammuttamisen jälkeen. Tutkimukset paljastivat, että tällä tavalla käynnistetyt komennot suoritetaan käyttäjän ollessa kirjautuneena palvelimelle. Heti kun katkaisin yhteyden, käynnistämäni komennot keskeytyivät. Tämän estämiseksi kirjoita komennon eteen bash suorita komento loppuun nohupTämä sallii käynnissä olevan prosessin suorittamisen läsnäolostasi riippumatta.
Skriptin lopullinen minimaalinen versio näyttää tältä:
ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture2.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture3.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
nohup bash start.sh $
Jossa start.sh on tämän komentosarjan sisältävä tiedosto. Tiedoston on sijaittava samassa hakemistossa kuin videotiedostot.
Dollarimerkin lisääminen loppuun mahdollistaa prosessin suorittamisen taustalla, jotta voit jatkaa konsolin käyttöä keskeyttämättä lähetystäsi.
Seuraavat bonukset saatiin:
- Voit vaihtaa tiedostojen toistoa manuaalisesti. Voit tehdä tämän lopettamalla parhaillaan käynnissä olevan ffmpeg-prosessin. Tämä käynnistää automaattisesti seuraavan tiedoston toiston listalla.
- Uusia videoita voidaan lisätä lähetykseen pysäyttämättä sitä. Lataa video vain palvelimelle, lisää komento skriptiin tiedoston käynnistämiseksi ja tallenna se. Siinä kaikki. Seuraavalla toistokerralla uusi tiedosto lähetetään vanhojen tiedostojen rinnalla.
Vaihe 5 – ffmpegin määrittäminen
Periaatteessa olisimme voineet lopettaa siihen. Mutta halusin tehdä lähetyksestä hieman katsojaystävällisemmän.
Oletetaan, että joku kirjautuu lähetykseen, aloittaa katsomisen, nauttii siitä ja haluaa katsoa luennon alusta, mutta lähetys ei salli kelaamista taaksepäin. Katsoakseen luennon alusta heidän on mentävä verkkosivustolleni ja ladattava kiinnostavan luennon tallenne. Mutta miten he selvittävät, mistä luennosta he ovat kiinnostuneita? Verkkosivustolla on jo 16 luentoa, ja lisää tulee joka viikko. En usko, että edes minä, joka olen kuvannut ja editoinut ne kaikki, pystyisin satunnaisesta katkelmasta selvittämään, mikä luento on kyseessä. Siksi jokainen luento on jotenkin merkittävä.
Tekstitysten lisääminen lähdevideotiedostoihin editointiohjelmassa ei tullut mieleeni. Minun piti varmistaa, että käytettiin alkuperäisiä tiedostoja, jotta suoratoiston tuki vaatisi minulta mahdollisimman vähän vaivaa.
Kävi ilmi, että ffmpeg voi auttaa minua tässäkin. Sillä on erityinen ominaisuus -vf, jonka avulla voit lisätä tekstiä videon päälle. Lisää tekstiä videoon lisäämällä komentoon seuraava koodinpätkä:
-vf drawtext="fontfile=OpenSans.ttf:text='Лекция 13: Психология эмоций. Как создавать радость?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"
Dekoodausparametritfontfile= – linkki fonttitiedostoon. Ilman tätä kuvatekstiä ei lisätä videoon. Helpoin tapa on sijoittaa fonttitiedosto samaan kansioon videon kanssa. Muussa tapauksessa sinun on määritettävä tiedoston koko polku.
text= – varsinainen teksti, joka on sijoitettava videon päälle.
fontsize= – fonttikoko pikseleinä.
fontcolor= – fontin väri.
borderw= – tekstin ympärillä olevan ääriviivan paksuus pikseleinä (minulla on valkoista tekstiä, jossa on 1 pikselin paksuinen musta ääriviiva).
bordercolor= – ääriviivan väri.
x= и y= – tekstikoordinaatit. Piste 0;0 Se sijaitsee vasemmassa yläkulmassa. Olen asettanut koordinaatit niin, että teksti sijaitsee vasemmassa alakulmassa, kun videon resoluutio on 1280x720 pikseliä.
Se näyttää tältä:

Vaihe 6 – Päätä lähetyksen laatu
Siinä kaikki, lähetys on valmis. FFmpeg lähettää, tiedostot toistetaan, eikä läsnäoloani vaadita lähetykseen. Jopa jokainen luento on allekirjoitettu. Siinä näyttää olevan kaikki.
Mutta uusi ongelma ilmeni: valitsin minimipalvelimen kokoonpanon, eikä se pystynyt käsittelemään striimiä. Palvelinkokoonpano oli: 1 ydin (luullakseni 2.2 GHz), 1 Gt RAM-muistia, 25 Gt SSD-levyä. RAM-muistia oli riittävästi, mutta suorittimen teho oli käytännössä täysin rajoitettu 100 prosenttiin (ja joskus jopa 102–103 prosenttiin). Tämä johti striimin jumiutumiseen muutaman sekunnin välein. Se oli rumaa.
Olisin voinut yksinkertaisesti valita kalliimman kaksiydinkokoonpanon; onneksi pilviteknologioiden ansiosta palvelimen kokoonpanon muuttaminen on yhtä helppoa kuin muutaman napin painallus. Mutta halusin pitää asiat toiminnassa sujuvasti minimikokoonpanolla. Aloin tutkia ffmpeg-dokumentaatiota, ja kyllä, siinä on myös asetuksia, joilla voi säätää järjestelmän kuormitusta.
Korkea kuvanlaatu voidaan saavuttaa kahdella tavalla: joko kuormittamalla prosessoria voimakkaasti tai käyttämällä suuria määriä lähtevää liikennettä. Siksi mitä suurempi prosessorin kapasiteetti on, sitä vähemmän kaistanleveyttä tarvitaan. Vaihtoehtoisesti prosessoria voidaan kuormittaa vähemmän, mutta silloin tarvitaan laaja kaistanleveys, jolla on runsaasti kaistanleveyttä. Jos sekä prosessori että lähtevä kaistanleveys/liikenne ovat rajoitettuja, kuvanlaatua on laskettava sujuvan suoratoiston varmistamiseksi.
Palvelimellani on käytettävissä 10 Mbps kaistanleveyttä. Tämä kaistanleveys on riittävä. Liikennerajoitus on kuitenkin 1 Tt kuukaudessa. Jotta pysyisin tässä rajoituksessa, lähtevän suoratoistoni ei saa ylittää noin 300 kt sekunnissa, mikä tarkoittaa, että lähtevän bittinopeuteni saa olla enintään 2,5 Mbps. YouTube muuten suosittelee suoratoistoa tällä bittinopeudella.
ffmpeg käyttää erilaisia lähestymistapoja järjestelmän kuormituksen säätelyyn. Tämä on hyvin dokumentoitu. Käytin lopulta kahta ominaisuutta: -crf и -preset.
Vakionopeuskerroin (CRF) – Tämä on kerroin, jota käytetään kuvanlaadun säätämiseen. CRF:llä voi olla arvoja väliltä 0–51, jossa 0 on alkuperäisen tiedoston laatu ja 51 on huonoin mahdollinen laatu. On suositeltavaa käyttää arvoja väliltä 17–28; oletusarvo on 23. Kertoimella 17 video on visuaalisesti identtinen alkuperäisen kanssa, mutta teknisesti se ei ole. Dokumentaatiossa todetaan myös, että lopullisen videon koko muuttuu eksponentiaalisesti määritetyn CRF:n mukaan. Kertoimen nostaminen 6 pisteellä kaksinkertaistaa lähtövideon bittinopeuden.
Jos CRF:n avulla voit valita lähtevän kuvan "painon", niin sen avulla esiasetukset (-esiasetukset) Voit määrittää, kuinka paljon prosessoria kuormitetaan. Tällä attribuutilla on seuraavat parametrit:
ultrafastsuperfastveryfastfasterfastmedium– oletusarvoslowslowerveryslow
Mitä "nopeampi" parametri on asetettu, sitä suurempi on prosessorin kuormitus.
Valitsin ensin presetin, joka oli yleisesti ottaen prosessorini ominaisuuksien rajoissa, ja hienosäädin sitten kuormitusta CRF:llä. Minun tapauksessani preset oli täydellinen. fastja crf:lle päädyin arvoon 24.
Johtopäätös
Siinä kaikki. Viimeinen käskyni lähetyksen aloittamiseksi oli tämä:
ffmpeg -re -i lecture1.mp4 -vf drawtext="fontfile=OpenSans.ttf:text='Лекция 1: Жонглирование картинами мира':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/%КЛЮЧ_ТРАНСЛЯЦИИ%
Tässä on enää kaksi kuvattavaa asiaa:
1) -c:v libx264 – tietyn koodekin määrittäminen lähdetiedoston käsittelyä varten.
2) -g 3 – avainruutujen lukumäärän selkeä määritys. Tässä tapauksessa se määrittää, että joka kolmannen ruudun tulisi olla avainruutu. Oletusarvo on joko 5 tai 8, mutta YouTube valittaa tästä ja pyytää vähintään kolmea.
Minkä laatuista lähetystä näet? .
Palvelimen kuormitus oli seuraava:


Valvontadatan perusteella on selvää, että prosessorin kuormitus vaihtelee 70 %:n ja 95 %:n välillä, eikä suoratoisto koskaan saavuta 100 %:ia viikon aikana. Tämä tarkoittaa, että prosessori on riittävä näillä asetuksilla.
Levyn kuormituksen osalta voin sanoa, että sitä ei juurikaan ladata ja tavallisen kiintolevyn pitäisi riittää lähetysten katseluun.
Mutta lähtevän liikenteen määrä huolestuttaa minua. Lähtevän datani määrä vaihtelee 450 ja 650 kt:n välillä sekunnissa. Kuukauden aikana se on noin 1,8 teratavua. Minun on ehkä ostettava lisää dataa tai päivitettävä kaksiytimiseen kokoonpanoon, koska en halua tinkiä kuvanlaadusta.
***
Yhteenvetona voidaan todeta, että tällaisen lähetyksen pystyttäminen alusta alkaen vie noin 1–2 tuntia. Suurin osa tästä ajasta käytetään videon lataamiseen palvelimelle.
Markkinointityökaluna tällaisen lähetyksen käynnistäminen ei kannattanut. Ehkä jos olisin nostanut katselukertoja niin, että YouTuben algoritmit poimivat sen ja näyttäisivät sen aktiivisesti suosituksissa, niin jotain olisi tapahtunut. Minun tapauksessani sitä katsottiin 58 kertaa 16 päivän jatkuvan lähetyksen aikana.
No niin. Lähetys sopii täydellisesti verkkosivustoni etusivulle. Se antoi minulle mahdollisuuden muodostaa nopeasti mielipiteeni luennoitsijasta ja itse luennoista.
Ja vielä yksi asia. On tärkeää, ettei lähetys loukkaa kenenkään tekijänoikeuksia, muuten se estetään. Olen tyytyväinen lähetykseeni, koska valitsin musiikkilisäkkeet nimenomaan siksi, että voisin käyttää niitä vapaasti, ja sisällöntuottaja istuu vieressäni tietokoneen ääressä ja on varsin tyytyväinen siihen, että käytän hänen sisältöään. 🙂
Mutta jos radio soi taustalla lähetyksesi aikana, jos käytit suosikkikappalettasi editoinnissa tai jos otit materiaalia suositusta musiikkivideosta, tv-sarjasta tai elokuvasta, lähetyksesi on vaarassa. On myös tärkeää, että lähetyksesi välittää edes jonkin verran merkitystä, muuten se voidaan estää roskapostina.
***
Siinä kaikki, mitä minulla on tällä erää. Toivottavasti tästä oppaasta on jollekin hyötyä. Jos sinulla on jotain lisättävää, kerrothan minulle. Kuulen mielelläni lisäyksistä tai selvennyksistä.
Lähde: will.com
