Doorgaan naar hoofdinhoud

Jellyfin 10.11.0

· 14 minuten leestijd
Joshua Boniface
Project Leader
Onofficiële Beta-vertaling

Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →

We zijn verheugd om Jellyfin 10.11.0 aan te kondigen, onze nieuwe stabiele release. Dit is waarschijnlijk een van de grootste en meest impactvolle releases die we ooit hebben gedaan, met enorme backendwijzigingen om prestaties en langetermijnuitbreidbaarheid en -onderhoud te verbeteren. Deze release heeft lang op zich laten wachten - na ruim 6 maanden ontwikkeling en nog eens 6 maanden RC-testing - waardoor ons geplande 6-maandenschema volledig in de war werd gestuurd. Maar we zijn ervan overtuigd dat het resultaat de moeite waard is, zowel voor gebruikers nu als voor de langetermijngezondheid van het project.

Wil je een snelle samenvatting van wat je moet weten (en dat moet je echt weten!) om je systeem te upgraden en draaiende te krijgen? Lees dan verder bij het "TL; DR"-gedeelte hieronder, of ga door voor een volledige uitleg van alle belangrijke functies en verbeteringen in Jellyfin 10.11.0! Je kunt ook de volledige changelogs bekijken op de GitHub-releases voor de server en webinterface.

- Joshua

TL; DR

HET IS ZEER BELANGRIJK DAT JE DIT GEDEELTE LEEST VOOR JE UPGRADET NAAR JELLYFIN 10.11.0! Als je dit niet doet, kunnen er problemen ontstaan! Schroom niet om hulp te vragen in onze chat als iets onduidelijk is of als je problemen tegenkomt.

  1. Zoals altijd bij grote upgrades: STOP Jellyfin en maak een VOLLEDIGE HANDMATIGE BACK-UP VAN JE GEGEVENS- EN CONFIGURATIEMAPPEN voordat je upgrade! Hoewel het upgradeproces naadloos zou moeten verlopen en beveiligingen heeft, zagen we tijdens RC-testen veel vreemde bugs. Beter voorkomen dan genezen.

  2. Je MOET Jellyfin 10.10.7 draaien voordat je naar 10.11.0 upgrade! Jellyfin 10.9.11 kan mogelijk werken, maar dit is minder uitgebreid getest. Upgraden vanaf andere versies wordt NIET ondersteund en zal MISLUKKEN; upgrade eerst naar 10.10.7 en daarna pas naar 10.11.0.

  3. De eerste upgrade omvat MEERDERE LANGDURIGE MIGRATIES die bij grote bibliotheken uren kunnen duren. ONDERBREEK OF STOP HET SYSTEEM NIET tijdens deze migraties; laat ze bij zeer grote bibliotheken bij voorkeur 's nachts doorlopen. Je kunt de nieuwe Opstart-UI en Logviewer (zie hieronder) vanuit je lokale netwerk gebruiken om de voortgang te volgen. Lees verder voor meer uitleg over het "waarom".

  4. De upgrade maakt een back-up van je bestaande library.db-bestand genaamd library.db.old. Dit bestand kun je gebruiken om te herstellen als de upgrade mislukt. Nadat je succesvol hebt geüpgraded en Jellyfin 10.11.0 stabiel draait, mag je deze back-up verwijderen. Moet je de migraties opnieuw proberen na een fout? Stop Jellyfin, hernoem dit bestand terug naar library.db, start Jellyfin opnieuw, en de migratie wordt opnieuw geprobeerd.

  5. Heb je de Bibliotheek Paginagrootte aangepast (standaard is 100)? Zet deze dan voor betere prestaties terug naar de standaardwaarde vóór de upgrade.

  6. Na de upgrade raden we ten zeerste aan om een volledige bibliotheekscan uit te voeren. Zo weet je zeker dat alle gegevens correct zijn ingevuld. Als je dit niet doet, kunnen er vreemde bugs optreden als metadata-items beschadigd of niet goed gemigreerd zijn (zeldzaam maar mogelijk). Voer daarnaast een scan uit voor ontbrekende metadata in je Muziekbibliotheken, want dit kan nodig zijn voor een goede werking na de upgrade. Hoewel niet strikt noodzakelijk, raden we deze extra scan ook voor andere bibliotheken aan om zeker te weten dat alles correct werkt.

  7. Jellyfin 10.11.0 is NIET compatibel met 32-bit ARM-systemen (armhf), zoals eerste en tweede generatie Raspberry Pi's of andere low-end of oude SBC's, of elk ARM-systeem met een 32-bit besturingssysteem. Je moet een ARM64-besturingssysteem gebruiken om Jellyfin 10.11.0 op ARM-systemen te draaien. Zie hieronder voor meer informatie.

  8. Deze release lost ook verschillende beveiligingsproblemen op, zowel van onszelf als van upstream-projecten zoals DotNET. We raden aan om zo snel mogelijk naar 10.11.0 te upgraden.

  9. Zoals altijd bij grote Jellyfin-releases zullen er bugs zijn, zelfs na 6 maanden RC-testen. Dit is een tweede herinnering om een volledige backup te maken voordat je upgrade, aangezien dit de enige manier is om terug te gaan naar een vorige versie als dat nodig mocht zijn.

