Stjoer jo fideo's XNUMX/XNUMX út op YouTube

De lêste tiid film ik as hobby lêzingen fan in psycholooch dy't ik ken. Ik bewurkje it byldmateriaal en publisearje it op myn webside. In moanne lyn krige ik it idee om in 24/7 útstjoering fan dizze lêzingen op YouTube te organisearjen. In soarte fan tematyske "TV-kanaal" wijd oan persoanlike groei.

Ik wit hoe't ik in gewoane útstjoering meitsje. Mar hoe meitsje it sa dat it in útstjoering fan fideobestannen is? Sadat it 24/7 rint, fleksibel is, sa autonoom mooglik, en tagelyk op gjin inkelde manier ôfhinklik is fan myn thúskompjûter. Dit is wat ik útfine moast.

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

It duorre ferskate dagen om in oplossing te finen. Ik studearre in protte foarums en ferskate hantliedingen sûnder dat myn útstjoering gewoan net soe hawwe wurke. En no't de grap in súkses is, fiel ik de needsaak om myn oplossing te dielen. Dit is hoe't dit artikel ferskynde.

Koartsein, de definitive oplossing wie as folget: VPS + ffmeg + bash skript. Under de besuniging beskriuw ik de stappen dy't nommen binne en praat ik oer de falkûlen dy't ûntdutsen binne by it organisearjen fan de útstjoering.

Stap 1 - wêr sil de útstjoering wei komme?

Oan it begjin wie it nedich om te besluten wêr't de útstjoering soe wêze en wêr't de boarne soe wêze. It alderearste dat yn 't sin kaam wie fan jo thúskompjûter. Sammelje fideo's yn in playlist en begjin se te spyljen yn elke fideospieler. Nim dan it skermôfbylding en stjoer it út nei YouTube. Mar ik haw dizze opsje hast daliks ôfwiisd omdat... Om it út te fieren, moatte jo jo thúskomputer konstant oanhâlde, wat betsjut lûd fan koelers sels nachts en ferhege elektrisiteitsferbrûk (+100-150 kWh elke moanne). En it docht bliken dat jo jo thúskompjûter net brûke kinne tidens de útstjoering. elke beweging fan 'e mûs sil sichtber wêze yn' e útstjoering.

Doe begûn ik nei de kant te sjen wolk tsjinsten. Ik wie op syk nei in klearebare tsjinst wêr't ik myn fideo's uploade of bygelyks keppelings ynfoegje koe nei fideo's fan YouTube en it soe allegear yn ien non-stop útstjoering ferpakt wurde. Mar ik fûn neat geskikt. Miskien haw ik net goed socht. It iennichste ding dat past by de funksjonaliteit is restream.io, in tsjinst dy't helpt om tagelyk út te stjoeren nei ferskate platfoarms. Se lykje dat jo jo eigen fideo's kinne uploade. Mar dizze tsjinst is makke foar folslein oare doelen en se ferwachtsje dat de útstjoering mar in pear oeren sil duorje. Ik tink dat as it troch dizze tsjinst mooglik wêze soe om in rûn-de-klok útstjoering te organisearjen, dan soe it yn tsientallen, of sels hûnderten dollars yn 'e moanne sjitte. Mar ik woe de útstjoering noch fergees of mei minimale finansjele ynvestearring organisearje.

It waard dúdlik dat it foar de útstjoering ek nedich wie apart apparaat of sels in aparte kompjûter. Ik tocht oan iets as Raspberri Pi. En wat? Hy hat gjin koeler. Ik haw de fideo op in flash drive opnommen, de Ethernet-kabel ynstutsen en it earne op in ôfskieden plak lizze litten en it útstjoerd. Opsje. Mar ik hie noch it bestjoer sels noch ûnderfining mei it wurkjen, dat ik wegere dizze opsje ek.

