
Browser-Unterstützung
HLS
| Browser | Implementierung | Status |
|---|---|---|
| Chrome / Edge | hls.js (wird bei Bedarf vom CDN geladen) | Funktioniert |
| Firefox | hls.js | Funktioniert |
| Desktop macOS Safari | hls.js (zur Angleichung an Chrome/Firefox: Menü für volle Qualität, erweiterte Untertitel-Gestaltung) | Funktioniert |
| iOS / iPadOS Safari | Natives HLS (<video> MSE ist auf iOS nicht verfügbar) – VidPly bindet native TextTrack API in die Benutzeroberfläche für Untertitel / Transkript / Qualität | Funktioniert |
DASH
| Browser | Implementierung | Status |
|---|---|---|
| Chrome / Edge | dash.js | Funktioniert |
| Firefox | dash.js | Funktioniert |
| Safari | dash.js | Funktioniert |
Technische Einrichtung
HLS
1. hls.js-Bibliothek
Wird bei Bedarf von mpc-vidply (nur wenn eine .m3u8 Quelle vom VidPlyProcessor):
page.includeJSFooter {
hlsjs = cdn.jsdelivr.net/npm/hls.js@latest/dist/hls.min.js
hlsjs.external = 1
}
2. VidPly HLS-Renderer
Datei: libs/vidply/src/renderers/HLSRenderer.ts
Der Renderer entscheidet selbst, ob er hls.js oder die native HLS-Unterstützung des Browsers verwendet werden soll:
- Unter iOS / iPadOS (
/iPad|iPhone|iPod/UA oder iPad im Desktop-Modus:MacIntel+maxTouchPoints > 1) ist MSE nicht verfügbar, daher verwendet der Renderer die native<video>HLS-Wiedergabe überHTML5Renderer. - Auf allen anderen Plattformen (Chrome, Firefox, Edge und Desktop-Safari unter macOS) wird
hls.jsfür volle Funktionsparität – Qualitätsmenü, erweiterte Untertitelgestaltung und eine einheitliche Benutzererfahrung über alle Browser hinweg.
Native HLS-Brücke für iOS / iPadOS
Wenn der native Weg gewählt wird, fügt der Renderer Listener an HTMLMediaElement.textTracks , damit das Untertitelmenü, das interaktive Transkript und das Qualitätsmenü von VidPly weiterhin funktionieren:
this.media.textTracks.addEventListener('addtrack', checkTracks);
this.media.textTracks.addEventListener('removetrack', checkTracks);
this.media.addEventListener('loadedmetadata', checkTracks);
Jeder addtrack Burst (einer pro Untertitel-Rendering im Manifest) wird entprellt (~150 ms), bevor VidPly die sichtbare Untertitel-Benutzeroberfläche neu berechnet, sodass das Menü selbst bei mehrsprachigen Streams in einem einzigen Render-Durchlauf erstellt wird.
Live-Transkript-/Untertitel-Aktualisierungen
Der Renderer wartet auf Hls.Events.SUBTITLE_FRAG_PROCESSED und sendet ein generisches textcuesupdate Ereignis, damit das interaktive Transkript und die Live-Untertitel synchron bleiben, während neue Untertitel-Fragmente für Long- und Live-Streams geladen werden. Das gleiche Ereignis wird vom nativen iOS-Pfad auf cuechange.
DASH
1. dash.js-Bibliothek
Wird bei Bedarf von mpc-vidply (nur wenn eine .mpd Quelle erkannt wird):
page.includeJSFooter {
dashjs = cdn.jsdelivr.net/npm/dashjs@latest/dist/dash.all.min.js
dashjs.external = 1
}
2. VidPly DASH-Renderer
Datei: libs/vidply/src/renderers/DASHRenderer.ts
Funktionen:
- Adaptives Bitrate-Streaming mit automatischer Qualitätsumschaltung
- TTML/stpp-Untertitel (nativ von dash.js gerendert)
- WebVTT-Untertitel (verarbeitet durch das Untertitel-System von VidPly + interaktives Transkript)
- Integration der Benutzeroberfläche zur Qualitätsauswahl
- Robuster Abbau (
dash.reset()danndash.destroy()), umSourceBufferFehler beim Stream-Wechsel - Geschwindigkeitssteuerung standardmäßig ausgeblendet für DASH-Streams (
hideSpeedForDash: true)
Content Security Policy
Datei: Configuration/ContentSecurityPolicies.php
Erforderliche CSP-Anweisungen (gemeinsam für HLS und DASH):
'media-src' => ['blob:', 'data:', 'https:'],
'worker-src' => ['blob:'],
'connect-src' => ['blob:', 'data:', 'https:'],
'script-src-elem' => ['https://cdn.jsdelivr.net'],
Warum diese benötigt werden:
media-src 'blob:'—hls.js/dash.jsLegen Sie eineblob:URL während<video>.srcwährend der Wiedergabe fest.media-src 'data:'— Einige HLS-Varianten betten Init-Segmente / WebVTT inline alsdata:URIs ein.worker-src 'blob:'—hls.js/dash.jsWorker ausblob:URLs zum Demuxen.connect-src 'https:'— Abrufen von Segmenten und Manifesten von beliebigen CDNs.script-src-elem 'https://cdn.jsdelivr.net'— Ladenhls.min.js/dash.all.min.jsvon jsdelivr.
Verwendung
Backend
HLS und DASH sind keine eigenständigen Medientypen. Stattdessen werden Streaming-Quellen als Dateien innerhalb des Medientyps „Video“ oder „Audio“ hinzugefügt.
HLS/DASH zu einem Video-Datensatz hinzufügen:
- Erstellen Sie einen VidPly-Mediendatensatz vom Typ „Video“
- Fügen Sie ein
.m3u8(HLS)- oder.mpd(DASH)-Datei als Medienquelle - Fügen Sie optional progressive Fallbacks (MP4, WebM) hinzu – der Player bevorzugt DASH → HLS → Progressive
- Fügen Sie optional lokale VTT-Dateien hinzu, um eingebettete Untertitel zu überschreiben
- Fügen Sie ein Posterbild hinzu (zulässige Formate:
png,jpg,jpeg,webp,svg) - Speichern
HLS/DASH zu einem Audio-Datensatz hinzufügen:
- Erstellen Sie einen VidPly-Medien-Eintrag vom Typ „Audio“
- Fügen Sie ein
.m3u8(HLS) oder.mpd(DASH)-Datei als Medienquelle - Fügen Sie optional progressive Fallbacks (MP3, OGG) hinzu
- Speichern
Frontend
- Erkennt den Stream-Typ automatisch anhand des MIME-Typs oder der URL-Erweiterung (
.m3u8für HLS,.mpdfür DASH) - Priorität der Quellen: DASH → HLS → progressiver Fallback
- iOS / iPadOS verwenden natives HLS, zeigen aber dennoch Untertitel, Transkript und Qualität über die Benutzeroberfläche von VidPly an; alle anderen Browser verwenden
hls.js. Alle Browser verwendendash.jsfür DASH. - Eingebettete Untertitel aus HLS-/DASH-Manifesten werden standardmäßig verwendet; lokale VTT-Dateien dienen als optionale Überschreibungen
- Qualitätsumschaltung verfügbar (sofern der Stream mehrere Stufen bietet)
- Ein zentrierter Puffer-Spinner wird automatisch angezeigt, während der Stream gepuffert wird
Testen
ddev typo3 cache:flush
HLS-Test-URLs:
- Apple-Demo:
devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_fmp4/master.m3u8 - Akamai-Demo:
cph-p2p-msl.akamaized.net/hls/live/2000341/test/master.m3u8
DASH-Test-URLs:
Fehlerbehebung
Stream wird nicht abgespielt:
- Überprüfen Sie, ob die URL öffentlich zugänglich ist
- Überprüfen Sie die CORS-Header auf dem Stream-Server (einschließlich
Access-Control-Allow-OriginfürRangeAnfragen) - Überprüfen Sie die CSP-Konfiguration (inkl.
blob:,data:,worker-src 'blob:') - Auf JavaScript-Konsolenfehler prüfen
Keine Schaltfläche für die Qualität:
- Überprüfen, ob der Stream mehrere Qualitätsstufen hat
- Überprüfen, ob
hls.min.js/dash.all.min.jskorrekt geladen wird (Registerkarte „Netzwerk“) - Unter iOS: Qualitätsvarianten werden nur angezeigt, wenn das Manifest sie über native
TextTracks – VidPly erkennt sie automatisch überaddtrack
Untertitel/Transkript werden auf iOS HLS nicht angezeigt:
- Überprüfen Sie, ob das Manifest
#EXT-X-MEDIA:TYPE=SUBTITLESWiedergabevarianten - Untertitel erscheinen kurz nach
loadedmetadata(mit einer Verzögerung von ca. 150 ms) – gib dem Player einen Moment Zeit, nachdem du auf „Play“ gedrückt hast
CSP-Fehler:
- Prüfen
ContentSecurityPolicies.php, ob vorhanden und registriert - Alle Caches löschen
- Überprüfen
blob:unddata:sind für beidemedia-srcundconnect-src
Leistung
- Adaptive Bitrate – Passt die Qualität automatisch an (HLS und DASH)
- Pufferoptimierung – Flüssige Wiedergabe
- CDN-Bereitstellung – Schnelles Laden der Bibliothek über jsdelivr
- Minimaler Overhead –
hls.js/dash.jsLaden nur, wenn eine.m3u8/.mpdQuelle tatsächlich verwendet wird - Bedingtes Laden —
hls.jsunddash.jswerden unabhängig voneinander geladen, basierend auf den vomVidPlyProcessor - Native HLS auf iOS — Vermeidet die Kosten für die Ausführung
hls.jsauf Geräten, auf denen es ohnehin nicht ausgeführt werden kann, während die vollständige VidPly-Benutzeroberfläche über die nativeTextTrackBrücke