05.10.2022 22:05
1
V ramci mesiacov by som chcel riesit vlastnu platfomu pre vysielanie ziveho videa. Nie, nejdem robit youtube, ale pojde o dodatocnu funkcionalitu projektu na ktorom momentalne pracujem.

Mam skusenosti s rtsp takze nieco viem o tom ako to cele funguje, ale chcem na to ist inak :)

V principe chcem aby autori ktori budu video vysielat pouzili OBS(co ine, ze) a pouzivali pri tom AV1 kodek, kedze ma najlepsiu kompresiu(nejmensia velkost vs kvalita). Pokial viem, tak priama podpora tam nie je, ak ide o streamovanie a nie nahravanie. Myslim ze sa to da riesit tym ze sa video streamuje do ffmpegu a cez to potom von. To len zbezne co som cital. Takze bud tak, cize nemusim nic riesit, pripadne by som nechal niekomu nakodit OBS plugin ktory enkodovanie zmakne. Preco? Pretoze chcem setrit datovy tok a nechcem transkodovat stream na servery. A taktiez nechcem pouzivat to pripecene stare rtsp.

Dodatocne mi ide o to aby som mohol pouzit Scalable Video Coding a nie klasicky multicast pretoze zase - chcem setrit datovy tok a zamedzit transkodovaniu. Cize uzivatel si nevyberie rozlisenie/kvalitu streamu ale proste sa mu automaticky posiela tolko dat kolko je schopne jeho internetove pripojenie spracovat - to riesi server ktory sleduje uzivatelovo spojenie.

Ratam ze bude existovat jeden ingress server ktory potom len preposle stream na egress servery(ie. video cdn) kde sa nabufferuju(napriklad 30 sekund) a cele to teda bude len v ramke a jedina logika bude potom kontrolovat ten datovy tok ktory je divak schopny prijat.

Na front-ende bude web a mobilna aplikacia(web cez cordova/capacitor), v oboch pripadoch quasar, kde js bude proste pumpovat binarny datovy tok z websocketu do MediaSource ako src element pre html video.

Najnovsie verzie prehliadacov av1 uz podporuju takze to je ok a ak ma niekto starsiu verizu prehliadacu tak to nie je taky problem.

Zatial neviem kolko serverov by to vyzadovalo ale ak si odmyslim ingress tak ratam 2 EU, 2 USA a mozno po jendom v australii, cine.. na zaciatok ani to nie. Po case sa naroky zistia.

Takze by ma zuajimalo z tohto popisu ako to vidite, kde vydite mozne problemy a na co sa pripravit a taktiez ci mate niekto skusenost is tym SVC a teda ako degradovat ten stream podla toho co znesie divakove spojenie. Co som cital mp4 kontajner toto podporuje takze ak uzivatelia budu streamovat v av1+mp4 tak by to malo fungovat z fleku. Potom je len technicka otazka ako to realne riesit. Robim s Go a to nema pre video dobru podporu takze dufam ze nejake rustove alebo Cckove kniznice na to su?
06.10.2022 18:22
3
tak som cital nejake fora a zda sa ze av1 na streamovanie bude este nejaky cas trvat. ale v principe mi ide prave o to ist cestou toho SVC a nie multicastu. mate nejake napady ako na to? ako som pisal, nechcem transkodovat video na servery na viacero streamov s roznymi kvalitami, ale mat jeden ingress stream v najvyssej kvalite, ten distribuovat na "cdn" a odtial servirovat divakom podla schopnosti ich spojenia "osekavanim" toho zdrojoveho streamu pre daneho divaka.

---------- Příspěvek doplněn 07.10.2022 v 08:29 ----------

Tak som dospel k zaveru ze je to v pohode zvladnutelne a dost lahke ked nebudem transkodovat a nepouzijem CBR na vstupe. Teraz som skusal OBS 10sec desktop video a rozdiley su az 10x:
CBR 3.35 MB
VBR 343 kB
ABR 840 kB
CRF 344 kB

Netreba ziadne SVC ani transkodovanie do roznych kvalit a podobne blbosti :)
22.11.2022 21:40
4
Znovu obnovim temu, tento krat pridam poziadavku na transkodovanie ziveho videa do viacerych kvalit na konzumaciu cez mpeg-dash/hls. CDN bude riesena samostatne, o to mi tu teraz nejde.

Pozeral som rozne sluzby s tym ze ratam 7h * 1000 divakov ako priklad. Ceny behaju rozne od 108$ u bunny cdn az po 1600$ v mux.com a podobne. Teraz som pozeral azure a tam mi to vyslo na 16$ ale iba transkodovanie ziveho videa, takze tam bude urcite este milion poplatkov ako poznam cloudove sluzby.

Anyway, rozmyslal som ze co keby som pre vysielanie ziveho videa proste spravil iba v cloude nejaku malu spot vps instanciu, ktora by bezala iba pocas streamu, a vlastne by v nej bezal obycajny ffmpeg ktory by len zobral input a vyplul zopar mpeg-dash streamov(1080p, 720p, 480p, audio)? Jasne ze treba otestovat vhodnu konfiguraciu ale ked by som isiel cestou h264, co je dnes v kazdom procesore, pripadne mozno aj VP8/9, nemusim riesit drahe GPU na AV1/h265. Taka google cloud spot instancia e2-standard-4 s 4x vCPU(cize dve jadra, ak ratam ze vCPU je CPU thread), 16 giga ram je $0.040204/hod. Cize pri 7h je to 28 centov. Traffic nebude o moc drahsi. $0.085/GB * povedzme ze 10GB by bolo 85 centov. takze dokopy dolar a nejake drobne. Staci to len vytiahnut na vlastnu cdn a odtial distribuovat.

Co myslite?