En nu over naar de coole nieuwe functies!

De migratie naar EF Core voor de mediabibliotheek is voltooid!

Voor deze verandering is wat achtergrond nodig. Lange tijd was de backend van Jellyfin een warboel van spaghetticode, omdat er historisch gezien (vóór Jellyfin) weinig aandacht was voor best practices op lange termijn bij het ontwikkelen van nieuwe functionaliteit. Dit resulteerde in een codebase die bezaaid was met database-aanroepen, geschreven als ruwe SQLite-statements binnen andere code, zonder centrale beheerfunctionaliteit via een ORM (object-relationeel modelsysteem).

Dit had drie grote nadelen: (1) wijzigingen in databaseschema's vereisten complexe, foutgevoelige handmatige migraties die per aanpassing uniek waren, met weinig veiligheidsmaatregelen en geen downgrade-ondersteuning; (2) het was erg moeilijk om nieuwe functionaliteit toe te voegen of bestaande te wijzigen zonder grote stukken ongerelateerde code te herschrijven; en (3) het systeem was volledig gebonden aan het op bestanden gebaseerde SQLite-systeem zonder ondersteuning voor andere database-engines.

EF Core biedt uitkomst: een ORM voor .NET en C# (het framework en de taal waarin Jellyfin is geschreven) die de databasebeheer vereenvoudigt. Hiermee konden we de legacy spaghetticode verwijderen en het databasebeheer in Jellyfin drastisch stroomlijnen. Het biedt automatische migratiebehandeling met versiebeheer, gestandaardiseerde interfaces voor database-aanroepen en flexibiliteit om in de toekomst andere database-engines te gebruiken.

De initiële migratie startte bijna 5 jaar geleden met eenvoudigere databases zoals Gebruikers en Authenticatie, maar de grote uitdaging was de mediabibliotheek: de enorme complexiteit, wijdverspreide impact en afhankelijkheid van zowel de database als statische XML-bestanden op schijf maakten dit een monnikenwerk. Het project lag jaren stil tot @JPVenson, nog geen 6 maanden betrokken bij het project, deze enorme taak op zich nam en tot voltooiing bracht.

Voor eindgebruikers lijkt dit wellicht een onzichtbare verandering: queries worden iets sneller en toekomstige updates zullen minder foutgevoelig zijn. Maar voor de backend en lange-termijnontwikkeling van Jellyfin is dit enorm. De vereenvoudigde database-toegang stelt ons in staat om schonere, robuustere code te schrijven, nieuwe functies te implementeren, complexe migraties uit te voeren en meer, veel sneller en met minimale inspanning. Dit opent talloze nieuwe mogelijkheden voor verbeteringen. Voor beheerders biedt het (nog niet officieel, maar binnenkort) opties om Jellyfin met "echte" databasesystemen zoals PostgreSQL te gebruiken, wat nieuwe mogelijkheden biedt voor redundantie, load-balancing en eenvoudiger beheer. De toekomst ziet er zeer rooskleurig uit!

Deduplicatie en migraties

De kern van de migratie bestaat uit het overzetten van alle mediabibliotheekgegevens van de oude library.db naar de nieuwe structuren in jellyfin.db. Hoewel dit eenvoudig lijkt, besloten we tijdens de migratie het schema actief te verbeteren, waardoor we veel spaghetticode konden opruimen. De migratie creëert voor het eerst juiste relationele verwijzingen in de database, inclusief foreign keys.

Het nadeel is echter dat inconsistente en logisch corrupte bibliotheekgegevens problemen kunnen veroorzaken tijdens de migratie, en dit was een bron van veel problemen. De migratie moet niet alleen de gegevens herstructureren, maar ook deze logische corrupties repareren en gegevens opruimen die "niet meer logisch" zijn, zoals media-items zonder bovenliggend element of gedupliceerde persoonsgegevens bij meerdere sets media.

Deze deduplicatie en opruiming is zeer tijdrovend, en de omvang hangt sterk af van hoeveel logisch inconsistente items er in de bestaande database aanwezig zijn. Dit betekent in essentie dat hoe ouder je database is en hoe meer logisch corrupte items deze bevat, des te meer werk de migratie moet verrichten om alles op te ruimen, waardoor het migratieproces langer duurt. Dit maakt het ook erg moeilijk in te schatten hoe lang de migratie kan duren: een database met 300.000 items zonder problemen kan binnen enkele minuten migreren, terwijl een database met slechts 30 series maar ernstige inconsistenties meerdere uren kan kosten.

Daarom raden we nogmaals aan om de migratie tijdens een rustige periode (bijvoorbeeld 's nachts) te laten draaien en gewoon te wachten tot deze volledig is voltooid; als deze snel klaar is, is alles perfect, en zo niet, voorkom je dan gebruikersvertraging.

Opstartinterface en Logviewer

Een mooi neveneffect van het migratiewerk en de bijbehorende langdurige initiële migratie is onze nieuwe Opstartinterface en Logviewer. Voor deze functie leek Jellyfin tijdens het opstarten en uitvoeren van bijvoorbeeld migraties dood - de interface laadde niet en het leek alsof er weinig gebeurde tenzij je logniveau op debug stond. De Opstartinterface verandert dit door een eenvoudige webinterface te bieden die alleen toegankelijk is binnen je geconfigureerde lokale netwerk. Deze toont de huidige status van het opstartproces en logberichten terwijl het systeem opstart, wat meer rust geeft over wat er gebeurt. Voor kleine installaties is dit misschien niet eens zichtbaar, maar voor traag opstartende grote systemen is dit onmisbaar voor voortgangsmonitoring en probleemoplossing.

Opstartinterface

Interne back-up- en herstelfunctionaliteit

Een van de eerste grote voordelen van de nieuwe backend is een langverwachte functie: interne, live back-up- en herstelondersteuning! Je kunt nu een volledige momentopname van je metadatadatabase maken, deze naar externe opslag back-uppen en herstellen bij grote problemen. Regelmatige back-ups maken voor de zekerheid is nu ook mogelijk. Dit helpt enorm bij dagelijks onderhoud én toekomstige upgrades, met de zekerheid dat je een goede kopie van je gegevens hebt.

Het back-up- en herstelsysteem kan alleen systemen herstellen waarop de back-up oorspronkelijk is gemaakt, dus dit is geen tool om van andere besturingssystemen of containers van derden te migreren.

Back-ups

Agressief databasecaching in geheugen

De nieuwe database-engine is afgestemd op agressief cachen van metadata in het geheugen om trage schijfontlasting te voorkomen; dit was een veelvoorkomend probleem in eerdere Jellyfin-versies en een regelmatige bron van klachten. In de praktijk betekent dit dat Jellyfin meer RAM zal gebruiken dan voorheen, tot de volledige grootte van je bibliotheekdatabase. Deze RAM wordt echter niet verspild, want de snelheidswinst is duidelijk merkbaar, vooral bij grote bibliotheken. Het systeem probeert zo efficiënt mogelijk te zijn als andere taken geheugen nodig hebben, wat betekent dat het geheugen wordt vrijgegeven wanneer andere programma's meer nodig hebben. Houd hier rekening mee bij de upgrade, want het lijkt alsof er veel meer resources worden gebruikt.

Verbeterd vergrendelingsgedrag

De nieuwe database-engine biedt ook verschillende nieuwe vergrendelingsmodi; voor de meeste gebruikers is dit irrelevant, maar gebruikers met frequente databasevergrendelingsproblemen kunnen nu instellingen aanpassen. Meer details over deze functionaliteit vind je in dit blogbericht.

Beëindiging van ARM32 (armhf)-ondersteuning

In Jellyfin 10.10.0 hebben we ondersteuning voor ARM32 afgeschaft en in Jellyfin 10.11.0 is deze volledig verwijderd. Jellyfin vereist nu een ARM64-besturingssysteem om op ARM-platforms te draaien. In de praktijk betekent dit dat we geen ondersteuning meer bieden voor zeer oude of laagwaardige ARM-SBC's (Raspberry Pi 1/2, enz.). We merkten consistent dat deze oude SBC's absoluut niet geschikt waren voor Jellyfin, zelfs zonder transcodering. Daarom besloten we dat het schrappen van ondersteuning onze releaseprocessen zou stroomlijnen en gebruikers de beste out-of-the-box ervaring zou bieden. Als je nog steeds zo'n systeem gebruikt, of een nieuwere ARM-SBC zonder 64-bit besturingssysteem, moet je je hardware upgraden en/of een 64-bit besturingssysteem installeren om naar Jellyfin 10.11.0 te kunnen upgraden.

Afschaffing van interne TLS/SSL-ondersteuning

We kondigen de afschaffing aan van interne TLS/SSL-ondersteuning in Jellyfin, die we in Jellyfin 10.12.0 zullen verwijderen. De huidige interne TLS-mechanismen zijn omslachtig en integreren slecht met externe systemen zoals Let's Encrypts certbot, wat handmatig werk en herstarten vereist bij certificaatvernieuwing. Bovendien vereist TLS-ondersteuning externe bibliotheken die onze Linux-pakketten compliceren. We hebben altijd aanbevolen Jellyfin achter een reverse proxy te draaien, die veel betere TLS/SSL-integratie biedt. In de volgende release verwijderen we deze functionaliteit. Voor productie-installaties met directe TLS-toegang zonder reverse proxy is dit het moment om die op te zetten. Hoewel we verwijdering plannen, blijven geavanceerde configuratiemogelijkheden via Kestrel beschikbaar – maar deze worden niet via de interface aangeboden en zijn alleen voor specifieke edge-cases; normale installaties moeten naar reverse proxies migreren.

Vrije-schijfruimtecontroles

Jellyfin controleert nu actief de beschikbare schijfruimte voor configuratie- en datamappen. Bij minder dan 2GB vrije ruimte per datamap start Jellyfin niet meer om datacorruptie te voorkomen. Ook zijn controles geïmplementeerd om bekende problemen door padconfiguratiefouten te voorkomen.

Nieuwe functies & verbeteringen

Er zijn diverse nieuwe functies en verbeteringen om naar uit te kijken:

Gebruikerservaring

  • Zoekprestaties zijn aanzienlijk verbeterd, waardoor je sneller vindt wat je nodig hebt.

  • De Favorieten-pagina toont nu Live TV-kanalen, Muziekvideo's, Fotoalbums, Foto's en Seizoenen naast bestaande mediatypen.

  • HEVC-decodering is nu ondersteund in Firefox 134+. Meer info op de clientondersteuningspagina.

  • Natieve ondertitelstijling kan worden uitgeschakeld.

  • Series kunnen gegroepeerd worden weergegeven in collecties binnen bibliotheken.

  • Themamuziek wordt nu in willekeurige volgorde afgespeeld.

  • Gaststerren kunnen nu rollen toegewezen krijgen, bijv. Kelsey Grammer als Captain Morgan Bateson.

  • Een aanpasbare "splash screen"-afbeelding kan als achtergrond op de inlogpagina worden ingesteld.

  • Het experimentele ontwerp heeft herziene navigatie en filter-/sorteerbediening voor bibliotheken.

Beheerderservaring

  • Het dashboard toont nu statistieken over het aantal media-items en beschikbare opslagruimte.

  • Mediasegmentproviders kunnen per bibliotheek worden geconfigureerd, vergelijkbaar met andere metadataproviders.

  • AV1-decodering kan worden ingeschakeld voor VideoToolbox-hardwareversnelling.

  • M3U-tuners kunnen worden ingesteld op native framerate.

  • Brandingopties zijn uitgebreid, inclusief "splash screen"-ondersteuning, uitgebreide disclaimeropties en aangepaste CSS. Er staan nog meer aanpassingen gepland om beheerders volledige controle over de gebruikerservaring te geven.

  • De migratie van dashboardpagina's naar onze nieuwe tech stack is bijna voltooid, waarbij de meeste pagina's zijn omgezet. Dit biedt een veel eenvoudigere en duidelijkere organisatiestructuur.

  • Bij het vervangen van bestanden herkent Jellyfin dit nu en ruimt het gerelateerde gegevens op (hoofdstukken, trickplay-bestanden en geëxtraheerde ondertitels en bijlagen) tijdens een scan. Dit zorgt ervoor dat deze gegevens opnieuw worden gegenereerd, passend bij het nieuwe bestand.

Transcoderen en mediabewerking

  • We zijn overgestapt op de nieuwste upstream FFmpeg 7.1, wat veel verbeteringen biedt.

  • We ondersteunen nu 3D LUT-gebaseerde HDR tone-mapping op Intel HD/UHD-grafische kaarten en Rockchip RK3588, wat de prestaties verbetert.

  • We ondersteunen nu Dolby Vision Profile 5 tone-mapping op Rockchip RK3588.

  • We bieden nu nauwkeurigere weergave van ASS/SSA-ondertitels bij gebruik van hardware transcoding.

  • We ondersteunen nu AV1 hardware decoding voor Apple VideoToolbox.

  • We hebben onze verwerking van dynamische HDR-metadata verbeterd, inclusief correcte detectie van HDR10+-video's en selectieve verwijdering van DoVi of HDR10+-metadata om zwarte schermen te voorkomen op apparaten die slechts één type dynamische HDR-metadata ondersteunen.

Wijzigingen voor clientontwikkelaars

De volgende wijzigingen gelden voor alle clientapplicatie-ontwikkelaars. Lees dit aandachtig door en werk je applicaties indien nodig bij.

HTTP API

  • We hebben een nieuwe optie toegevoegd voor ontwikkelaars om hun client te testen met uitgefaseerde autorisatiemethoden uitgeschakeld. We zijn van plan om oude autorisatiemethoden in 10.12.0 te verwijderen. Meer details over autoriseren en testen vind je in dit document.

  • De bewerkingen OnPlaybackStart, OnPlaybackProgress en OnPlaybackStopped zijn nu verouderd. Gebruik in plaats daarvan de bewerkingen ReportPlaybackStart, ReportPlaybackProgress en ReportPlaybackStopped, aangezien de eerste in een toekomstige versie zullen worden verwijderd.

  • Een nieuwe GetSystemStorage-bewerking is toegevoegd om informatie over de serveropslag op te halen.

  • Een nieuwe BackupApi is toegevoegd om back-ups te lijsten, aan te maken en te herstellen.

  • Songteksten bevatten nu cues om timing per woord mogelijk te maken.

  • Ouderlijke beoordelingen zijn verplaatst naar de nieuwe ratingScore-eigenschap die subscores mogelijk maakt.

  • De server kan nu 503 Service Unavailable teruggeven tijdens een serveropstart-, afsluit- of herstartproces. Clients moeten deze code verwachten, reageren op de Retry-After: sec header, en de bewerking indien nodig opnieuw proberen.

Plug-ins

  • Alle database-toegang moet nu via EF Core verlopen. Onbewerkte SQL wordt niet langer door de server geaccepteerd.

  • Plug-ins kunnen nu aangepaste database-toegang bieden. Dit is een ZEER experimentele API en kan nog wijzigen, met stabiliteit als doel in 10.12.0.

  • Metadata-plug-ins moeten de nieuwe interface voor externe URL-aanbieders gebruiken om betere naamgeving voor externe metadata-links te leveren.

Veel kijkplezier!