Features
Everything in the box
95 features across 12 areas. Each one names the package that provides it and links to its docs. You install the packages you need, and the rest stays out of your bundle.
Protocols and formats
One engine reads HLS and DASH, in the containers streams are packaged in.
| Feature | Provided by | Docs |
|---|---|---|
| HLS with fragmented MP4 (CMAF) | Engine | Read |
| DASH on demand and live | Engine | Read |
| Multi-period DASHPlayed as one presentation | Engine | Read |
| HLS with MPEG-TS segmentsRewrapped as fragmented MP4 in a Worker | Engine | Read |
| Packed audio (AAC with ID3) | Engine | Read |
| AES-128 encrypted segments | Engine | Read |
| Codecs read from the init segmentFor a playlist that declares none | Engine | Read |
| Native HLS in SafariThe player hands HLS to the browser where that is better | Player | Read |
| Progressive MP4 and MP3Through the browser's own playback | Player corePlayer | Read |
| Safari on iPhone and iPadThrough ManagedMediaSource, from iOS 17.1 | Engine | Read |
Live
Sliding windows, the live edge, and wall-clock time.
| Feature | Provided by | Docs |
|---|---|---|
| Live HLS and live DASH | Engine | Read |
| DVR window and seeking back | Engine | Read |
| Go to the live edge | EnginePlayer | Read |
| Latency behind the live edge | Engine | Read |
| Program date time | Engine | Read |
| CMAF timingLands a segment at its playlist time, whatever the packager's clock | Engine | Read |
Quality
Adaptive bitrate you can constrain, pin, and read.
| Feature | Provided by | Docs |
|---|---|---|
| Adaptive bitrateFrom throughput and buffer, with an emergency floor | Engine | Read |
| Cap to the player's size | Engine | Read |
| Constraints and pins | Engine | Read |
| Codec switching | Engine | Read |
| Quality switch timingAt the next segment, soon, or now | Engine | Read |
| HDR by capabilityPQ and HLG only where the screen and decoder show them | Engine | Read |
| Quality menu | Player | Read |
DRM
Every major key system, in the engine or on a native session.
| Feature | Provided by | Docs |
|---|---|---|
| Widevine | Engine | Read |
| PlayReady | Engine | Read |
| FairPlay | Engine | Read |
| ClearKey | Engine | Read |
| License renewal | Engine | Read |
| Key sessions released on suspendFor a rights server that limits concurrent streams | Engine | Read |
| A license server per key system, and per source | Engine | Read |
| DRM without the engineFor a native HLS session in Safari | EnginePlayer | Read |
| DRM badge in the controls | Player | Read |
Subtitles and captions
The formats broadcast and streaming both use.
| Feature | Provided by | Docs |
|---|---|---|
| WebVTT | Engine | Read |
| Segmented WebVTT | Engine | Read |
| TTML | Engine | Read |
| CEA-608 captions | Engine | Read |
| CEA-708 captions | Engine | Read |
| Forced subtitles | Engine | Read |
| Native text tracksIn step with the browser's caption menu | Engine | Read |
| Subtitle size and backgroundSet by the viewer in the subtitles menu | Player | Read |
Audio
Alternate soundtracks, named for a menu.
| Feature | Provided by | Docs |
|---|---|---|
| Alternate audio | Engine | Read |
| Localized track namesFrom the HLS localization dictionary | Engine | Read |
| Audio description and SDH labels | EnginePlayer | Read |
| Channel layout of each trackFor a label such as "English (5.1)" | Engine | Read |
| Audio menu | Player | Read |
| Audio-only sources | Player | Read |
Network
Hooks on every request, and the CDN standards.
| Feature | Provided by | Docs |
|---|---|---|
| Request and response hooks | Engine | Read |
| Retries and recovery | Engine | Read |
| Stall recovery and gap jumpingNudges the playhead, flushes and refetches, or jumps a small gap | Engine | Read |
| Suspend and resumeStops every request while the source stays loaded | Engine | Read |
| CMCDAs a query argument or as headers | Engine | Read |
| CMSD | Engine | Read |
| Content steering | Engine | Read |
| Preloading of the next sourceThe manifest, or its first segments too | Engine | Read |
| Several sources with fallback | Player corePlayer | Read |
The player
A custom element and the controls you place inside it.
| Feature | Provided by | Docs |
|---|---|---|
| A custom element, no framework | Player | Read |
| Controls as elements you composePlay, seek, volume, menus, time, title, spinner, error screen | Player | Read |
| Styling with parts and tokens | Player | Read |
| Labels in any language | Player | Read |
| Keyboard and media keys | Player | Read |
| Screen reader namesEvery control has a name, and the sliders announce their value in words | Player | Read |
| Controls that hide by priorityOn a narrow player the bar hides the least important first | Player | Read |
| Your own icons and controls | Player | Read |
| Size tiersA compact, a regular and a wide layout, from the player's own width | Player | Read |
| Fullscreen and picture in picture | Player | Read |
| AirPlay | Player | Read |
| Playback speed menu | Player | Read |
| A headless coreFor a page that writes its own interface | Player core | Read |
| Script tags from a CDN | EnginePlayer | Read |
Playlist
A list of items, from markup or from a script.
| Feature | Provided by | Docs |
|---|---|---|
| Next, previous, repeat and shuffle | Playlist | Read |
| The list, over the picture | Playlist | Read |
| Up next card with a countdown | Playlist | Read |
| Preload of the next item | Playlist | Read |
| Lock screen and media keysNext and previous through the Media Session API | Playlist | Read |
| A failed item is skipped | Playlist | Read |
TV and casting
The living room: remotes, Chromecast, and 2021 TVs.
| Feature | Provided by | Docs |
|---|---|---|
| Samsung Tizen and LG webOS, from 2021 modelsThe floor is Chromium 76 | EngineTV navigation | Read |
| Remote control navigation | TV navigation | Read |
| Seeking with the remoteThe keys move a target, and Enter seeks to it | TV navigation | Read |
| Chromecast sender | Cast sender | Read |
| Chromecast receiverA bridge to Google's receiver framework, with hooks | Cast receiver | Read |
Diagnostics
See what the player did, and send it to someone who can read it.
| Feature | Provided by | Docs |
|---|---|---|
| Stats and the engine trace | Engine | Read |
| Replay of a recorded trace | Engine | Read |
| Quality of experience metricsStartup, rebuffering and switches, measured locally | Engine | Read |
| A diagnostics panel in the playerCharts, engine state, browser support, and a report to copy | Diagnostics | Read |
| Typed events and error codes | Engine | Read |