Dêrtroch kaam ik in beskate diskusje tsjin dêr't se de skepping bepraten eigen tsjinner útstjoerings. It wie net krekt wat ik socht, mar ik krige it haadidee - jo kinne in tsjinner brûke! Yn dy diskusje waard foarsteld om in kombinaasje fan VPS + nginx + OBS te brûken. It waard dúdlik dat dizze kombinaasje ek by my passe koe. It iennichste ding dat my yn 'e war wie dat ik noait in tsjinner hie administrearre en it like my ta dat it hawwen fan myn eigen tawijd tsjinner betiizjend en djoer wie. Ik besleat om út te finen hoefolle it soe kostje om in tsjinner te hieren mei in minimale konfiguraasje en wie noflik ferrast.

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

Prizen wurde oanjûn yn Belarusian roebel en dit binne gewoan kruimels. Om te begripen, 8 Belarusian roebel is likernôch 3.5 dollar of 240 Russyske roebel. Foar in moanne gebrûk fan in folsleine kompjûter dy't 24/7 ynskeakele is en rappe ynternet tagong hat. Om ien of oare reden waard dizze ûntdekking tige bliid foar my en ferskate dagen rûn ik ferskriklik bliid om, as in bern dat romteraketten ûntduts :)

Trouwens, ik naam foardiel fan it oanbod fan 'e earste side dy't Google my joech foar de query "VPS-ferhier". Miskien binne der noch mear budzjetoplossingen, mar dizze priis paste my en ik seach net fierder.

By it oanmeitsjen fan in server kinne jo it bestjoeringssysteem selektearje wêrunder it sil rinne. Jo kinne in útstjoering organisearje op ien fan 'e neamde systemen en in kar meitsje op basis fan jo foarkarren en finansjele mooglikheden (foar in server mei Windows freegje se in ekstra fergoeding). Ik keas foar CentOS. Gewoan om't ik der earder net folle ûnderfining mei hie.

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

Stap 2 - Server opset

It earste ding dat jo nedich hawwe nei it meitsjen fan in server is om dêrmei te ferbinen fia SSH. Earst brûkte ik PuTTy, mar doe begon ik de Secure Shell-app te brûken, dy't rint yn Google Chrome. It blykte my handiger te wêzen.

Doe haw ik de hostnamme feroare, tiidsyngronisaasje op 'e tsjinner ynsteld, it systeem bywurke, mei iptables tinkt ... en in protte oare dingen dien, mar net om't it nedich wie. Ik wie gewoan ynteressearre yn it ynstellen fan de tsjinner en it wurke foar my. Ik hâld derfan as it wurket :)

Hjir binne de stappen dy't jo moatte nimme:

  1. Ferbine de EPEL repository.
  2. Stel in FTP-tsjinner op (ik keas vsftp).
  3. Ynstallearje ffmpeg.

Ik sil de kommando's net yn detail jaan; dizze ynstruksjes binne earder konseptueel om it algemiene plan fan aksje oer te bringen. As jo ​​​​problemen hawwe mei ien fan 'e stappen, kinne se fluch wurde oplost troch in sykmasjinefraach te brûken lykas "CentOS ferbine EPEL" of "CentOS ynstallearje FTP-tsjinner". En op 'e earste keppelings kinne jo detaillearre stap-foar-stap ynstruksjes fine.

Dat, lykas ik earder skreau, hie ik in kombinaasje fan VPS + nginx + OBS nedich. VPS - klear. Mar fragen begûnen te ûntstean op oare punten. OBS is in útstjoerprogramma, Open Broadcaster Software. En it wurket allinnich mei streamen i.e. bygelyks, it nimt in byld fan in webcam en stjoert it út. Of skerm opname. Of in al oanhâldende útstjoering wurdt omlaat nei in oare side. Mar ik haw gjin stream, Ik haw allinnich in set fan fideo triemmen dy't moatte wurde makke yn in stream.

