Jak jsme streamovali OpenAlt na Vhsky.cz

Když jsme před rokem spustili Vhsky.cz, dělali jsme to kvůli tomu, abychom poskytli alternativu k téměř monopolnímu YouTube. Myslím si, že distribuce videa je dnes natolik důležitá věc, že je to dovednost, kterou bychom si měli uchovat.

Popravdě poslední roky mě trochu štvalo, že i open-source konference se u streamování přednášek prostě jen spoléhaly na YouTube, aniž by se to pokusily zajistit otevřenější cestou. Jsme komunita technologických nadšenců, kteří se vrtají v kdečem jsou hrdí na to, když si věci dokážou zařídit sami, ale videa prostě nasypeme na YouTube, i když nástroje na to, jak si to můžeme zařídit sami, dnes máme. Přitom v zahraničí je běžné, že si tohle open-source konference řeší samy. Stačí se podívat třeba na FOSDEM nebo Chaos Communication Congress.

Proto od začátku spuštění Vhsky.cz bylo mojí ambicí přenášet na nich přednášky OpenAltu, konference, na níž mi záleží a do jejíž organizace se zapojuji. Prvním krůčkem bylo nahrání videí ze starších ročníků. V průběhu roku jsme zkoušeli streamování ze srazů OpenAltu. Zjistili jsme, že to jde, ale jeden stream není úplně stress test, který dokáže, že zvládneme přenášet celou konferenci.

Nahrávání na OpenAltu má už několik let na starosti Michal Vašíček a ten si dokázal vytvořit takový systém, že nahrávání ze všech místností zvládne skoro sám (s asistencí session chairs v jednotlivých místnostech). Všechna čest mu, protože na jiných konferencích s podobným rozsahem záznamů na to mají celé týmy. Nicméně do této části celého procesu nevidím, proto se jí ani nebudu věnovat. Michalův úkol byl dostat streamy na náš server, náš úkol byl dostat je k divákům.

Zázemí AV OpenAltu s běžícími streamy. Autor: Michal Stanke.

Zátěžový test

K opravdovému stress testu jsme se dostali až minulý víkend, kdy Bashy připravila setup se sedmi streamy v rozlišení 1440p. Tedy přesně to, co nás čekalo na OpenAltu. Vhsky.cz běží na celkem výkonném serveru s 32jádrovým procesorem i9-13900 a 96 GB RAM. Není ale celý dedikovaný pro PeerTube. Ten se o něj musí dělit s dalšími službami OSCloud.

Do té doby jsme výkonem nijak limitovaní nebyli, ale sedm streamů v rozlišení 1440p bylo opravdu na hraně schopností serveru a streamy občas vypadávaly. Ve skutečnosti šlo totiž o 14 kontinuálních převodů, protože jsme streamovali ve 1440p, ale také 480p. I když rozlišení neměníte, pořád musíte video transkódovat, abyste mohli využít užitečné vlastnostni při distribuci, kterým se věnuji dál v textu. Rozlišení 480p jsme potom měli pro mobilní zařízení a pomalá připojení.

Vzdálený runner

Věděli jsme, že samotný server Vhsky.cz to nedá. Naštěstí PeerTube umožňuje zapojit tzv. vzdálené runnery. Na ně instance PeerTube posílá video k transkódování a sama se věnuje jen rozdělování úkolů, ukládání a distribuci videa uživatelům. Není ale možné část úloh dělat lokálně a část předávat jinam. Pokud se transkódování přepne na vzdálené runnery, musí všechno transkódování dělat oni. Museli jsme tedy někde najít dostatek výkonu, který by pokryl vše.

Oslovil jsem několik hostingů, o kterých vím, že jsou přátelské k open-source aktivitám. Adam Štrauch z Roští.cz mi odpověděl prakticky obratem, že mají záložní stroj, který v létě reklamovali a zatím ho nezkoušeli pod zátěží. Na to jsem mu napsal, že pokud si chtějí vyzkoušet, jak se bude pod zátěží chovat, mají teď dobrou příležitost. A domluvili jsme se.

Jednalo se o opravdu výkonný stroj: 48jádrový Ryzen s 1 TB RAM. Nic jiného na něm neběželo, takže veškerý výkon jsme mohli použít na transkódování videa. Po instalaci runneru na něj jsme stress testem prošli. Jak se ukázalo server s runnerem měl ještě velkou rezervu. Chvíli jsem si pohrával s myšlenkou, že bychom mohli zařadit ještě jedno rozlišení, do kterého bychom videa transkódovali, ale pak jsem si řekl, že to raději nebudeme pokoušet. Stress test nám totiž ukázal, že streamy stíháme transkódovat, ale už ne, jak se to bude chovat se všemi diváky. Výkonnostní rezerva se tak může hodit.

