Nepretržitý stream 24/7, ktorý sa medzi videami nespojuje: jeden ffmpeg napájaný cez rúru
Video
Živý kanál, ktorý nonstop prehráva hotové videá, má dva jednoduché návrhy a oba niečo obetujú. Reštartovanie ffmpeg pre každé video preruší RTMP pripojenie pri každom prepnutí. Zoznam concat sa načíta raz na začiatku, takže nové video čaká na ďalší reštart.
Návrh
Každé video sa raz prevedie na MPEG-TS v rozlíšení a snímkovej frekvencii streamu; vertikálne video je umiestnené na rozmazanú kópiu seba samého namiesto čiernych pruhov. Jeden proces ffmpeg číta MPEG-TS zo svojho štandardného vstupu a kóduje pri konštantnom bitrate s kľúčovým snímkom každé dve sekundy, ako očakáva živý ingest. Malý podávač zapisuje pripravené súbory do tejto rúry jeden za druhým v reálnom čase a pri každom prepnutí vyberie ďalší súbor: videá, ktoré sa ešte neprehrali, potom tie, ktoré boli prehrané najdlhšie dozadu. Čítačka MPEG-TS vo ffmpeg vidí, že časové značky každého súboru začínajú odznova, a posunie ich, takže výstup beží bez prerušenia.
Detail 1: tempo od prvého bajtu
Naša prvá verzia spustila hodiny, keď sa spustil ffmpeg. Príprava prvého súboru trvala deväť sekúnd, takže podávač si myslel, že mešká o deväť sekúnd, a poslal ich všetky naraz. Spustenie hodín pri prvom zapísanom bajte to opravilo: beh dlhý 53 sekúnd vytvoril 53 sekúnd streamu.
Detail 2: zvuk na spoji
Pri prepnutí začal zvuk ďalšieho súboru 17 milisekúnd pred koncom zvuku predchádzajúceho súboru. Enkodér varoval, že jeho vstup ide „späť v čase“, a muxer opravil časovú značku. Prevzorkovanie pomocou aresample=async=1:min_hard_comp=0.01:first_pts=0 ostrihne alebo doplní takéto prekrytia skôr, než ich uvidí enkodér. Pri behu trvajúcom niečo vyše minúty s piatimi prepnutiami všetky časové značky zvuku aj videa v prijatom streame rástli a stream sa dekodoval bez jedinej chyby.
Detail 3: niektoré varovania sú normálne
Každý súbor reštartuje svoje počítadlá MPEG-TS a svoje hodiny, takže ffmpeg pri každom prepnutí hlási „Packet corrupt“ a „timestamp discontinuity“. Tieto riadky sú očakávané a držíme ich mimo logu, aby skutočné chyby vynikli.
Watchdog
Ak ffmpeg skončí alebo sa jeho priebeh na minútu zastaví, stream sa reštartuje s postupne sa predlžujúcimi pauzami a po opakovaných zlyhaniach odošle správu. V našom teste sme enkóder ukončili manuálne; stream bol späť o sedem sekúnd a video pridané počas behu sa pripojilo do rotácie bez nutnosti znovupripojenia. Reštart je krátke znovupripojenie, preto nastavte vysielanie na YouTube tak, aby sa spúšťalo automaticky a automaticky sa nezastavovalo. Streamovací kľúč je v každom riadku logu maskovaný, vrátane toho od ffmpeg. Studio dodáva tento živý kanál ako službu systemd.