Ik begon te graven yn dizze rjochting en kaam ffmpeg tsjin. FFmpeg is in set fan frije en iepen boarne bibleteken wêrmei jo digitale audio en fideo kinne opnimme, konvertearje en streame yn in ferskaat oan formaten.

En ik wie tige ferrast hoefolle ffmpeg kin dwaan. As jo ​​​​wolle, sil it lûd út 'e fideo ekstrahearje. As jo ​​​​wolle, sil it in fragmint fan 'e fideo snije sûnder opnij te kodearjen. As jo ​​​​wolle, sil it konvertearje fan it iene formaat nei it oare. En folle, folle mear. Oant it punt dat jo in bestân deroan kinne opjaan, sil it it konvertearje yn in stream en stjoert it nei YouTube sels. Dat is it, de ketting is gearstald. It bliuwt allinich om de nuânses te finalisearjen.

Stap 3 - útstjoering opset

Wy meitsje in útstjoering op YouTube. Op dit stadium hawwe wy allinich de keppeling en de útstjoerkaai nedich. Yn it skermôfbylding hjirûnder wurde se yn read markearre.

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

fierder upload fideobestannen nei de tsjinner, dy't wy fan plan binne út te stjoeren. Eigentlik is FTP allinich nedich foar dit poadium. As jo ​​​​in oare handige manier hawwe om bestannen nei de tsjinner op te laden, dan hoege jo gjin FTP-tsjinner yn te stellen.

Wy stjoere de stream oer nei YouTube. Om te begjinnen mei útstjoeren, moatte jo ffmpeg útfiere mei ferskate attributen. Dit is hoe't it koartste kommando dat ik krige der útsjocht:

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

Attribute dekodearring-re - jout oan dat de triem moat wurde omboud ta in stream.

-i - jout oan hokker triem moat wurde spile. It is wichtich dat it kommando wurdt lansearre út deselde map dêr't de fideo triem sels leit. Oars moatte jo in absolute keppeling nei it bestân opjaan, lykas /usr/media/lecture1.mp4.

-f - stelt it útfierbestânformaat yn. Yn myn gefal docht bliken dat ffmpeg myn bestân konvertearret fan mp4 nei flv on the fly.

En oan it ein jouwe wy de gegevens oan dy't wy fan YouTube hawwe nommen op 'e side fan útstjoerynstellingen, d.w.s. it adres wêrnei't jo gegevens oerdrage moatte, en de útstjoerkaai, sadat de útstjoering spesifyk op jo kanaal werjûn wurdt.

As jo ​​​​alles goed dien hawwe, sil YouTube nei it útfieren fan dit kommando de útstjoerde stream sjen. Om de útstjoering te begjinnen, moatte jo gewoan op de knop "Begjin útstjoering" yn YouTube sels klikke.

Stap 4 - foegje autonomy ta

Lokwinske! No witte jo hoe't jo begjinne útstjoeren fan in fideobestân. Mar dit is net genôch foar 24/7 omrop. It is wichtich dat nei't de earste fideo is foltôge te spyljen, de folgjende direkt begjint, en as alle fideo's werjûn wurde, begjint it ôfspieljen wer.

Ik kaam mei de folgjende opsje: meitsje in .sh-bestân wêryn ik in kommando foar elke fideobestân skreau en oan 'e ein in kommando oanjûn om itselde skript nochris út te fieren. It resultaat is in rekursje as dit:

Команда 1... (запуск трансляции файла lecture1.mp4)
Команда 2... (запуск трансляции файла lecture2.mp4)
Команда 3... (запуск трансляции файла lecture3.mp4)
bash start.sh

En, ja, it wurke. Tefreden mei mysels lansearre ik in testútstjoering en gie op bêd.