Zátěž serveru s runnerem během stress testu. Autor: Adam Štrauch.

Chytrá distribuce videa

Jakmile jsme vyřešili výkon pro transkódování, přišel čas se podívat na to, jak si PeerTube poradí s distribucí videa. Vhsky.cz mají šířku pásma 1 Gbps, což není na takovou službu mnoho. Pokud bychom všechny obsluhovali streamem v rozlišení 1440p, mohli bychom obsloužit maximálně 100 diváků. Naštěstí v tomto pomáhá další výborná vlastnost PeerTube: podpora pro P2P sdílení pomocí HLS a WebRTC.

Díky němu se každý divák (pokud není na mobilním zařízení a datech) stává také peerem a sdílí stream s ostatními. Čím více diváků stream sleduje, tím více si video sdílí mezi sebou a zátěž serveru neroste takovým tempem.

Určitou představu o tom, co by Vhsky mohly unést, nám dával dva roky starý stress test, který provedli přímo vývojáři PeerTube. Ti si vytvořili farmu 1000 prohlížečů, kterými simulovali 1000 tisíc diváků sledující stejný stream nebo VOD. I když použili nepříliš výkonný server (čtyřjádrový i7-8700 CPU @ 3.20GHz, pomalý harddisk, 4 GB RAM, 1 Gbps připojení), dokázali 1000 diváků obsloužit především díky sdílení dat mezi nimi. U VOD to dokázalo šetřit až 98 % šířky pásma serveru, u live streamu to bylo 75 %:

Pokud bychom dosáhli podobného poměru, tak i po odečtení 200 Mbps na režii (běh ostatních služeb, přijímání streamů, výměna dat s runnerem), bychom dokázali obsloužit přes 300 diváků v rozlišení 1440p a ještě násobky toho v rozlišení 480p. Vzhledem k tomu, že loni měl OpenAlt asi 160 online diváků celkově, byla to rezerva víc než dostatečná.

Ostrý provoz

V sobotu Michal nahodil streamy a začal na Vhsky.cz posílat video přes RTMP. A ono to fungovalo. Streamy jely plynule a bez sekání. Nakonec jsme letos měli maximálně desítky online diváků naráz, což nepředstavovalo z pohledu distribuce žádný problém.

V praxi úspora stažených dat ze serveru velká i při pouhých 5 peerech na jednom streamu a rozlišení.

Naše řešení, které nám PeerTube umožnil flexibilně poskládat ze serverů v různých datacentrech, má jednu nevýhodu: vytváří určitou latenci. V našem případě to ale znamenalo, že byl stream na Vhsky.cz o zhruba 5-10 sekund za streamem na YouTube, což si myslím, že nepředstavuje problém. Přece jenom nevysíláme sportovní přenos.

Diagram řešení streamingu pro OpenAlt.

Drobné problémy

Na drobné problémy jsme ale naráželi a získali zkušenosti, které člověk může získat jen praxí. V průběhu soboty jsme třeba zjistili, že stream občas padá z 1440p do 480p, i když propustnost měla být dostatečná. Bylo to tím, že přehrávač měl pocit, že se dodávky kusů streamů zpožďují a preventivně přepínal do nižšího rozlišení. Nastavení vyšší cache sice mírně zvýšilo zpoždění streamu, ale výrazně omezilo přepínání do nižšího rozlišení.

Subjektivně ani 480p nebyl problém. Většinu obrazu představoval červený rám s logem OpenAltu a slidy. Přednášející byl pouze v malém okénku. Snížení rozlišení způsobilo pouze mírné rozostření písma na slidech, čehož bych si ani jako problému nevšiml, kdybych se na to nezaměřoval. Dokázal bych si tak představit streamovat jen v rozlišení 480p, kdyby to bylo potřeba. Ale je jasné, že očekávání, co se týče rozlišení, jsou dnes jinde, tak streamujeme v 1440p, když můžeme.

Za celý víkend nám vypadl stream z jedné místnosti asi na dvě přednášky. U některých místností si diváci stěžovali na to, že byl stream příliš po tichu, ale to byl problém na vstupu. U nahrávek se potom tento problém opravil.

U nahrávání přednášek jako VOD jsem pak narazili na to, že PeerTube samotný neumí hromadný upload. Nicméně existují pro to nástroje a příště bychom je rádi použili, ať je nahrávání rychlejší a pohodlnější. Některá videa se také nahrála se špatnou orientací, což byl asi problém v jejich metadatech, protože PeerTube nebyl jediný přehrávač, který je tak zobrazil. Nicméně YouTube si s tím dokázal poradit. Jejich překódování ale problém vyřešilo.

