En 24/7-strøm som ikke kobler seg på nytt mellom videoer: én ffmpeg matet gjennom et rør
Video
En live-kanal som spiller ferdige videoer i døgnet har to enkle løsninger, og begge mister noe. Å starte ffmpeg på nytt for hver video mister RTMP-tilkoblingen ved hver overgang. En concat-spilleliste leses én gang ved start, så en ny video må vente til neste omstart.
Løsningen
Hver video konverteres én gang til MPEG-TS i strømmens størrelse og bildefrekvens; en vertikal video ligger på en uskarpen kopiering av seg selv i stedet for svart bakgrunn. Én ffmpeg-prosess leser MPEG-TS fra standard inndata og koder med konstant bitrate med et nøkkelbilde hvert annet sekund, som live-inntak forventer. En liten tilfører skriver de forberedte filene inn i røret etter hverandre, i sanntidstempo, og velger neste fil ved hver overgang: videoer som aldri er spilt først, deretter den som er minst nylig spilt. ffmpeg sin MPEG-TS-leser ser at tidsstemplene for hver fil starter på nytt og forskyver dem, slik at utdataen kjører videre uten avbrudd.
Detalj én: tempo fra første byte
Vår første versjon startet klokken når ffmpeg startet. Å forberede den første filen tok ni sekunder, så tilføreren trodde den var ni sekunder bak og sendte dem alle på én gang. Å starte klokken ved første byte skrevet løste det: en 53-sekunders kjøring ga 53 sekunder med strøm.
Detalj to: lyden ved overgangen
Ved en overgang begynte lyden fra neste fil 17 millisekunder før lyden fra forrige fil sluttet. Koderen advarte om at inndataene gikk «bakover i tid», og muxeren lappet et tidsstempel. Omprøving med aresample=async=1:min_hard_comp=0.01:first_pts=0 klipper eller fyller ut slike overlapp før koderen ser dem. I en kjøring på litt over ett minutt med fem overganger steg alle lyd- og videotidsstempler i den mottatte strømmen, og strømmen ble dekodet uten en eneste feil.
Detalj tre: noen advarsler er normale
Hver fil starter MPEG-TS-tellerne og klokken på nytt, så ffmpeg rapporterer «Packet corrupt» og «timestamp discontinuity» ved hver overgang. Disse linjene er forventet, og vi holder dem ute av loggen slik at virkelige feil skiller seg ut.
Overvåkeren
Hvis ffmpeg avsluttes eller fremdriften stopper i ett minutt, starter strømmen på nytt med økende pauser og sender en melding etter gjentatte feil. I testen vår drepte vi koderen manuelt; strømmen var tilbake syv sekunder senere, og en video som ble lagt til underveis, ble tatt med i rotasjonen uten at tilkoblingen måtte gjenopprettes. En omstart er en kort gjenoppkobling, så sett opp YouTube-sendingen til å starte automatisk og ikke stoppe automatisk. Strømmenøkkelen er maskert i alle logglinjer, også i ffmpegs egne. Studio leverer denne livekanalen som en systemd-tjeneste.