Moarns wachte my in onaangename ferrassing. It die bliken dat de útstjoering mar in pear minuten duorre en hast fuortendaliks einige doe't ik myn kompjûter útsette. It ûndersyk die bliken dat kommando's dy't op dizze manier lansearre binne, wurde útfierd wylst de brûker is oanmeld by de tsjinner. Sadree't ik losmakke, waarden de kommando's dy't ik rûn ûnderbrutsen. Om foar te kommen dat bart, is it genôch foar it team bash foegje it kommando ta nohup. Dit sil tastean it rinnende proses te rinnen nettsjinsteande jo oanwêzigens.

De definitive minimale ferzje fan it skript sjocht der sa út:

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 $

Wêr start.sh de triem is wêryn dit skript skreaun is. En dit bestân moat lizze yn deselde map as de fideobestannen.

It tafoegjen fan in dollarteken oan 'e ein lit it proses op' e eftergrûn rinne, sadat jo de konsole trochgean kinne brûke sûnder de útstjoering te ûnderbrekken.

De bonussen omfette de folgjende goodies:

  • Jo kinne it ôfspieljen fan bestân manuell wikselje. Om dit te dwaan moatte jo it op it stuit rinnende ffmpeg-proses "deadzje". Hjirnei sil it ôfspieljen fan it folgjende bestân út 'e list automatysk begjinne.
  • Nije fideo's kinne wurde tafoege oan de útstjoering sûnder de útstjoering te stopjen. Upload gewoan de fideo nei de tsjinner, foegje in kommando ta om dit bestân yn it skript út te fieren en bewarje it. Da's alles. Yn 'e folgjende ronde fan ôfspieljen sil it nije bestân tegearre mei de âlde bestannen wurde útstjoerd.

Stap 5 - oanpasse ffmpeg

Yn prinsipe hiene wy ​​dêr wol ophâlde kinnen. Mar ik woe de útstjoering wat freonliker meitsje foar sjoggers.

Litte wy sizze dat in persoan nei de útstjoering gie, begon te sjen, fûn it leuk en woe dizze lêzing fan it begjin ôf besjen, mar de útstjoering lit it weromdraaien net ta. Om in lêzing fan it begjin ôf te besjen, sil in persoan nei myn webside moatte gean en in opname krije fan 'e lêzing fan belang. Hoe kinne jo fertelle hokker lêzing him ynteressearret? Der steane al 16 lêzingen op de side en dêr binne der alle wiken mar mear. Ik tink dat ek ik, dy’t al dy lêzingen ferfilme en bewurke ha, net út in samar fragmint fêststelle sil hokker lêzing it is. Dêrom is it needsaaklik dat elke lêzing op ien of oare manier oanwiisd wurdt.

De opsje om titels ta te foegjen oan de boarne fideobestannen yn it bewurkingsprogramma paste my net. It wie nedich om te soargjen dat de orizjinele bestannen waarden brûkt. Dat it stypjen fan de útstjoering sa min mooglik lichemsbewegingen fan my freget.

It die bliken dat ffmpeg my hjir ek mei helpe koe. It hat in spesjale attribút -vf, wêrtroch tekst oer fideo pleatst wurde kin. Om tekst ta te foegjen oan in fideo, moatte jo it folgjende fragmint tafoegje oan it kommando:

-vf drawtext="fontfile=OpenSans.ttf:text='Лекция 13: Психология эмоций. Как создавать радость?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

Taljochting fan parametersfontfile= - keppeling nei it lettertypebestân. Sûnder dit sil de titel net oan 'e fideo tafoege wurde. De maklikste manier is om it lettertypebestân yn deselde map te pleatsen as de fideo. Of jo moatte it folsleine paad nei it bestân opjaan.

text= - eins de tekst sels dy't boppe op 'e fideo pleatst wurde moat.

fontsize= - lettertypegrutte yn piksels.

fontcolor= - lettertype kleur.

borderw= - de dikte fan de omtrek om de tekst yn piksels (ik haw wite tekst mei in swarte omtrek fan 1 piksel dik).

bordercolor= - omtrek kleur.

