Je Jellyfin-server hapert op tv omdat je deze instelling hebt gemist
Laatst zat ik na een lange dag om een film te kijken. Ik zette trots de tv aan en ging rechtstreeks naar Jellyfin. Ik was best blij dat ik niet met de gebruikelijke netwerkproblemen van streamingdiensten hoefde om te gaan, omdat ik de tijd heb genomen om mijn volledige mediatheek zelf te hosten op mijn eigen hardware. Ik drukte op afspelen en inderdaad, de film begint meteen te spelen. Geen laadcirkel, geen bufferen — geweldig.
Maar toen merkte ik een heel vervelende micro-stottering op. Het was alsof er elke twee seconden één seconde van de film in een soort rare slow motion werd afgespeeld. Misschien zou iemand anders het niet hebben opgemerkt, maar het dreef mij echt tot waanzin. In het begin kon ik er niets aan doen. Ik controleerde alles, van mijn ethernetkabels tot het CPU-gebruik van mijn server, maar het kwam allemaal neer op één simpele, over het hoofd geziene instelling.
Laten we het hebben over de wiskunde van frames
Vierkante pennen en ronde verversingssnelheden
Wanneer een stream haperde, was mijn instinct om de pijp of de motor de schuld te geven. De mijne wordt op de server getranscodeerd, niet op de tv. Bovendien, toen ik dezelfde film met hoge bitrate op mijn MacBook of direct op de pc die als server fungeerde afspeelde, verliep de weergave vlekkeloos. De boosdoener, zo bleek, was een verschil in frame rate.
De meeste films worden opgenomen met 23,976 FPS, wat we meestal gewoon 24p noemen. Mijn tv, net als bijna elk modern scherm, heeft een 60Hz-scherm, wat betekent dat hij zestig keer per seconde verversd wordt. Mijn Android-tv-box stond echter momenteel ingesteld op 50Hz. Als je probeert uit te rekenen hoe een film van 24 FPS past in een verversingssnelheid van 50Hz of 60Hz, besef je al snel waarom mijn weergave zo vreemd aanvoelde.
Wanneer je een film van 24 FPS op een 60Hz scherm afspeelt, moet het apparaat iets doen dat een 3:2 pull-down wordt genoemd. Omdat 60 niet gelijkmatig deelbaar is door 24, komt de berekening uit op 60/24=2,5. Om dit te laten werken, toont de speler het eerste beeld van de film drie keer en het tweede beeld twee keer (3 + 2=5). Dit patroon herhaalt zich gedurende de seconde, wat optelt tot 60 verversingen. Dit veroorzaakt meestal een heel lichte "judder" waar de meeste mensen aan gewend zijn, maar wanneer je apparaat is ingesteld op 50Hz, wordt de wiskunde nog lastiger.
Voor een 50Hz-uitgang wordt de berekening 50/23,976 ≈ 2,08. Er is geen nette, gelijkmatige manier om die frames te verdelen. De hardware probeert in feite een vierkante pin in een rond gat te duwen, waardoor frames herhaald of overgeslagen worden op onregelmatige intervallen om de video in sync te houden met de audiotrack. Dat ritmische slow-motion effect dat ik zag, was het resultaat van het tv-doosje dat probeerde zichzelf elke paar seconden bij te halen. Het eindresultaat was een frame-mismatch tussen het videobestand en de daadwerkelijke weergave, en dat was de oorzaak van de microstuttering.
De oplossing vinden in Jellyfin
Het is maar één schakelaar
Gelukkig is er een gemakkelijke instelling die dit oplost, maar je moet wel weten waar je moet zoeken. Ik vond deze eigenlijk niet in de officiële Jellyfin-client voor Android TV, die wat eenvoudiger is. In plaats daarvan gebruik ik een alternatieve client genaamd Dune. Als je een geavanceerdere speler gebruikt zoals Dune of zelfs iets als Kodi, heb je veel meer controle over hoe de hardware het videosignaal verwerkt.
De oplossing is een functie genaamd Refresh Rate Switching. Wat dit doet, is je tv-box vertellen om zijn output fysiek aan te passen aan de framerate van de film die je kijkt. Als je op afspelen drukt bij een 24p-film, stopt de tv-box met uitzenden bij 60Hz of 50Hz en schakelt hij zijn hardware over naar 24Hz (of een veelvoud zoals 48Hz of 120Hz). Dit creëert een 1:1 cadens, waarbij elk frame van de film exact even lang op het scherm blijft.
In Dune hoef je alleen maar naar de weergave-instellingen te gaan, Geavanceerde instellingen, en de optie Verversingssnelheid wisselen te schakelen naar Schaal op apparaat. Op het moment dat ik dit schakelde en terugging naar mijn film, was het verschil dag en nacht. Toen ik op afspelen drukte, ging het scherm een fractie van een seconde op zwart — wat de HDMI "handshake" is die plaatsvindt terwijl de apparaten synchroniseren met de nieuwe verversingssnelheid — en toen begon de film. Die vervelende, ritmische haperingen waren volledig verdwenen.
Je hebt drie opties voor het wisselen van verversingssnelheid. Uitschakelen is degene die we niet willen. Het selecteren van Schaal op apparaat legt de verantwoordelijkheid voor het wisselen bij de box, en Schaal op TV legt deze bij de TV. De tweede optie is wat onvoorspelbaar, omdat het via HDMI-CEC met het TV-scherm moet onderhandelen om zichzelf op 24Hz in te stellen.
Het draait allemaal om timing
Met deze instelling zie je nu eindelijk de beweging precies zoals de regisseur en de editors het bedoeld hebben, zonder de kunstmatige beïnvloeding van een 3:2 pull-down of een 50Hz-conflict. Het is een kleine aanpassing, maar de reden achter het haperen was veel interessanter dan bijvoorbeeld een CPU-overbelasting — ik moest het gewoon delen. Ik hoop dat je er net zo van genoten hebt als ik!

