Version 1 beta has arrived! This is a preview release of version 1.0. It is feature complete and intended for testing purposes.
New Features
- Apple Low-Latency HLS support
- Improved support for redundant variants with tracks
- Improved audio and subtitle track selection with multiple media and stream variants containing different GROUP-ID values
- Progressive streaming option (experimental)
- Basic IMSC1 support (experimental)
Bug Fixes and improvements
- TypeScript modules
- Improve remuxing of non-independent segments and backtracking - fixes #2808
- Use TypeScript type imports where applicable - #3304
- Set media duration when attaching after level update
- Prevent SourceBuffer unhandled exceptions dealing with MPEG audio
From alpha.5:
- Added missing
Level
propertiesmaxBitrate
anduri
toLEVEL_SWITCHING
events
API Changes
- New config options:
lowLatencyMode
- set tofalse
to disable Low-latency part loading and target latency playback rate adjustmentprogressive
- (experimental) set totrue
to stream and append loaded audio and video data before each segment load completion. Not recommended for production or small segments with only a single GoP or less.
- Event order and content has changed in some places. See Breaking Changes below, and please report any issues with breaking changes that impact your integrations
hls.audioTracks
andhls.subtitleTracks
as well asAUDIO_TRACKS_UPDATED
andSUBTITLE_TRACKS_UPDATED
events only list tracks in the active level's audio/sub GROUP-ID afterLEVEL_LOADING
- #3293- Added
groupId
to audio and subtitle track loading and loaded events - Added additional error details to help identify the source of certain network error events:
SUBTITLE_LOAD_ERROR
SUBTITLE_TRACK_LOAD_TIMEOUT
UNKNOWN
Breaking Changes
- Promise support is now required. Please bring your own polyfill
- The
stats
object has changedtrequest
,tfirst
,tload
have been replaced byloading: HlsProgressivePerformanceTiming
tparsed
has been replaced byparsing: HlsProgressivePerformanceTiming
- On the
Fragment
object:hasElementaryStream
function has been removedsetElementaryStream
and_elementaryStreams
have been renamed (these are only for internal use)
BUFFER_CODECS
data has changed from{ tracks: { video?, audio? } }
to simply{ video?, audio? }
BUFFER_APPENDING
data has changed from{ type, data, parent, content }
to{ type, data, frag, chunkMeta }
BUFFER_APPENDED
data has changed- Event binding should remain unchanged using the public API, but refer to #2395 if experiencing an issue with changes to event constants.
- As mentioned in API changes,
hls.audioTracks
andhls.subtitleTracks
as well asAUDIO_TRACKS_UPDATED
andSUBTITLE_TRACKS_UPDATED
events only list tracks in the active level's audio/sub GROUP-ID afterLEVEL_LOADING
(this will go unnoticed for streams with no or only one group per track type)- The
MANIFEST_PARSED
event still reports all tracks when multiple GROUP-ID values are present. Applications that used that event to get tracks would need to be updated in v1 to switch to the corresponding track update events to only select available tracks using the available indexes. - Track ids are no longer indexes of the complete list of audio or subtitle tracks. They are now indexes within each group. So six tracks in two groups that had ids 0,1,2,3,4,5 will now have ids 0,1,2,0,1,2. This allows for tracks to be changed by index/id within the range of available tracks as they were before.
- The
Known Issues
- Audio codec switching causes media errors and requires media recovery (resetting the source buffers as implemented in the demo page. Repro by switching to and from lowest level of redundant levels test stream). Buffering of LC-ACC and HE-AAC (mp4a.40.2, mp4a.40.5) causes a media decode error that requires media recovery. This is not a new issue, but one that should be addressed by using
SourceBuffer.changeType()
and revisitinghls.swapAudioCodec()
. - Duplicate or redundant ID3 (#1975) and CC (#3321) cues may be appended for time ranges when a level change overwrites buffered data.
- Missing support for multiple EXT-X-MAP tags (Issue #1990, PR #3312)
- Intermittent issues with audio track sync on live fragmented mp4
Summary
Demo Page
https://hls-js-66fef5f0-45d4-4c10-8ab6-463362f9c21d.netlify.app/demo/
Changes Since Last Release
v1.0.0-alpha.5...v1.0.0-beta.1
Feedback
To provide feedback please a bug report or feature request via the issue tracker.
If you do file an issue, please include a test stream, and consider contributing to #3065.
Thank you to everyone who made this possible and who contributed to the project over the years! 🌟 🎁 Happy holidays 🎁 🌟