V sobotu jsme také zkoušeli kvůli výkonu první hotová videa přednášek transkódovat na externím runneru. U nich se zobrazuje proužek s informací, že se video nepodařilo uložit do externího úložiště, i když v object storage zjevně uložené jsou. Zatím zjišťujeme, jak se této chybové hlášky, která ale nemá žádný vliv na funkci, zbavit.

Menší vsuvka – má přednáška o PeerTube na letošním OpenAltu. Streamovaná jak jinak než přes PeerTube:

Poděkování a podpora

Myslím si, že na to, že jsme to dělali úplně poprvé, to dopadlo velmi dobře a jsem rád, že jsme ukázali, že si takovou konferenci dokáže komunita odstreamovat vlastními prostředky. Chtěl bych poděkovat všem, kteří se na tom podíleli. Od Michala, který zvládal pořizovat záběry v sedmi přednáškovkách naráz, přes Bashy, která nám pomáhala se stress testem, až po Archose a Schmakera, kteří odváděli práci na straně Vhsek, a Adama Štraucha, který nám zapůjčil stroj pro externí runner.

Pokud se vám líbí, co děláme, a oceňujete, že někdo dává streamy a přednášky z OpenAltu k dispozici na otevřené platformě bez reklam a šmírování, budeme rádi, když nás podpoříte příspěvkem na jeden z účtů OSCloudu, v rámci kterého Vhsky.cz běží. PeerTube je skvělý nástroj, který nám umožňuje provozovat takovou službu, aniž bychom museli mít infrastrukturu Googlu, zdarma to ale taky nejede.

9 komentářů: „Jak jsme streamovali OpenAlt na Vhsky.cz“

  1. Vít Skalický :fedora: avatar

    @sesivanyblog moc dobrá práce, v mezičase jsem se na pár přednášek díval a streamy fungovaly velmi dobře.

  2. Jozef Mlich avatar

    @sesivanyblog Já jen z povzdálí sledoval kolik práce a úmorné dřiny za tím je. A to jak ze strany vhsky.cz, tak i všech co připravovali streamování na místě.

    Za sebe můžu říct jenom: klobouk dolů, úžasná práce všech zúčastněných!

    P.S. věřil jsem Vám od začátku a rozhodl jsem se při propagaci záměrně zamlčovat informaci, že založní stream jede ještě na youtube. O streamování na svobodnou platformu jsme se bavili už několik let. Jsem velmi rád, že se to konečně podařilo!

    1. Chick Enheart avatar

      @jmlich @sesivanyblog Jsem opravdu rád, že neco takového probíhá a přeju vám, ať se vše jen zlepšuje a díky za fajn přednášky, ale dovolím si jedno rýpnutí.
      Na stránkách jste měli uvedeno toto :
      https://www.openalt.cz/2025/faq/navstevnici/#konferenceonline
      Chystáme potřebnou techniku a instrukce pro dobrovolníky tak, abyste konferenci mohli sledovat i online. Odkazy na streamy se v programu objeví až těsně před začátkem konference. Po skončení konfererence bude stream dále dostupný a následně sestříhaný na jednotlivé přednášky 1/2

      1. Chick Enheart avatar

        @jmlich @sesivanyblog Až na to, že nikde ta informace nebyla, tedy pokud opravdu nejsem slepý. 🙈
        Takže jsem v panice všude hledal odkazy na jednotlivé streamy, až jsem v záchvatu paniky zkusil #YouTube, kde jsem na ně narazil. A až pak mě napadlo se podívat na #vhsky 2/2

        1. Jozef Mlich avatar

          @chick_enheart @sesivanyblog
          Ano to se nepodarilo. Odkazy jsem dostal 9:17. Commit co to mel poslat na web sel 9:25.
          https://gitlab.com/OpenAlt/openalt-cz/-/commit/01337c0f5b413d9538385dc25e92d12c6ce23f45

          Od 9:30 jsem mel v ruce mikrofon.

          Preklep ksem nasel az 10:11 https://gitlab.com/OpenAlt/openalt-cz/-/commit/f83abf29b065981344b2c4c01b7077bdbc560156

          9:57 jsem daval odkaz na mastodon
          https://fosstodon.org/@openalt@mastodon.social/115473608702516123

          1. Chick Enheart avatar

            @jmlich @sesivanyblog Téměř detektivní zápletka 😁 Dík za vysvětlení 👍

  3. Jan Korbel 🐧 avatar

    @sesivanyblog Díky za streamy a celou instanci vhs 👍

  4. […] The blog post was originally published on my Czech blog. […]

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *