Zum Inhalt springen

Änderungsprotokoll

Alle wesentlichen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

Das Format basiert auf „Keep a Changelog“, und dieses Projekt folgt den Regeln des Semantic Versioning.

[1.2.15] – 02.09.2026

Geändert

  • Die eingebundene Streaming-Bibliothek wurde auf hls.js 1.7.2 aktualisiert.
  • Die festgelegte hls.js-CDN-Standardversion und der Subresource-Integrity-Hash wurden auf 1.7.2 angehoben.

[1.2.14] – 27.08.2026

Hinzugefügt

  • Gemeinsamer Layout-Breakpoint (75rem) für das Desktop-Layout mit rechtsseitigem Wiedergabelistenbereich im Vergleich zum gestapelten Layout.
  • Überlaufmenü der Steuerleiste bei schmalen Ansichtsfenstern und wenn die links angeordneten Schaltflächen nicht passen; die Playlist-Umschaltung wird auf Mobilgeräten in das Überlaufmenü verschoben, während „Zurück“, „Wiedergabe/Pause“, „Weiter“ und die Lautstärkeregelung sichtbar bleiben.

Behoben

  • Der Puffer-Indikator wird auf der sichtbaren Medienfläche zentriert (gleiche Positionierung wie das Wiedergabe-Overlay).
  • Videowiedergabelisten mit einem rechten Bereich verwenden wieder Overlay-Steuerelemente mit automatischem Ausblenden; Untertitel werden nicht mehr hinter den stets sichtbaren In-Flow-Steuerelementen verdeckt.
  • Mixed-Media-Playlists zeigen das Cover der Audiospur an, nachdem von einer abgespielten Videospur gewechselt wurde (das Poster wird beim Neuaufbau des Players nicht mehr überschrieben).
  • Das Layout des Playlist-Panels auf der rechten Seite bleibt beim Neuaufbau des Mixed-Media-Players (Video ↔ Audio) erhalten, indem vidply-has-playlist und durch die Anwendung der Rasterregeln aus vidply-playlist-panel-right allein.
  • Audio-Wiedergabelisten mit einem rechten Seitenbereich dehnen den Medien-Wrapper nicht mehr auf die Höhe der Wiedergabeliste aus; Untertitel, Steuerelemente und Titelinformationen bleiben unter dem Coverbild.
  • Das Wiedergabe-Overlay wird auf die sichtbare <video> Oberfläche im Layout mit rechtem Bereich und im mobilen Layout zentriert, anstatt auf dem gesamten Wrapper.
  • Das Wiedergabe-Overlay wird in YouTube-, Vimeo- und SoundCloud-Iframes/Containern zentriert, nachdem externe Renderer den Fokus der Host- <video>.
  • Die Fokusumrandungen der Steuerleiste werden bei schmalen Breiten nicht mehr abgeschnitten (0.125rem Abstand bei Clustern links/rechts).
  • Externe Einbettungs-Tracks blenden doppelte Playlist-Cover aus, solange das Overlay zur Einwilligung in die Datenschutzbestimmungen sichtbar ist (auch wenn das Host-Element noch <video>).

[1.2.13] – 18.08.2026

Behoben

  • SoundCloud-Sets in Mixed-Media-Playlists springen nach dem ersten Titel nicht mehr automatisch zum nächsten Playlist-Eintrag; ended wird erst ausgegeben, wenn der letzte Titel des Sets beendet ist.

[1.2.12] – 18.08.2026

Geändert

  • Die festgesteckte dash.js-CDN-Standardversion und SRI wurden auf 5.2.1 (modern UMD) aktualisiert.

Behoben

  • Demo-Entwicklungsserver: Relative Navigationslinks verlieren nicht mehr das /demo/ Präfix ab, wenn die Indexseite als /demo (Weiterleitung mit abschließendem Schrägstrich + serve.json Umschreibungen für Demo-URLs auf Stammebene).
  • Steuerleiste: [hidden] auf Schaltflächen wird wieder berücksichtigt (CSS erzwingt nicht mehr display: inline-flex bei ausgeblendeten Steuerelementen).
  • Nur-Live-Benutzeroberfläche: „Go Live“ und das „LIVE“-Symbol werden aus dem DOM entfernt, wenn liveStream: false, oder unter liveStream: 'auto' , anstatt hinter den hidden.
  • VOD-Steuerelementen: HTML5-Manifeste mit endlicher Dauer und statische DASH-Manifeste bestätigen VOD, sodass „Neustart“ und „Vorwärtsspringen“ bei Audio-/Video- und DASH-VOD-Streams angezeigt werden.
  • DASH-VOD: Manifest auswerten type auf MANIFEST_LOADED und bei STREAM_INITIALIZED wenn isDynamic() noch nicht bereit war.
  • Wiedergabelisten: Für Wiedergabelisten-Player werden Funktionen zum Zurückspulen und Vorspulen erstellt; bei Gebärdensprache werden die Elemente pro Titel signLanguageSrc aus der Wiedergabeliste.

Tests

  • E2E- und Unit-Abdeckung für VOD-Suchsteuerelemente, Gebärdensprache für Wiedergabelisten und DASH/HTML5-Live-Erkennung.

[1.2.11] – 16.08.2026

Behoben

  • HLS-VOD-Transkript: Abruf aller WebVTT-Segmente aus segmentierten Untertitel-Wiedergabelisten statt nur des ersten ~6-Sekunden-Segments; Ungültigmachen des unvollständigen VTT-Caches, wenn weitere TextTrack-Cues eintreffen.
  • Neuaufbau der Steuerleiste: Sichtbarkeit der Live-/VOD-Schaltflächen nach updateControlBar() , sodass der Neustart- und Go-Live-Status korrekt bleibt, wenn HLS-Untertitel-Schaltflächen hinzugefügt werden.
  • VOD-Steuerelemente: Die Schaltfläche „Vorwärts springen“ wird wieder angezeigt (bei „Live-at-Edge“ bleibt sie ausgeblendet, bis der Zuschauer in Rückstand gerät).
  • Live-/HLS-Steuerelemente vor der Wiedergabe: Die nur bei VOD vorhandenen Schaltflächen „Vorwärts springen“ und „Neustart“ ausblenden, bis bestätigt ist, dass es sich bei der Quelle um VOD handelt; die Level-Wiedergabeliste beim Parsen des Manifests abfragen, damit Live-Streams wie ARD vor Beginn der Wiedergabe die richtigen Steuerelemente erhalten.
  • Live-Steuerelemente vor der Wiedergabe: „Neustart“ ist standardmäßig ausgeblendet; die Steuerleiste wird aktualisiert, sobald die Überprüfung der Level-Playlist „Live/VOD“ meldet.
  • Automatische Erkennung von Live-Streams: VOD-HLS-Quellen (z. B. Apple BipBop) zeigen das „LIVE“-Symbol nicht mehr an – hls.js stellt auch für VOD einen endlichen liveSyncPosition auch für VOD bereit, sodass die Erkennung nun stattdessen latestLevelDetails.live .
  • Automatische Erkennung von Live-Streams: Eine unbekannte Mediendauer (bevor HLS-Level-Playlists geladen sind) löst das LIVE-Abzeichen nicht mehr aus; dies geschieht nur Infinity Dauer oder eine explizite Live-Playlist.
  • Automatische Erkennung von Live-Streams: VOD-HLS wechselt beim Start nicht mehr in den Live-Modus, wenn MSE Infinity beim Start eine Dauer meldet; die HLS-Cue-Abfrage passt sich dynamisch an den Live-/VOD-Modus an, sodass Untertitel auch nach Beginn der Wiedergabe weiterhin funktionieren.

[1.2.10] – 16.08.2026

Barrierefreiheit

  • Transkriptfenster (schwebendes Layout): aria-modal, Tab-Fokus-Falle und Hintergrund inert bei gleichrangigen Elementen des Players.
  • Transkriptfenster: Markiert den Video-Wrapper (und die Steuerelemente) nicht mehr als inaktiv, solange es geöffnet ist; die Player-Steuerelemente bleiben neben dem Transkriptfenster weiterhin bedienbar.
  • Dialogfeld „Untertitelstil“: aria-modal="true" und Tab-Fokus-Falle.
  • Dialogfeld „Tastaturhilfe“: Hintergrund inert auf gleichrangige Elemente des Players, solange er geöffnet ist.
  • Fortschritts- und Lautstärkeregler: aria-orientation.
  • Optionen für die Wiedergabelisten-Listbox: aria-selected anstelle von aria-checked.
  • Größenänderungsgriffe für das Transkript: aria-label wenn der Zeiger-Größenänderungsmodus aktiv ist.

Hinzugefügt

  • Live-Stream-Modus (liveStream: 'auto' | boolean): Erkennt HLS-/DASH-/HTML5-Live-Quellen automatisch, zeigt anstelle der Dauer ein „LIVE“-Symbol an, blendet die Funktionen zum Neustart und zur Wiedergabegeschwindigkeit aus, behält die Rückwärtssprungfunktion bei und zeigt die Vorwärtssprungfunktion sowie „Go live“ nur an, wenn der Rückstand gegenüber dem Live-Rand mehr als liveBehindThreshold Sekunden hinter der Live-Kante liegt (Standard: 5 s). An der Live-Kante wird die Roh-Zeitleiste ausgeblendet; bei Rückstand gegenüber der Live-Übertragung zeigt die Zeitanzeige einen Versatz wie z. B. −12:34 an.
  • Hilfe zu Tastaturkürzeln: Fügt einen Abschnitt „Live-Stream-Steuerung“ hinzu, wenn eine Live-Quelle erkannt wird; blendet Geschwindigkeitskürzel aus und verdeutlicht das Vorlaufverhalten bei Live-Inhalten.
  • Player-API: isLiveStream(), isBehindLive(), getLiveSeekRange(), seekToLive(); Ereignisse livechange und liveedgechange.
  • showTrackInfo Player-Option zum Unterdrücken des eigenständigen .vidply-track-info Header zu unterdrücken.

Geändert

  • Die Dauer wurde aus dem „Standalone“-Header entfernt .vidply-track-info ; Wiedergabelisten zeigen beim Wechseln zwischen Titeln weiterhin die Dauer im Titel-Info-Header an.

Behoben

  • HLS-Live-Untertitel: Automatische Auswahl der Standard-Untertitelversion in hls.js, wenn Untertitel oder Transkript aktiviert sind, damit fortlaufende WebVTT-Cues während der Live-Wiedergabe geladen werden.
  • HLS-Live-Transkript: Das einmalige VTT-Massenabrufen wird übersprungen (gilt nur für VOD) und das Transkript wird stattdessen schrittweise aus TextTrack-Cues erstellt.
  • Live-Transkript: Duplikate bei fortlaufenden HLS-Cues entfernen und inkrementell anhängen, anstatt bei jeder Untertitelaktualisierung die gesamte Liste neu zu erstellen (behebt doppelte Zeilen).
  • Live-Transkript-Deduplizierung: Untertitel-Zeitstempel in Gruppen zusammenfassen und nahezu identische Zeilen ignorieren, die von hls.js mit verschobenem PTS erneut veröffentlicht werden.
  • Deduplizierung des Live-Transkripts: Erweitern Sie das Überlappungsfenster auf 30 Sekunden, scannen Sie alle Einträge und sortieren Sie diese nach jeder Synchronisierung chronologisch (behebt Duplikate bei Segmentüberlappungen im Abstand von mehreren Sekunden sowie ein durcheinandergebrachtes DOM).
  • Live-Transkript: Die Synchronisierung wird auch nach den ersten Minuten fortgesetzt – rollierende HLS-Untertitel-Fenster unterbrechen nun nicht mehr die Abfrage von Cue-Updates oder Fragment-Ereignisse, wenn die Cue-Anzahl stagniert; der automatische Bildlauf folgt bei Live-Streams dem zuletzt gestarteten Cue.
  • Untertitel standardmäßig bei HLS: Anwenden captionsDefault , wenn Untertitelspuren nach dem Parsen des Manifests erscheinen, nicht nur bei der anfänglichen Player-Einrichtung.
  • Lautstärke/Stummschaltung bei Initialisierung: CMS-Optionen werden atomar angewendet, sobald der Renderer bereit ist, und eine verspätete volumechange Synchronisationsverzögerungen (Chrome-Timing).
  • Persistierte Player-Einstellungen: Speichern einer configKey aus dem CMS muted|volume , damit veraltete „localStorage“-Werte nach Änderungen im Editor nicht länger die Backend-Standardeinstellungen überschreiben.

Barrierefreiheit

  • TrackInfoView: Titel, Interpret, Datum, Beschreibung und die Umschaltfunktion für die Langbeschreibung für assistive Technologien verfügbar machen, anstatt sie mit aria-hidden; verwende ein beschriftetes role="region" und die Schaltfläche zum Ein- und Ausblenden mit aria-controls. Änderungen an Titeln in der Wiedergabeliste werden weiterhin über einen eigenen, unaufdringlichen Live-Bereich angekündigt. Textmetadaten verwenden semantische <p> Elemente anstelle von generischen <div> Wrapper.

[1.2.9] – 15.08.2026

Geändert

  • Die von Drittanbietern bereitgestellte Streaming-Bibliothek wurde auf hls.js 1.7.0 aktualisiert.
  • Den festgelegten hls.js-CDN-Standard und den Subresource-Integrity-Hash auf 1.7.0 angehoben.

[1.2.8] – 14.08.2026

Geändert

  • resumePlayback ist nun standardmäßig aktiviert false. Die Wiedergabe ab der letzten Position muss explizit über die Player-Optionen aktiviert werden.

Hinzugefügt

  • TrackInfoView: Der Titel-Info-Header oberhalb des Players kann eine ein- und ausklappbare ausführliche Beschreibung (longDescription in den Titel-/Player-Optionen) mit einem bereinigten RTE-Inhalt und einer barrierefreien Umschaltfunktion zum Ein- und Ausblenden anzeigen.
  • Neue playButtonOverlay Option ('auto' | true | false, Standard 'auto'), die die zentrierte Wiedergabetaste bei Audio-Playern ermöglicht. Bei Audio-Inhalten wird das Overlay als echtes, i18n-beschriftetes Element <button> über dem Titelbild dargestellt – ein <audio> Element bietet keine Klickfläche – und sein barrierefreier Name richtet sich nach dem Wiedergabe-/Pausenzustand. 'auto' behält das bisherige, rein auf Videos beschränkte Verhalten bei, false deaktiviert das Overlay vollständig.
  • PlaylistTrack.date : ein optionales, vorformatiertes und bereits lokalisiertes Veröffentlichungsdatum. Es wird in den Zeilen des Wiedergabelistenbereichs (.vidply-playlist-item-date) sowie in den Informationen zum aktuell wiedergegebenen Titel (.vidply-track-date) und ist im aria-label , sodass es zusammen mit Titel und Dauer angesagt wird. Die Bibliothek gibt die Zeichenkette unverändert wieder; die Sprachlokalisierung erfolgt weiterhin durch die Host-Anwendung.
  • Titelbezogene Downloads in Wiedergabelisten: PlaylistTrack.downloadUrl (sowie optional downloadFormat und downloadFileSize) sorgt dafür, dass die Download-Schaltfläche der Steuerleiste der Auswahl folgt – sie bietet die Datei des aktuellen Titels an, benennt sich entsprechend dem Format und der Größe dieser Datei um und wird bei Titeln ausgeblendet, die keine downloadUrl. Ein bekanntes downloadFileSize überspringt zudem die HEAD-Anfrage, die die Schaltfläche andernfalls senden würde. Wiedergabelisten, die keine URL auf Titelebene festlegen, verwenden weiterhin das playerweite downloadUrl / data-vidply-download-url Ziel.

Behoben

  • Mixed-Media-Wiedergabelisten luden YouTube-, Vimeo- und SoundCloud-Titel zwei- oder dreimal, wenn sie im Bedienfeld ausgewählt wurden. PlaylistManager.play() wurde player.play() mit einem 100-ms-Timer, bevor load() sie fertig waren; da der Renderer noch null war, Player.play() wird die Wiedergabeliste erneut aufgerufen und es kommt zu doppelten Ladevorgängen. Titelwechsel warten nun load() vor der Wiedergabe, und Player.play() der Playlist-Fallback wird ignoriert, solange ein Titelwechsel im Gange ist.
  • screenReaderAnnouncements: false hatte keine Auswirkungen mehr auf die Ansagen zu Wiedergabe/Pause, Lautstärke, Stummschaltung, Untertitel, Vollbild und Geschwindigkeit. Diese wurden vom Tastatur-Handler auf Player-Ereignisse verlagert, sodass nun auch bei Zeiger- und Touch-Bedienung Ansagen erfolgen und die Optionsprüfung zurückblieb. Nun werden sie wieder gesteuert. showNotice() Und die Hinweise zum Ziehen und Größenändern in Gebärdensprache werden weiterhin angesagt, da eine Unterdrückung dazu führen würde, dass die zugehörige Aktion ohne Rückmeldung bliebe.
  • Jeder Player meldete beim Laden der Seite seine eigene Lautstärke an Screenreader. Eine aus dem Speicher wiederhergestellte Lautstärke wird erst nach ready, sodass es als volumechange der Listener nicht von einem echten unterscheiden konnte; auf einer Seite mit zwei Playern bedeutete das, zweimal „Lautstärke 53 Prozent“ zu hören, bevor man etwas berührte. Der Pegel wird nun nur noch angesagt, wenn er sich tatsächlich vom zuletzt angesagten unterscheidet, so wie es beim Stummschaltungsstatus bereits der Fall war.
  • Die Download-Schaltfläche in Wiedergabelisten bot für jeden Titel die Datei auf Elementebene an, sodass eine Wiedergabeliste immer nur einen Download bereitstellen konnte (in der Regel gar keinen, da Streaming-Manifeste keine progressive URL haben).
  • Die Tastaturhilfe und die Einstellungsdialoge waren auf Audio-Playern unlesbar. Sie befinden sich innerhalb des Player-Feldes, das bei Audio lediglich aus der Steuerleiste besteht, daher max-height: 80% sie auf etwa 80 Pixel zusammengedrückt wurden. Bei Audioplayern ist das Overlay nun am Viewport verankert (und die Layout- Einschränkung wurde dort aufgehoben, da sie andernfalls das feste Overlay im Player gefangen halten würde).
  • Seiteninhalt konnte einen geöffneten Dialog überdecken. Ein Dialogfeld ragt über den Player-Rahmen hinaus, nicht jedoch über dessen Stapelkontext; daher führte ein Host-Stylesheet, das dem Player eine eigene Stapelebene zuweist – eine gängige Methode, um ihn über die Seitengestaltung zu heben –, dazu, dass alles, was über dieser Ebene gestapelt war, das Dialogfeld überdeckte. Der Player wird nun selbst auf die modale Ebene angehoben (vidply-modal-open), solange ein Dialog geöffnet ist.

1.2.5 – 23.07.2026

Sicherheit

  • URLs von Postern/Grafiken werden nun validiert und CSS-escaped, bevor sie in die --vidply-poster-image benutzerdefinierten Eigenschaft geschrieben werden. Dadurch kann ein von einem Angreifer manipulierter Poster-Wert nicht mehr aus dem CSS- url(...) (PosterManager, Player.load).
  • Metadata-Cue-Direktiven (PAUSE / FOCUS: / #hashtags) werden von einem einzigen, auf den Container beschränkten Prozessor verarbeitet. Die doppelte Pipeline in der Transcript-Ebene, die FOCUS: Selektoren dokumentweit auflöste, wurde entfernt, sodass ein nicht vertrauenswürdiges VTT-Cue den Fokus nicht mehr auf beliebige Elemente auf der Host-Seite verlagern kann (Aktivierung über metadataDirectives: 'global' für das alte dokumentweite Verhalten).
  • Die Standard-CDN-Builds von hls.js und dash.js werden nun mit einem integrierten „Subresource Integrity“-Hash geladen, sodass die angehefteten Skripte sofort nach dem Laden verifiziert werden. Ein benutzerdefiniertes hlsScriptUrl/dashScriptUrl benötigt weiterhin einen eigenen *ScriptIntegrity Wert; der integrierte Hash wird nur auf die festgesteckte Standard-URL angewendet.
  • Die Platzhalterersetzung in i18n.t() fügt Werte nun wörtlich ein, sodass $-Sequenzen ($&, $1, $$, $`) in einem ersetzten Wert können nicht mehr als String.prototype.replace Muster interpretiert werden.

Behoben

  • Typdeklarationen werden nun tatsächlich dist/types während des Builds ausgegeben (der types Einstiegspunkt hing zuvor in der Luft, da tsc mit noEmit); CI stellt sicher, dass dist/types/index.d.ts existiert.
  • Ein doppeltes Metadaten- cuechange/loadedmetadata Listener-Registrierung in der Transkript-Ebene entfernt, die sich im Zuge von Änderungen an der Quelle angesammelt hatte.
  • Die Renderer-Auswahl bei Quelländerungen verwendet nun ein stabiles rendererType Feld anstelle von constructor.name, das von Minifiern in Produktions-Builds verfälscht wird – wodurch unnötige Neuerstellungen des Renderers (oder fehlgeschlagene Wechsel) in minifizierten Bundles behoben werden.
  • Das Neuerstellen des Players für einen anderen Track-Typ führt nicht mehr zu einem Hänger, wenn der neue Player bereits bereit ist, bevor der ready Listener angehängt wird; die Wartezeit endet sofort, sobald er bereits bereit ist, und verfügt über ein Sicherheits-Timeout.
  • Aufgeschobene Callbacks der Wiedergabeliste (automatische Wiedergabe, Zurücksetzen von Guard-Flags, Löschen von Live-Regionen , Fokuswechsel) werden nun nachverfolgt und abgebrochen destroy(), sodass sie nicht mehr bei einem bereits abgebrochenen Player ausgelöst werden können.
  • Der Player baut nun den iOS-Pseudo-Vollbild-Fallback ab, destroy()und stellt dabei die Scroll-Sperre für Body/Dokument, Hintergrundstile, Viewport-Meta-Elemente und inaktive Geschwisterelemente wieder her, falls er im Pseudo-Vollbildmodus zerstört wird.
  • Beim Neuaufbau der Steuerleiste (Funktionserkennung / Aktualisierung der Wiedergabeliste / Wechsel des Renderers) werden keine doppelten Player-Ereignis-Listener mehr gestapelt, ResizeObserveroder DOM-Handler für das automatische Ausblenden – jeder Neuaufbau der Steuerleiste trennt nun seine bisherigen Listener vor dem erneuten Anfügen und destroy() entfernt sie alle.
  • Auf Seiten mit mehreren Playern führt das Öffnen eines Menüs (Lautstärke, Kapitel, Qualität, Geschwindigkeit, Untertitel, Untertitelstil, Überlauf) nicht mehr dazu, dass das geöffnete Menü eines anderen Players geschlossen oder umgeschaltet wird: Die Überprüfung auf „bereits geöffnet“ beschränkt sich auf den eigenen Container des Players statt auf das gesamte Dokument.
  • Der YouTube-Video-ID-Parser fügt nachgestellte Abfrage-/Hash-Segmente nicht mehr in die ID ein (z. B. youtu.be/ID?t=60, .../embed/ID?autoplay=1) und verarbeitet nun auch v als späterer Abfrageparameter auftritt, /shorts/ sowie ältere /v/ Pfade sowie youtube-nocookie.com.

Barrierefreiheit

  • Die verschiebbaren/in der Größe veränderbare Ein-Buchstaben-Shortcuts (d/r) werden nicht mehr überlagert, während in ein Formularfeld oder ein „contenteditable“-Element getippt wird oder wenn eine Modifikatortaste (Strg/Cmd/Alt) gedrückt gehalten wird (z. B. Strg+D, Cmd+R).
  • Die Fortsetzungsaufforderung („Wo waren wir?“) fängt nun die Tasten Tab/Umschalt+Tab innerhalb des Dialogfelds ab, solange dieses geöffnet ist, und stellt den Fokus auf das zuvor fokussierte Element wieder her (mit Fallback auf die Wiedergabetaste), wenn es geschlossen wird, entsprechend seiner role="dialog"/aria-modal Semantik (WCAG 2.4.3).

Geändert

  • Erkennung von „Source-URL“ → „Renderer“ wurde in einem einzigen classifyRendererType() Hilfsfunktion zusammengefasst, die von beiden _detectRendererClass (welcher Renderer erstellt werden soll) als auch shouldChangeRenderer (ob ein Austausch erfolgen soll), sodass die beiden nicht mehr auseinanderlaufen können; youtube-nocookie.com wird nun als YouTube-Quelle erkannt.
  • Die Auflösung der angehefteten „hls.js/dash.js“-Standard-URL sowie der Subresource-Integrity wird in einem gemeinsamen loadPinnedScript() Loader, wodurch die Regel „Der integrierte Hash gilt nur für die festgesteckte Standard-URL“ an einem Ort zusammengefasst wird.
  • Fokusringe und Akzente im hellen Design beziehen sich nun auf die --vidply-primary benutzerdefinierte Eigenschaft statt auf eine wiederholt festcodierte #0a406e, sodass die Anpassung der Primärfarbe zu einer einheitlichen Neugestaltung führt.

Entfernt

  • Die nicht mehr benötigte SettingsDialog Komponente und ihre nicht erreichbaren Verknüpfungen (die Schaltfläche „Einstellungen“ wurde nie gerendert und showSettings() war ein No-Op-Stub); die öffentlichen showSettings()/hideSettings() Methoden bleiben als Veraltungs-Stubs erhalten.

Build

  • Die dev Server-Abhängigkeit (serve) ist nun eine festgelegte „devDependency“ und wird aus der lokalen Installation ausgeführt, anstatt zur Laufzeit über npx serve, wodurch ein Abruf aus der Lieferkette zur Laufzeit entfällt.
  • Produktions-Bundles (minifiziert) geben nun externe Source-Maps aus: Die esbuild- Bundle-Map wird über Terser weitergeleitet, sodass dist/prod / dist/legacy.min.js Dateien für die Feld-Fehlersuche auf das ursprüngliche TypeScript zurückverweisen.
  • CI führt nun die Unit-/Integrations-Suite mit Codeabdeckung durch (test:coverage), sodass die konfigurierten Abdeckungsschwellenwerte die Builds tatsächlich steuern; die Schwellenwerte wurden als Regressions-Mindestwerte an die aktuell gemessene Abdeckung angepasst.

Tests

  • Es wurden adversarische Unit-Suiten für den „Prototype-Pollution“-Sanitizer (Sanitize) sowie für die Poster-URL-Whitelist und das CSS-Escaping (UrlSafe), sowie eine spezielle MetadataAlertsManager Suite, die den Unterschied zwischen bereichsgebundenen und globalen FOCUS: Auflösung.
  • Es wurden Regressionstests für das i18n $-escape, die Schutzmechanismen für Tastaturkürzel zum Ziehen und Ändern der Größe sowie den Identifikator für den stabilen Renderer-Typ.
  • Die YouTube-Suite extractVideoId Suite, um exakte IDs (ohne Abfrage/Hash) zu überprüfen und ?si= Teilen-Links, v als späteren Abfrageparameter /shorts/, youtube-nocookie.com, sowie #fragments abzudecken.
  • Es wurden Unit-Suiten für den classifyRendererType URL-Klassifizierer und die loadPinnedScript Regeln zur Auflösung von Standard-URLs und SRIs.

1.2.4 – 07.07.2026

Geändert

  • GitHub Actions CI: Lint- und Playwright-E2E-Jobs, GitLab-CI-Pipeline, erweitert .editorconfigsowie GitHub-Actions-Artefakt-/Cache-Aktionen v6 (Node 24).

Behoben

  • ESLint-CI-Fehler: no-this-alias in MediaSessionManager und implizite Typumwandlungswarnungen in „player/renderers“.

1.2.3 – 27.06.2026

Hinzugefügt

  • Einstellungen für Untertitel bleiben über Sitzungen hinweg erhalten: Der Player merkt sich, ob Untertitel ein- oder ausgeschaltet waren und welche Sprache ausgewählt wurde, und stellt diese Auswahl beim nächsten Besuch wieder her (wobei die zuletzt gewählte Sprache auch dann beibehalten wird, wenn die Untertitel ausgeschaltet sind).

Geändert

  • Der Hilfedialog für Tastaturkürzel listet nun nur noch die für den jeweiligen Player relevanten Kürzel auf. Funktions-Tastenkombinationen (Untertitel, Untertitel-Stil, Geschwindigkeit, Qualität, Kapitel, Transkript, Vollbild) werden nur angezeigt, wenn die jeweilige Funktion verfügbar ist, und die Liste wird beim Öffnen neu erstellt, sodass später geladene Funktionen (z. B. HLS- Untertitel/Qualitäten) angezeigt werden, sobald sie bereit sind.

1.2.2 – 27.06.2026

Hinzugefügt

  • Integration der Media Session API (mediaSession Option, standardmäßig aktiviert): Stellt Metadaten zum aktuell wiedergegebenen Titel (Titel/Interpret/Album/Cover) bereit und leitet Steuerbefehle des Betriebssystems, des Sperrbildschirms, der Benachrichtigungen sowie des Headsets (Wiedergabe, Pause, Stopp, Springen sowie vorheriger/nächster Titel bei Wiedergabelisten) zurück an den Player. Neue title/artist/album Optionen zur Bereitstellung der Metadaten; Playlist-Einträge haben Vorrang. Der Positionsstatus wird an den Betriebssystem-Scrubber gemeldet und wird bei mangelnder Unterstützung stillschweigend heruntergestuft.
  • Hilfedialog für Tastaturkürzel: Ein fokusgebundener, für Screenreader geeigneter modaler Dialog, der die aktiven Tastenbelegungen auflistet. Erreichbar über eine neue Hilfe-Schaltfläche in der Steuerleiste (helpButton Option, standardmäßig aktiviert), die ? Tastaturkürzel sowie über die player.toggleKeyboardHelp() / showKeyboardHelp() / hideKeyboardHelp() API. Vollständig übersetzt (en, de, es, fr, ja).

Behoben

  • Medien-Session: Auf Seiten mit mehreren Playern steuern die Betriebssystem-Steuerelemente nun den Player, der tatsächlich abspielt. Die einzige, dokumentweite navigator.mediaSession wird vom zuletzt abgespielten Player beansprucht; Hintergrund-Player übernehmen es bei der Initialisierung nicht mehr und löschen es beim Beenden nicht mehr. Behebt das Problem, dass die Schaltflächen „Wiedergabe/Pause/Springen/Weiter/Zurück“ im Betriebssystem-Dialog erscheinen, aber keine Funktion haben.

1.2.1 – 14.06.2026

Hinzugefügt

  • descriptionSpeechManager mit Modus-Routing, Optionen, Ereignissen und Tests.
  • Dokumentation und Demoseite zum Audiobeschreibungsmodus.

Geändert

  • Lazy-Load von Audiobeschreibungen und Gebärdensprache-Segmenten nur dann, wenn deren Inhalt vorhanden ist.
  • „devDependencies“ aktualisiert und neu kompiliert dist.
  • Erzwingung von LF-Zeilenenden über .gitattributes.

1.2.0 – 04.06.2026

Geändert

  • Verbesserungen durch Code-Review: Korrekturen in den Bereichen Barrierefreiheit, Speicherlecks, Bundle-Größe und Typsicherheit.

1.1.19 – 29.05.2026

Geändert

  • Die von Drittanbietern bereitgestellten Streaming-Bibliotheken wurden auf hls.js 1.6.16 und dash.js 5.2.0 aktualisiert.
  • Die festgelegten CDN-Standardversionen für hls.js und dash.js wurden auf 1.6.16 bzw. 5.2.0 angehoben.

1.1.18 – 18.05.2026

Behoben

  • Video-Poster max-width/width.
  • Das automatisch schwebende PiP-Fenster dockt beim Zurückblättern nicht wieder an.

1.1.17 – 05.05.2026

Geändert

  • Entfernt .npmrc aus der Versionskontrolle entfernt.

1.1.16 – 05.05.2026

Hinzugefügt

  • Das Transkript wird aus dem Mini-Player ausgeblendet und der frei gewordene Platz mit einem zentrierten PiP-Symbol verziert.

Geändert

  • Entfernt: ~2,1k Zeilen veralteten, nicht mehr genutzten Codes und Behebung von Speicherlecks bei Dokument-/Fenster-Listenern (-18 % ESM-Bundle); Badges für den Gebärdensprachmodus sind nun übersetzbare DOM-Knoten.
  • Strict TypeScript: Alle any, entfernt eslint-disableund 91 Lint-Warnungen behoben.
  • Der Build zielt nun auf Node 24 ab.

Korrektur der

  • Weiße Farbe in Batches.
  • Die README↔Types-Drift-Prüfung berücksichtigt Generika, Standardwerte für verschachtelte Klammern und geerbte EventEmitter-Methoden.

1.1.15 – 03.05.2026

Behoben

  • Playwright-Tests.

1.1.12 – 03.05.2026

Behoben

  • Playwright-Tests.

1.1.11 – 03.05.2026

Behoben

  • Kleiner h1 Korrektur und Weiterleitung an die Demo.

1.1.10 – 03.05.2026

Geändert

  • Sicherheits-/Barrierefreiheits-/Qualitätsprüfung.

Behoben

  • Behandlung gemischter Wiedergabelisten.
  • Untertitel und Transkript: vollständiger VTT-Abruf, HLS-Unterstützung und Endonym-Bezeichnungen.

1.1.9 – 25.04.2026

Behoben

  • DASH-Renderer: Vorhersehbare anfängliche Auswahl der Audiospur.
  • DASH-Spur mit der Bezeichnung „null“, aber einem gültigen Sprachcode (z. B. de).
  • dash.js auf Version 5.1.1 festgelegt.
  • Konsolenfehler bei Vorschaubildern in HLS und DASH.
  • Anzeige von Untertiteln und lang Attribute im Sprachumschalter anzeigen.

1.1.8 – 25.04.2026

Geändert

  • Terser-Abhängigkeiten aktualisiert.

1.1.7 – 23.04.2026

Geändert

  • Wartungsversion (nur Versionserhöhung).

1.1.6 – 23.04.2026

Behoben

  • Der Pfeil im Tooltip blieb grau, wenn sich der Player im Hellmodus befand.
  • Die Schaltfläche für die Lautstärke auf dem Desktop wurde <percent>von „Stummschalten“</percent> in „Lautstärke <percent>%“</percent> umbenannt<percent>.</percent>

1.1.5 – 21.04.2026

Behoben

  • Die Handhabung der Größenänderung für den schwebenden/PiP-Player wurde angepasst.

1.1.4 – 21.04.2026

Hinzugefügt

  • FloatingPlayerManager / PiP-Player-Modul.
  • Anzeige von Dateiformat und -größe auf der Beschriftung/im Tooltip der Download-Schaltfläche.

1.1.3 – 19.04.2026

Geändert

  • Dokumentation und Demos aktualisiert (TypeScript-Migration, SoundCloud-Renderer, Puffer-Ladeanzeige, Download-Button, native iOS-HLS-Brücke).

Behoben

  • Synchronisierung der hls.js-Untertitelspur beim Sprachwechsel und Abhören von textcuesupdate.

1.1.2 – 17.04.2026

Behoben

  • Abhören SUBTITLE_FRAG_PROCESSED HLS-Untertitel abhören.

1.1.1 – 16.04.2026

Hinzugefügt

  • Puffer-Ladeanzeige.

1.1.0 – 16.04.2026

Hinzugefügt

  • Der Puffer-Indikator wird so lange angezeigt, bis die Medien wiedergegeben werden können.

Geändert

  • ES-Module wurden in striktes TypeScript konvertiert; Build- und Typdefinitionen wurden aktualisiert.

1.0.51 – 14.04.2026

Hinzugefügt

  • Download-Funktion hinzugefügt.

1.0.50 – 12.04.2026

Hinzugefügt

  • Unterstützung für MPEG-DASH-Streaming über dash.js.
  • Untertitel, Transkripte und Qualitätssteuerung auf Apple-Plattformen über die native HLS-TextTrack-API.

Behoben

  • Anzeige der Menüschaltfläche im Vollbildmodus unter iOS.

Geändert

  • HTML-Funktionsabschnitte und README für DASH-Unterstützung aktualisiert.

1.0.45 – 03.04.2026

Behoben

  • Lautstärkepunkt.

1.0.44 – 03.04.2026

Barrierefreiheit

  • WCAG 2.2 AA-Konformität: Zielgröße und Ziehbewegungen.

Geändert

  • npm esbuild-Update.

1.0.43 – 27.03.2026

Hinzugefügt

  • Testbeispiel für Video und Audio.

Geändert

  • npm-Updates (vitest, esbuild).

Behoben

  • Anzeige der Dauer und Vorlauf in Firefox, wenn das Feld für die Dauer leer ist.
  • Timing bei der Initialisierung der Audiobeschreibungsquelle; Demoseiten verwenden data-vidply automatische Initialisierung.
  • Nicht verwendetes CSS in den Demodateien entfernt.

1.0.42 – 22.02.2026

Behoben

  • Dauer beim ersten Laden festgelegt.

1.0.41 – 21.02.2026

Hinzugefügt

  • Dynamische HLS-Untertitelverarbeitung und Korrekturen am hellen Design.

Geändert

  • Aktualisiertes Copyright und Dokumentation.

Behoben

  • Ein blockiertes Akamai-Video wurde von der HLS-Stream-Seite entfernt.

1.0.40 – 11.02.2026

Behoben

  • Überlauf des Transkript-Dialogfelds bei Videoplayern in voller Breite (WCAG 1.4.10).

1.0.39 – 09.02.2026

Behoben

  • Die Fallback-Meldung für den Browser wurde entfernt.

1.0.38 – 09.02.2026

Hinzugefügt

  • vitest- und Playwright-Tests hinzugefügt.

Geändert

  • esbuild-Update auf 0.2.73.

Behoben

  • HTML5-Validierungsfehler bei Barrierefreiheit und Medienelementen.

1.0.37 – 01.02.2026

Hinzugefügt

  • Option für den Anzeigemodus „Gebärdensprache“ und ein neues PiP-Symbol.
  • Testseiten für Einzelspieler-Modus und Wiedergabelisten.

Behoben

  • Umfassende Verbesserungen im Vollbildmodus.
  • Vollbildmodus wird geschlossen, wenn sich externe Medien in der Vorschau-Liste der Wiedergabeliste befinden.

1.0.35 – 05.01.2026

Hinzugefügt

  • Ziehen und Größenänderung per Touch-Geste über Pointer-Events.

Behoben

  • Zahlreiche Korrekturen an iOS-Wiedergabelisten.
  • Höhe des mobilen Überlaufmenüs, wenn es unterhalb des Auslösers positioniert ist.
  • Das Seitenverhältnis wird nur auf die Vimeo-/YouTube-Ebene angewendet.
  • Ziehmodus über die Tastatur.

1.0.34 – 01.01.2026

Behoben

  • Audio-Cover in gemischten Wiedergabelisten, sofern vorhanden.

1.0.33 – 27.12.2025

Hinzugefügt

  • Die Wiedergabelistenauswahl lädt Metadaten ohne automatische Wiedergabe; zeigt die anfängliche Dauer an; verschiebt das Laden von Audio-/Video-/HLS-Dateien bis zur Wiedergabe.

Geändert

  • Dokumentation und Demodateien aktualisiert.

1.0.32 – 25.12.2025

Geändert

  • npm-Update.

Behoben

  • Ausblenden der Geschwindigkeitssteuerung für HLS-Streams (erkannt durch .m3u8 Quelle erkannt).
  • Veraltetes JS entfernt.

1.0.31 – 22.12.2025

Hinzugefügt

  • Miniaturansichten für Videovorschauen und automatische Poster-Erstellung in Wiedergabelisten.

1.0.30 – 22.12.2025

Hinzugefügt

  • Miniaturansichten für Videovorschauen und automatische Erstellung von Postern.

Geändert

  • esbuild-Update.

1.0.29 – 16.12.2025

Hinzugefügt

  • Transkript: Beschreibungen immer anzeigen und bei Videos mit Audiodeskription die Tonspuren vertauschen.

Behoben

  • Das Vertauschen der Untertitelspuren für Audiodeskriptionen in Wiedergabelisten.

1.0.28 – 15.12.2025

Behoben

  • Eine fehlende Übersetzung wurde hinzugefügt.

1.0.27 – 14.12.2025

Hinzugefügt

  • Gemischte Wiedergabeliste.

1.0.26 – 12.12.2025

Behoben

  • Lazy-Loading bei der Spracherkennung von vidply.

1.0.25 – 11.12.2025

Hinzugefügt

  • Veröffentlichung des dist Verzeichnis auf GitHub bereitgestellt.
  • ESM-Optimierung mit Legacy-Code als Option.

1.0.24 – 10.12.2025

Geändert

  • Wartungsrelease (nur Versionserhöhung).

1.0.23 – 10.12.2025

Hinzugefügt

  • scrollIntoView für die Tastaturnavigation in allen Menü-Popups.

1.0.22 – 03.12.2025

Geändert

  • Theme-Gestaltung überarbeitet: Ein WCAG-konformer Hellmodus wurde hinzugefügt, color-scheme, anschließend wurde die Unterstützung für den hellen Modus zugunsten von rem-Einheiten entfernt.

1.0.21 – 01.12.2025

Hinzugefügt

  • Optionales Posterbild für Audio im Einzel- und Wiedergabelistenmodus.

Behoben

  • Barrierefreiheit der Wiedergabeliste und automatisches Scrollen.
  • Der Schaltfläche „Qualität“ wurde ein Titel hinzugefügt; die Schaltfläche „Qualität“ wurde im HLS-Modus zu Chrome hinzugefügt.
  • Übersetzungen für Wiedergabelisten hinzugefügt.

1.0.20 – 20.11.2025

Behoben

  • Probleme im iOS-Vollbildmodus behoben, bei denen Videos falsch positioniert waren und Playlists nicht durch Wischen gesteuert werden konnten.

1.0.19 – 20.11.2025

Hinzugefügt

  • Horizontales, automatisch ausblendbares Wiedergabelisten-Fenster für den Vollbildmodus.
  • Neues Uhrensymbol zum Ein- und Ausblenden von Zeitstempeln.
  • Wiedergabeliste: WCAG-Barrierefreiheit und deklarative Konfiguration.

Geändert

  • Transkript: Verbessertes semantisches HTML und verbesserte Benutzererfahrung für Screenreader.

Behoben

  • Vollbildmenüs des Portals auf Containerebene angepasst, sodass sie über dem Wiedergabelistenbereich angezeigt werden (WCAG).
  • Positionierung des Vollbild-Overlays der Wiedergabeliste im Hochformat.
  • Verhinderung doppelter Ansagen durch Screenreader beim automatischen Scrollen des Transkripts.
  • Menü-Layout: Vermeidung horizontaler Bildlaufleisten und Verbesserung der Vollbildanzeige.
  • Eigenes Kapitel-Symbol, um Überschneidungen mit dem Wiedergabelisten-Schalter zu vermeiden.
  • Nicht verwendeter Code wurde entfernt.

1.0.18 – 18.11.2025

Hinzugefügt

  • Fußzeile auf allen Demoseiten mit verbesserter Barrierefreiheit.

Geändert

  • Barrierefreiheit und Unterstützung für Screenreader verbessert.

Behoben

  • Der Zeitstempel des Transkripts ist nun standardmäßig ausgeblendet und optional.

1.0.17 – 17.11.2025

Hinzugefügt

  • Unterstützung für den iOS-Vollbildmodus mit einem Pseudo-Vollbild-Fallback.
  • Verbesserte Formularbeschriftungen und Screenreader-Unterstützung für Zeitanzeigen.

Behoben

  • Multiplayer-IDs und die Wiedergabe von Gebärdensprache unter iOS.
  • Tastaturnavigation und ARIA-Semantik in den Einstellungsmenüs.
  • iOS-Touch-Ereignisse und Drag-and-Drop auf Touch-Geräten.
  • Probleme im Querformat auf Touch-Geräten.
  • Stummschalt-Schaltfläche auf Touch-Geräten ohne Schieberegler.
  • Vollbild-Schaltfläche im Querformat.
  • Entfernen des Überlaufmenüs im Querformat oder auf Desktops mit einer Auflösung von mehr als 768 px.

1.0.16 – 16.11.2025

Behoben

  • Alle dist Dateien erstellen.

1.0.15 – 16.11.2025

Geändert

  • Dokumentation und Demoseiten aktualisiert.

1.0.14 – 16.11.2025

Hinzugefügt

  • Responsives Überlaufmenü und Transkriptansicht für Audio-Player.
  • Verbesserte Beschriftungen der Schaltflächen zum Ziehen und Ändern der Größe mit Tastenkombinationen und vollständiger i18n-Unterstützung.
  • forced-colors Unterstützung für Steuerungssymbole.

Geändert

  • Optimierte mobile Benutzererfahrung durch dynamische Positionierung von Untertiteln und Overlays sowie Verbesserungen der Barrierefreiheit.
  • Breakpoint für die mobile Ansicht auf 768px festgelegt.

Behoben

  • Umschaltfunktion für Audiodeskription mit Untertitel-basierter Synchronisation bei unterschiedlichen Videolängen.
  • Die Zeitanzeige wurde neben den Fortschrittsbalken verschoben.

1.0.12 – 15.11.2025

Behoben

  • 404-Fehler bei der Aktivierung der Audiodeskription.

1.0.11 – 15.11.2025

Hinzugefügt

  • Mehrsprachige Unterstützung für Gebärdensprachvideos.
  • Einstellungsmenü in der Kopfzeile des Gebärdensprachvideos.
  • Lizenz.

Geändert

  • Das i18n-System wurde überarbeitet und die Barrierefreiheit verbessert.
  • Die Standardsprache wurde auf Englisch umgestellt.

Behoben

  • Barrierefreie Beschriftungen der Sprachauswahlfelder.
  • Positionierung des Menüs für Gebärdensprach-Einstellungen, Tastaturnavigation und Anzeige des Symbols zum Ändern der Größe.
  • Fokus und Schließverhalten von Dropdown-Menüs; verbesserte Fokusverwaltung für Menüs und Dialoge.
  • HTML-Validierung und CSS-Parsing-Fehler.

1.0.10 – 09.11.2025

Geändert

  • Verbesserte Barrierefreiheit von Transkripten und Umschalten der Audiodeskription.

1.0.9 – 08.11.2025

Behoben

  • Die Sprachauswahl für Transkripte wurde verbessert und die Zeitachsen der Untertitel wurden korrigiert.
  • Audiodeskription zum ersten Video hinzugefügt; Demo-Codeblöcke mit den Implementierungen synchronisiert.

1.0.8 – 05.11.2025

Geändert

  • Die Audiodeskription wurde durch das Vertauschen von Quelle und Spur verbessert.

1.0.7 – 31.10.2025

Geändert

  • Besserer Kontrast auf den Demoseiten und im Player.

Behoben

  • Verhindern von Drag-Eingaben bei UI-Interaktionen; vollständige i18n-Unterstützung.

1.0.6 – 27.10.2025

Geändert

  • npm esbuild-Update.

Behoben

  • Hinzugefügt playsinline Unterstützung für die Wiedergabe auf iOS-/Android-Mobilgeräten.
  • Die Videoabmessungen werden beim Verlassen des Vollbildmodus mit der ESC-Taste nicht zurückgesetzt.

1.0.5 – 15.10.2025

Hinzugefügt

  • Internationalisierte Zeitanzeige und Formatierung der Dauer.

1.0.4 – 15.10.2025

Hinzugefügt

  • Verbesserte Barrierefreiheit und Benutzererfahrung bei Wiedergabelisten.

Behoben

  • Kein „Focus Hijacking“ mehr beim Laden.
  • Das visuelle Zeitformat wurde für Screenreader durch natürliche Sprache ersetzt.

1.0.3 – 13.10.2025

Hinzugefügt

  • Umfassende Tastaturnavigation und Barrierefreiheit.

Behoben

  • Der Beschriftungscontainer wird nur angezeigt, wenn Text aktiv ist.

1.0.2 – 12.10.2025

Behoben

  • Korrekte Anordnung der Z-Indizes und Platzierung der Gebärdensprache-Videos.
  • Das Gebärdensprache-Video wird relativ zu den Steuerelementen positioniert.
  • Der Kreis wurde aus dem SVG-Element für die Gebärdensprache entfernt.
  • Untertitel-Popups werden über dem Wiedergabebedienelement positioniert und sind nun kürzer.

1.0.1 – 12.10.2025

Hinzugefügt

  • Funktionierende Demo-Seite zur Gebärdensprache.

1.0.0 – 11.10.2025

  • Erstveröffentlichung des barrierefreien Media-Players „vidply“.

Seite teilen