x= и y= - tekst koördinaten. Dot 0;0 leit yn 'e boppeste linker hoeke. Myn koördinaten wurde selektearre op sa'n manier dat de tekst wurdt pleatst yn de legere linker hoeke mei in fideo resolúsje fan 1280x720 piksels.

It sjocht der sa út:

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

Stap 6 - bepale de kwaliteit fan 'e útstjoering

Dat is it, de útstjoering is klear. FFmpeg útstjoerings, bestannen wurde spile, myn oanwêzigens is net nedich foar útstjoering. Sels elke lêzing is tekene. Sjoch as dat it is.

Mar noch ien nuânse ferskynde - ik keas de minimale serverkonfiguraasje en it helle de útstjoering net op. Server konfiguraasje: 1 kearn (lykas 2.2 GHz), 1 gigabyte RAM, 25 GB SSD. Der wie genôch RAM, mar de prosessor wie hast hielendal laden op 100% (en bytiden sels 102-103% :) Dit late ta de útstjoering freezing eltse pear sekonden. Net moai.

Jo kinne gewoan in djoerdere konfiguraasje nimme mei twa kearnen, lokkigernôch, mei wolktechnologyen, feroaret de serverkonfiguraasje troch op in pear knoppen te drukken. Mar ik woe passe yn de minimale konfiguraasje kapasiteit. Ik begon de ffmpeg-dokumintaasje te studearjen en ja, d'r binne ek ynstellingen dêr't jo de lêst op it systeem kinne regelje.

Hege ôfbyldingskwaliteit kin op twa manieren berikt wurde: of hege CPU-load of heech útgeand ferkear. It docht bliken dat de mear lading de prosessor kin nimme, de minder kanaalbânbreedte sil nedich wêze. Of jo kinne de prosessor net te folle laden, mar dan sille jo in breed kanaal nedich hawwe mei in grutte ferkearsromte. As d'r beheiningen binne foar sawol de prosessor as de grutte fan it útgeande kanaal / ferkear, dan moatte jo de kwaliteit fan 'e ôfbylding ferminderje sadat de útstjoering soepel giet.

Myn tsjinner hat tagong ta in 10 Mbit / s breed kanaal. Dizze breedte is krekt goed. Mar d'r is in ferkearslimyt - 1 TB per moanne. Dêrom, om te foldwaan oan ferkearsbeperkingen, soe myn útgeande stream net mear wêze moatte dan ~300 KB per sekonde, d.w.s. De bitrate fan 'e útgeande stream moat net mear wêze as 2,5 Mbit / s. YouTube advisearret trouwens útstjoeren mei dizze bitrate.

Om de lading op it systeem te regeljen, brûkt ffmpeg ferskate oanpak. Goed skreaun oer dit hjir. Ik haw úteinlik twa attributen brûkt: -crf и -preset.

Constant Rate Factor (CRF) - dit is in koeffizient troch wêrmei jo de kwaliteit fan 'e ôfbylding kinne oanpasse. CRF kin wearden hawwe fan 0 oant 51, wêrby't 0 de kwaliteit fan it boarnebestân is, 51 de minste kwaliteit is. It is oan te rieden om wearden te brûken fan 17 oant 28, de standert is 23. Mei in koeffizient fan 17 sil de fideo visueel identyk wêze oan it orizjineel, mar technysk sil it net itselde wêze. De dokumintaasje stelt ek dat de grutte fan 'e definitive fideo, ôfhinklik fan de oantsjutte CRF, eksponentiell feroaret, d.w.s. it ferheegjen fan de koeffizient mei 6 punten sil de bitrate fan 'e útgeande fideo ferdûbelje.

As jo ​​CRF brûke kinne jo it "gewicht" fan 'e útgeande ôfbylding selektearje, en dan brûke presets (-preset) jo kinne bepale hoe swier de prosessor sil wurde laden. Dit attribút hat de folgjende parameters:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - standertwearde
  • slow
  • slower
  • veryslow

