Shaka Player ist eine Open-Source-JavaScript-Bibliothek für adaptive Medien. Es spielt adaptive Medienformate (wie DASH, HLS und MSS) in einem Browser ab, ohne Plugins oder Flash zu verwenden. Stattdessen verwendet Shaka Player die offenen Webstandards MediaSource Extensions und Encrypted Media Extensions.
Shaka Player unterstützt auch die Offline-Speicherung und Wiedergabe von Medien mithilfe von IndexedDB. Inhalte können in jedem Browser gespeichert werden. Die Speicherung von Lizenzen hängt von der Browserunterstützung ab.
Unser Hauptziel ist es, das Streamen von Video und Audio mit adaptiver Bitrate mithilfe moderner Browsertechnologien so einfach wie möglich zu machen. Wir versuchen, die Bibliothek leicht, einfach und frei von Abhängigkeiten Dritter zu halten. Alles, was Sie zum Erstellen und Bereitstellen benötigen, finden Sie in den Quellen.
Weitere Informationen zu den nächsten Schritten finden Sie in unserer Entwicklungs-Roadmap.
Gepflegte Filialen
Unter „maintained-branches.md“ finden Sie die aktuelle Liste der gepflegten Zweige von Shaka Player.
Plattform- und Browser-Unterstützungsmatrix
Browser | Windows | Mac | Linux | Android | iOS >= 9 | iOS >= 17.1 | iPadOS >= 13 | ChromeOS | Andere |
---|
Chrom¹ | Y | Y | Y | Y | Einheimisch | Einheimisch | Einheimisch | Y | - |
Firefox¹ | Y | Y | Y | ungetestet⁵ | Einheimisch | Einheimisch | Einheimisch | - | - |
Kante¹ | Y | - | - | - | - | - | - | - | - |
Kantenchrom | Y | Y | Y | ungetestet⁵ | Einheimisch | Einheimisch | Einheimisch | - | - |
IE | N | - | - | - | - | - | - | - | - |
Safari¹ | - | Y | - | - | Einheimisch | Y | Y | - | - |
Oper¹ | Y | Y | Y | ungetestet⁵ | Einheimisch | - | - | - | - |
Chromecast². | - | - | - | - | - | - | - | - | Y |
Tizen TV³ | - | - | - | - | - | - | - | - | Y |
WebOS⁶ | - | - | - | - | - | - | - | - | Y |
Hisense⁷ | - | - | - | - | - | - | - | - | Y |
Xbox One | - | - | - | - | - | - | - | - | Y |
Playstation 4⁷ | - | - | - | - | - | - | - | - | Y |
Playstation 5⁷ | - | - | - | - | - | - | - | - | Y |
HINWEISE:
- ¹: Unter macOS wird nur Safari 9+ unterstützt. Unter iOS wird nur iOS 9+ unterstützt. Ältere Versionen werden abgelehnt.
- ²: Die neueste stabile Chromecast-Firmware wird getestet. Sowohl Sender als auch Empfänger können mit Shaka Player implementiert werden.
- ³: Das Modell Tizen 2017 wird vom Shaka Player-Team aktiv getestet und unterstützt. Das Modell Tizen 2016 wird von der Community unterstützt und von uns nicht getestet.
- ⁵: Es wird erwartet, dass diese funktionieren, sie werden jedoch vom Shaka Player-Team nicht aktiv getestet.
- ⁶: Es wird erwartet, dass diese funktionieren, sie werden jedoch von der Community unterstützt und von uns nicht getestet.
- Offizielle Unterstützung für LG WebOS TV: #1330
- ⁷: Es wird erwartet, dass diese funktionieren, sie werden jedoch von der Community unterstützt und von uns nicht getestet.
HINWEISE für iOS und iPadOS:
- Wir unterstützen iOS 9+ über den nativen HLS-Player von Apple. Wir stellen die gleiche API der obersten Ebene bereit, setzen jedoch lediglich das
src
Element des Videos auf das Manifest/Medium. Wir sind also darauf angewiesen, dass der Browser die Manifeste unterstützt. - Seit iPadOS 13 werden MediaSource Extensions unterstützt
- Seit iPadOS 17 und iOS 17.1 werden ManagedMediaSource Extensions unterstützt
Unterstützungsmatrix für Manifestformate
Format | Video-on-Demand | Live | Ereignis | Laufende Aufnahme |
---|
BINDESTRICH | Y | Y | - | Y |
HLS | Y | Y | Y | - |
MSS | Y | - | - | - |
Sie können auch ein Manifest-Parser-Plugin erstellen, um benutzerdefinierte Manifestformate zu unterstützen.
DASH-Funktionen
Unterstützte DASH-Funktionen:
- VOD-, Live- und laufende Aufzeichnungen (dynamische VOD-Inhalte)
- MPD@timeShiftBufferDepth für die Rückwärtssuche in Live-Streams
- Mehrperiodiger Inhalt (statisch und dynamisch)
- Xlink-Elemente (nur actuate=onLoad, Auflösung auf Null, Fallback-Inhalt)
- Alle Formen von Segmentindexinformationen: SegmentBase@indexRange, SegmentTimeline, SegmentTemplate@duration, SegmentTemplate@index, SegmentList
- Multi-Codec-/Multi-Container-Manifeste (wir verhandeln die Unterstützung mit dem Browser und wählen die besten aus)
- Verschlüsselter Inhalt (einschließlich benutzerdefinierter ContentProtection-Schemas, PSSH im Manifest)
- Schlüsseldrehung
- Trick-Modus-Tracks
- WebVTT und TTML
- CEA-608/708-Untertitel
- Multi-Codec-Varianten (auf Plattformen mit ChangeType-Unterstützung)
- MPD-Verkettung
- MPD-Patch-Updates für SegmentTemplate mit $Anzahl$ , SegmentTimeline mit $Anzahl$ und SegmentTimeline mit $Zeit$
DASH-Funktionen werden nicht unterstützt:
- Xlink mit actuate=onRequest
- Manifestiert ohne Segmentinformationen: #1088
- Mehrere Spuren im Trickmodus für dieselbe Auflösung bei unterschiedlichen Bildraten oder Bitraten
- Zeitskalen sind so groß, dass Zeitstempel in JavaScript nicht als Ganzzahlen dargestellt werden können (2^53): #1667
- Elemente mit einem @schemeIdUri-Attribut über den MPD-Patch ändern
- Xlink-Dereferenzierung mit MPD-Patch
HLS-Funktionen
Unterstützte HLS-Funktionen:
- VOD-, Live- und Event-Typen
- Streaming mit geringer Latenz mit Teilsegmenten, Preload-Hinweisen, Delta-Updates und Blockierung des Neuladens von Playlists
- Diskontinuität
- ISO-BMFF / MP4 / CMAF-Unterstützung
- MPEG-2 TS-Unterstützung
- WebVTT und TTML
- CEA-608/708-Untertitel
- Verschlüsselte Inhalte mit PlayReady und Widevine
- Verschlüsselte Inhalte mit FairPlay (Safari nur auf macOS und iOS 9+)
- AES-128-, AES-256- und AES-256-CTR-Unterstützung in Browsern mit Web Crypto API-Unterstützung
- Unterstützung für SAMPLE-AES und SAMPLE-AES-CTR (Identität) auf Browsern mit ClearKey-Unterstützung
- Schlüsseldrehung
- Rohes AAC, MP3, AC-3 und EC-3 (ohne MP4-Container)
- Nur-I-Frame-Wiedergabelisten (für Trickwiedergabe und Miniaturansichten)
- #EXT-X-IMAGE-STREAM-INF für Miniaturansichten
- Interstitials
- Containerwechsel während der Wiedergabe (z. B.: MP4 zu TS, oder AAC zu TS)
HLS-Funktionen werden nicht unterstützt:
- X-SNAP-Attribut in Interstitials
Unterstützte HLS-Tags
Einzelheiten zum HLS-Format und den Bedeutungen dieser Tags finden Sie unter https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
Multivariante Playlist-Tags
-
#EXT-X-STREAM-INF:
-
#EXT-X-MEDIA:
-
#EXT-X-IMAGE-STREAM-INF:
-
#EXT-XI-FRAME-STREAM-INF:
-
#EXT-X-SESSION-DATA:
-
#EXT-X-SESSION-KEY:
Auswahl und Vorladen des EME-Schlüsselsystems -
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-CONTENT-STEERING:
Inhaltssteuerung -
#EXT-X-DEFINE:
Variablenersetzung (Attribute NAME,VALUE,QUERYPARAM
)
Medien-Playlist-Tags
-
#EXTM3U
-
#EXTINF:,[]
-
#EXT-X-PLAYLIST-TYPE:
-
#EXT-X-ENDLIST
-
#EXT-X-MEDIA-SEQUENCE=
-
#EXT-X-TARGETDURATION=
-
#EXT-X-DISCONTINUITY
-
#EXT-X-DISCONTINUITY-SEQUENCE=
-
#EXT-X-BYTERANGE=[@]
-
#EXT-X-MAP:
-
#EXT-X-KEY:
( KEYFORMAT="identity",METHOD=SAMPLE-AES
wird nur mit MP4-Segmenten unterstützt) -
#EXT-X-PROGRAM-DATE-TIME:
-
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-SERVER-CONTROL:
-
#EXT-X-PART-INF:PART-TARGET=
-
#EXT-X-PART:
-
#EXT-X-SKIP:
Delta-Playlists -
#EXT-X-DATERANGE:
Metadaten -
#EXT-X-DEFINE:
Variablenimport und -substitution (Attribute NAME,VALUE,IMPORT,QUERYPARAM
) -
#EXT-X-GAP
-
#EXT-X-PRELOAD-HINT:
-
#EXT-X-BITRATE
MPEG-5 Part2 LCEVC-Unterstützung
Wird nur in Browsern mit Media Source Extensions SourceBuffer-Unterstützung unterstützt
MPEG-5 Part2 LCEVC-Dekodierungsunterstützung (Dekodierung bereitgestellt von lcevc_dec.js, muss separat enthalten sein)
Integrationsdokumentation: Dokumente
Mehr zu MPEG-5 Part2 LCEVC
MSS-Funktionen
Unterstützte MSS-Funktionen:
- VOD
- AAC und H.264
- Verschlüsselter Inhalt (PlayReady)
- TTML/DFXP
- Wird nur mit Codem-Isoboxer unterstützt
MSS-Funktionen werden nicht unterstützt:
DRM-Unterstützungsmatrix
Browser | Widevine | PlayReady | Fair Play | ClearKey⁶ |
---|
Chrom¹ | Y | - | - | Y |
Firefox² | Y | - | - | Y |
Kante³ | - | Y | - | - |
Kantenchrom | Y | Y | - | Y |
Safari | - | - | Y | - |
Oper | Y | - | - | Y |
Chromecast | Y | Y | - | Y |
Tizen-TV | Y | Y | - | Y |
WebOS⁷ | ungetestet⁷ | ungetestet⁷ | - | ungetestet⁷ |
Hisense⁷ | ungetestet⁷ | ungetestet⁷ | - | ungetestet⁷ |
Xbox One | - | Y | - | - |
Playstation 4⁷ | - | ungetestet⁷ | - | ungetestet⁷ |
Playstation 5⁷ | - | ungetestet⁷ | - | ungetestet⁷ |
Andere DRM-Systeme sollten sofort funktionieren, wenn sie interoperabel sind und der EME-Spezifikation entsprechen.
HINWEISE:
- ¹: Nur offizielle Chrome-Builds enthalten das Widevine CDM. Aus dem Quellcode erstelltes Chromium unterstützt kein DRM.
- ²: DRM muss vom Benutzer aktiviert werden. Wenn ein Firefox-Benutzer zum ersten Mal eine Website mit verschlüsselten Medien besucht, wird er aufgefordert, DRM zu aktivieren.
- ³: PlayReady in Edge scheint auf einer VM oder über Remotedesktop nicht zu funktionieren.
- ⁶: ClearKey ist ein nützliches Tool zum Debuggen und bietet keine tatsächliche Inhaltssicherheit.
- ⁷: Es wird erwartet, dass diese funktionieren, sie werden jedoch von der Community unterstützt und von uns nicht getestet.
Manifest | Widevine | PlayReady | Fair Play | ClearKey |
---|
BINDESTRICH | Y | Y | - | Y |
HLS | Y | Y | Ja¹ | - |
MSS | - | Y | - | - |
HINWEISE:
- ¹: Standardmäßig wird FairPlay in Safari mit dem nativen HLS-Player von Apple verarbeitet. Wir unterstützen FairPlay jedoch über MSE/EME. Siehe den Konfigurationswert „
streaming.useNativeHlsForFairPlay
.
Unterstützung für Mediencontainer und Untertitel
Shaka Player unterstützt:
- ISO-BMFF / CMAF / MP4
- Hängt von der Browserunterstützung für den Container über MediaSource ab
- Kann das Feld „sidx“ für SegmentBase@indexRange und SegmentTemplate@index von DASH analysieren
- Kann das Feld „tfdt“ finden und analysieren, um die Segmentstartzeit in HLS zu ermitteln
- Für MSS ist codem-isoboxer v0.3.7+ erforderlich
- WebM
- Hängt von der Browserunterstützung für den Container über MediaSource ab
- Kann Cueing-Datenelemente für SegmentBase@indexRange und SegmentTemplate@index von DASH analysieren
- Wird in HLS nicht unterstützt
- MPEG-2 TS
- Kann in jedem Browser abgespielt werden, der MP4 unterstützt
- Kann Zeitstempel finden und analysieren, um die Segmentstartzeit in HLS zu ermitteln
- WebVTT
- Unterstützt sowohl in Textform als auch eingebettet in MP4
- TTML
- Unterstützt sowohl im XML-Format als auch eingebettet in MP4
- CEA-608
- Unterstützt eingebettet in MP4 und TS
- CEA-708
- Unterstützt eingebettet in MP4 und TS
- Roher AAC
- Unterstützt im Roh-AAC-Container und beim Transmuxen in AAC im MP4-Container (abhängig von der Browserunterstützung über MediaSource).
- Rohes MP3
- Unterstützt im Roh-MP3-Container und Transmuxen in MP3 im MP4-Container (abhängig von der Browserunterstützung über MediaSource).
- Rohes AC-3
- Unterstützt im AC-3-Rohcontainer und Transmuxen zu AC-3 im MP4-Container (abhängig von der Browserunterstützung über MediaSource).
- Rohes EC-3
- Unterstützt im rohen EC-3-Container und Transmuxen zu EC-3 im MP4-Container (abhängig von der Browserunterstützung über MediaSource).
- SubRip (SRT)
- LyRiCs (LRC)
- SubStation Alpha (SSA, ASS)
- SubViewer (SBV)
Untertitel werden standardmäßig vom Browser gerendert. Anwendungen können ein Textanzeige-Plugin für die Kundendarstellung erstellen, um über die vom Browser unterstützten Attribute hinauszugehen.
Transmuxer-Unterstützung
Shaka Player unterstützt:
- Rohes AAC zu AAC in MP4
- Rohes MP3 zu MP3 in MP4
- Rohes AC-3 zu AC-3 in MP4
- Rohes EC-3 zu EC-3 in MP4
- AAC in MPEG-2 TS zu AAC in MP4
- AC-3 in MPEG-2 TS zu AC-3 in MP4
- EC-3 in MPEG-2 TS zu EC-3 in MP4
- MP3 in MPEG-2 TS zu MP3 in MP4
- MP3 in MPEG-2 TS in rohes MP3
- Opus in MPEG-2 TS zu MP3 in MP4
- H.264 in MPEG-2 TS zu H.264 in MP4
- H.265 in MPEG-2 TS zu H.265 in MP4
- Inhalte in MPEG-2 TS mit den bisherigen Codecs gemultiplext
Unterstützung für Miniaturansichten
Shaka Player unterstützt:
- Interne DASH-Miniaturansichten. Verwendung des DASH-IF IOP-Bildanpassungssatzes
- Interne HLS-Miniaturansichten. Verwenden der HLS Image Media Playlist
- Interne HLS-Miniaturansichten. Verwendung von Nur-I-Frame-Wiedergabelisten mit MJPG-Codec
- Externes WebVTT mit Bildern/Sprites (nur für VoD)
Monetarisierung mit Anzeigen
Shaka Player unterstützt:
- IMA SDK für clientseitige Anzeigeneinfügung
- IMA DAI SDK für serverseitige Anzeigeneinfügung
- AWS MediaTailor für Client-Seite
- AWS MediaTailor für Serverseite
- AWS MediaTailor-Overlays
- HLS-Interstitials
- DASH Media Presentation Insertion (MPD-Alternative)
- Benutzerdefinierte Interstitials
- Grundlegende Unterstützung von VAST und VMAP ohne IMA (Wiedergabe ohne Tracking)
Unterstützung für Content Steering
Shaka Player unterstützt Content Steering (v1) in DASH und HLS.
Unterstützte Content-Steering-Funktionen:
- TTL, falls fehlt, beträgt der Standardwert 300 Sekunden.
- RELOAD-URI, wenn es fehlt, verwenden wir die im Manifest angegebene URL als Fallback.
- Nur PATHWAY-PRIORITY-HOST-Ersatz
Content-Steering-Funktionen werden nicht unterstützt:
- PATHWAY-CLONES andere Ersetzungen als HOST.
VR-Unterstützung
Shaka Player unterstützt VR, wenn:
- Inhalte werden automatisch als VR behandelt, wenn sie die folgenden Kriterien erfüllen:
- HLS- oder DASH-Manifest
- fMP4-Segmente
- Das Init-Segment enthält
prji
und hfov
Boxen
- Oder wenn es manuell über die UI-Konfiguration aktiviert wird.
Unterstützte VR-Modi:
- Äquirechteckige Projektion mit 360 Grad horizontalem Sichtfeld.
- Cubemap-Projektion mit 360 Grad horizontalem Sichtfeld.
HINWEISE:
- VR wird nur für klare Streams oder HLS-AES-Streams unterstützt. DRM verhindert den Zugriff auf die Videopixel zur Transformation.
Dokumentation und wichtige Links
- Demo(Quellen)
- Nächtliche Demo
- Demo-Index
- API-Dokumentation
- Tutorials
- Gehostete Builds auf von Google gehosteten Bibliotheken
- Gehostete Builds auf jsDelivr
- Entwicklungs-Roadmap
- Ankündigungsliste (beitreten für seltene Ankündigungen und Umfragen)
- Abonnieren Sie Veröffentlichungen, indem Sie den Anweisungen in diesem Blog folgen
FAQ
Für allgemeine Hilfe und bevor Sie Fehler melden, lesen Sie bitte die FAQ.
Mitwirken
Wenn Sie Verbesserungen oder Korrekturen haben, würden wir uns über Ihre Beiträge freuen. Bitte lesen Sie CONTRIBUTING.md für weitere Informationen über den Prozess, den die Mitwirkenden befolgen sollen.
Framework-Integrationen
Das Shaka-Team verfügt nicht über die Bandbreite und Erfahrung, um Anleitung und Unterstützung für die Integration von Shaka Player in bestimmte Frameworks bereitzustellen, aber einige unserer Benutzer haben dies erfolgreich getan und Tutorials erstellt, um anderen Anfängern zu helfen.
Shaka + ReactJS-Bibliothek
- https://github.com/winoffrg/limeplay
Shaka + ReactJS-Integrationen:
- https://github.com/matvp91/shaka-player-react
- https://github.com/amit08255/shaka-player-react-with-ui-config
Shaka + Next.js-Integration:
- https://github.com/amit08255/shaka-player-react-with-ui-config/tree/master/nextjs-shaka-player
Shaka + Vue.js-Integrationen:
- https://github.com/davidjamesherzog/shaka-player-vuejs
Shaka + Nuxt.js-Integration:
- https://github.com/davidjamesherzog/shaka-player-nuxtjs
Shaka + video.js-Integration:
- https://github.com/davidjamesherzog/videojs-shaka
Shaka + Winkelintegration:
- https://github.com/PatrickKalkman/shaka-player-angular
Wenn Sie Code/Tutorials zur Shaka-Integration veröffentlicht haben, können Sie gerne PRs einreichen, um sie dieser Liste hinzuzufügen. Wir genehmigen dies gerne!