De "sneller" de parameter wurdt oantsjutte, hoe heger de lading op 'e prosessor sil wêze.

Ik selektearre earst in foarynstelling dy't yn prinsipe te taai wie foar myn prosessor, en doe selekteare de lading fyner mei CRF. Yn myn gefal wurke de preset fast, en foar crf fêstige ik my op de wearde 24.

konklúzje

Da's alles. It lêste kommando foar it starten fan de útstjoering wie dit:

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/%КЛЮЧ_ТРАНСЛЯЦИИ%

D'r binne hjir mar twa net beskreaune punten oer:

1) -c:v libx264 - spesifisearje in spesifike codec foar wurkjen mei de boarne triem.
2) -g 3 - eksplisite oantsjutting fan it oantal kaai frames. Yn dit gefal wurdt spesifisearre dat elk tredde frame in kaaiframe wêze moat. De standertwearde is of 5 of 8, mar YouTube swarret en freget om op syn minst 3.

Jo kinne sjen hokker kwaliteit de útstjoering bliek te wêzen hjir.

De lading op de tsjinner wie as folget:

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

Stjoer jo fideo's XNUMX/XNUMX út op YouTube

Op grûn fan 'e monitoaringsgegevens is it dúdlik dat de prosessorlading farieart fan 70% oant 95% en yn' e wike hat de útstjoering nea 100% berikt. Dit betsjut dat mei dizze ynstellingen de prosessor genôch is.

Troch it laden fan de skiif, kin ik sizze dat it hast net laden is en in gewoane HDD moat genôch wêze foar útstjoering.

Mar de hoemannichte útgeande ferkear makket my soargen. It docht bliken dat myn útgeande stream rint fan 450 oant 650 KB per sekonde. Yn in moanne sil dit sa'n 1,8 terabyte wêze. Jo moatte miskien ekstra ferkear keapje of oerskeakelje nei in konfiguraasje mei twa kearnen omdat ... Ik soe de kwaliteit fan 'e foto net wolle ferminderje.

***

Dêrtroch sil ik sizze dat it opsetten fan sa'n útstjoering fanôf it begjin sa'n 1-2 oeren duorret. Boppedat sil it uploaden fan de fideo nei de tsjinner de measte tiid nimme.

De lansearring fan sa'n útstjoering rjochtfeardige him net as marketingynstrumint. Miskien as wy werjeften ferheegje sadat YouTube-algoritmen dizze útstjoering opnimme en it aktyf begjinne te sjen yn oanbefellings, dan soe der wat wurkje. Yn myn gefal waard it yn 16 dagen fan trochgeande útstjoering 58 kear besjoen.

Dat is goed. De útstjoering past harmonieus op de haadside fan myn webside. Dit joech my de kâns om gau in eigen miening te foarmjen oer de dosint en de lêzingen sels.

En in momint. It is wichtich dat de útstjoering it auteursrjocht fan gjinien skeint, oars wurdt it blokkearre. Ik bin kalm oer myn útstjoering om't... Ik keas spesifyk muzykynfoegingen mei fergees gebrûk, en de auteur fan 'e ynhâld sit op in komputer yn 'e buert en is der hielendal net tsjin dat ik har ynhâld brûke :)

Mar as jo earne in radio op 'e eftergrûn spylje yn jo útstjoering, of jo hawwe jo favorite spoar brûkt by it bewurkjen, of jo hawwe in fideosekwinsje naam fan in populêre muzykfideo, tv-searje of film, dan is jo útstjoering yn gefaar. It is ek wichtich dat de útstjoering op syn minst in minimale semantyske lading draacht, oars kin it blokkearre wurde as spam.

***

Dat is alles wat ik haw. Ik hoopje dat dit hânboek sil tsjinje immen goed. No, as jo wat hawwe te foegjen, skriuw dan, ik sil bliid wêze om de tafoegings en ferdúdlikingen oan it artikel te lêzen.

Boarne: www.habr.com

Add a comment