Skip to content

Releases: Dash-Industry-Forum/dash.js

dash.js v5.0.0

14 Feb 14:09
Compare
Choose a tag to compare

Notes

Documentation

With version 5.0.0 we are also introducing a dedicated documentation page for dash.js: https://dashif.org/dash.js/ . It walks you through the setup and includes detailed information on how to use the various dash.js features. Most of the documentation is part of the Usage section.

Migration from v4 to v5

dash.js version 5.0.0 introduces changes to the build files, settings and the APIs. Our new documentation page contains a migration guide to help you upgrade from v4 to v5: https://dashif.org/dash.js/pages/developers/migration-guides/4-to-5.html . Please let us know if you encounter any issues.

Build files

With version 5 of dash.js we introduced three different bundle formats:

  • UMD legacy: A UMD build targeting legacy platforms by specifying the babel target ie: '11'. In addition,
    core.js polyfills are enabled.
  • ESM modern: An ESM build using .browserslistrc as target, with target set to defaults. No core.js
    polyfills are enabled.
  • UMD modern: A UMD build targeting modern platforms using .browserslistrc as target, with target set to
    defaults. No core.js polyfills are enabled.

All the bundled files are located in the dist directory of the repository. The legacy folder inside the dist
folder contains the UMD legacy build. The modern folder inside the dist folder contains both the ESM modern and
the UMD modern build.

The following entry points are defined in the package.json:

{
  "types": "./index.d.ts",
  "import": "./dist/modern/esm/dash.all.min.js",
  "default": "./dist/modern/esm/dash.all.min.js",
  "browser": "./dist/modern/umd/dash.all.min.js",
  "script": "./dist/modern/umd/dash.all.min.js",
  "require": "./dist/modern/umd/dash.all.min.js"
}

Features

  • [4180] Adds tXml as the new XML parser to speed up parsing time especially for long SegmentTimeline manifest files by @bbert

  • [4237] Adds new throughput calculation modes and support for the Resource Timing API and the Network Information API by @dsilhavy

  • [4276] Adds support for the SupplementalProperty “urn:mpeg:adaptation-set-switching:2016”. This allows dash.js to adapt between Representations of different AdaptationSets. by @dsilhavy

  • [4562] Adds handling of keystatuseschange events. If a key is not usable (internal-error or output-restricted) the player switches to a different track. In case of AdaptationSet Switching (urn:mpeg:dash:adaptation-set-switching:2016) the unsupported Representations are removed from the list of possible options. by @dsilhavy

  • [4545] Add support for forced subtitles @dsilhavy

  • [4578] Add basic support for UrlQueryInfo and ExtUrlQueryInfo as defined in Annex I of the DASH specification @JoaquinBCh @sebastianpiq

  • [4299] Add support for network request and network response interceptors using CommonMediaRequest and CommonMediaResponse classes defined in the SVTA Common Media Library @bbert

  • [4380] Add support for “@ref” and “@refid” in ContentProtection elements @dsilhavy

  • [4418] Adds a new functional testsuite including many additional tests e.g. for initial audio, initial text and gap handling. @dsilhavy

  • [4391] Parse ID3 payload for inband events @littlespex

  • [4419] Add support for the CTA-WAVE Common Access Token @dsilhavy

  • [4426] Add support for CMCD initialization and configuration coming from the MPD as specified in MPEG-DASH v6 @matiasrb97 @santiagomintegui @N1Knight

  • [4426] Add support for sending CMCD data to a content steering server @matiasrb97 @santiagomintegui @N1Knight

  • [4485] Add new timing related APIs as documented here @dsilhavy

  • [4491] MPEG-5 Part 2 LCEVC SEI Integration into dash.js @v-nova-vinod

  • [4548] Add support for filterting unsupported Representations based on the DRM capabilities using the Media Capabilities API @dsilhavy

  • [4559] Implements custom Karma launchers for WebOS and Tizen to execute functional tests on SmartTVs @dsilhavy

  • [4585, 4610] Add support for scte214:supplementalCodecs @gmcgarry

  • [4603] Add support for CMCD v2 keys “ltc” and “msd” @JoaquinBCh @sebastianpiq

  • [4627, 4659] Adjust the build configuration to output different UMD and ESM bundles. @dsilhavy

  • [Link, 4645] Add a new documentation website to document how to use dash.js and the various dash.js features @dsilhavy

Improvements

  • [4469] Cleanup project dependencies @dsilhavy

  • [4385, 4411] Enhance handling of Essential Properties by allowing the registration of Essential Properties that should be known to the capabilities check. @stschr

  • [4661] Adds a new setting deleteEventMessageDataAfterEventStarted set to true by default. If this flag is enabled, the EventController will delete the messageData and the parsedMessageData of events after they have been started. This is to save memory in case events have a long duration and need to be persisted in the EventController for a while to not be retriggered. @dsilhavy

  • [4471] Add mapping of HDR EssentialProperty descriptors to Media Capabilities API queries @stschr

  • [4668] Refactor the FetchLoader class @dsilhavy

  • [4660] Update typings in the Typescript definition @ShikiSeiren

  • [4522] Integrates the CTA 608 parser from the SVTA Common Media Library @agajassi

  • [4351] Refactor the CMSD implementation to use the Common Media Library @littlespex

  • [4299] Integration of CommonMediaRequest and CommonMediaResponse interfaces from the SVTA Common Media Library. @bbert

  • [4551] Enables switching between Representations of different AdaptationSets using setRepresentationForTypeById() @dsilhavy

  • [4599] Migrate CircleCI jobs to Github Actions @dsilhavy

  • [4600] Add synthetic stalls @tom-coward

  • [4564] Optimize MediaCapabilitiesAPI checks by saving the results and only running new checks when the configuration has not been tested before. This avoids calling the MediaCapabilitiesAPI after each MPD update to filter unsupported tracks and qualities. @dsilhavy

  • [4575] This PR optimizes the codec support check using the Media Capabilities API. Each specific codec configuration (codec string, width, height, bitrate, framerate, keySystemConfiguration) is checked only once. The decodingInfo is saved and persisted until the player object is destroyed @dsilhavy

  • [4524] Optimize switch between codecs by using changeType() if available @dsilhavy

  • [4562] Only apply changeType() if the codec family has not changed. For instance, if we are switching between avc1 and avc3 we dont need to call changeType(). @dsilhavy

  • [4524] Optimize sorting or Representations by using qualityRanking and pixels per second. @dsilhavy

  • [4594, 4595] Take the segment duration into account when checking if a new request shall be scheduled. @dsilhavy

  • [4276] Rework ABR handling to use Representation IDs instead of indices @dsilhavy

  • [4206] Replace internal CMCD utilities with SVTA CML CMCD utilities @littlespex

  • [[4237]](#42...

Read more

dash.js v4.7.4

20 Feb 09:43
Compare
Choose a tag to compare

Features

#4338 Add support for DVB Font downloads as specified in ETSI TS 103 285 V1.4.1 - Section 7.2 Downloadable Fonts by @mattjuggins
#4360 Add an event that enables manual rendering of subtitles by @bitboxer
#4330 Add API endpoint to trigger a manifest refresh by @eirikbjornr
#4336 Add IMSC settings for rollUp and displayForcedOnly by @nigelmegitt
#4382 Add a liveUpdateTimeThreshold to control time syncing during playback of live streams by @matvp91

Improvements

#4359 Fix flickering and blinking of IMSC subtitles by @mattjuggins
#4350 Include HTTP request range in data that is passed to the modifyRequest function by @dsilhavy
#4356 Remove unused depdendency foodoc and move JSDoc related dependencies to devDependencies section in the package.json by @dsilhavy
#4362 Refactor DVB extensions properties to consistently use camel case. by @mattjuggins

Bugfixes

#4348 #4349 Remove duplicate events in index.d.ts by @kris-youview
#4355 Fix invalid warning in StreamProcessor.js by @dsilhavy
#4335 Remove specific Chrome version from CircleCI config by @dsilhavy
#4363 Fix PlaybackErrorEvent Typescript typing by @kris-youview
#4365 Add a try/catch around matchSettingsLang in case bcp47Normalize fails with an error by @dsilhavy
#4368 Check for undefined values in addHttpRequest method by @dsilhavy
#4389 Fix a bug when dispatching subtitle events that causes an error in the event bus when the video is seeked by @dsilhavy

dash.js v4.7.3

08 Dec 14:52
Compare
Choose a tag to compare

Features

#4319 Add support for playback using the Managed Media Source @dsilhavy

Improvements

#4280 Change template for JSDocs to avoid styling issues like the menu blocking the parameter description @abdulaziz-bd
#4298 Adds settings parameters to configure the AbandonRequestsRule.js @dsilhavy
#4267 Update all URLs to Livesim. Use Livesim2 instead of Livesim1 @dsilhavy
#4305 Remove outdated cues from track when adding a new cue to avoid memory leaks. @dsilhavy
#4310 Add new BBC R&D Test Streams to Reference Player @mattjuggins
#4320 Enable pass-through of UTF-8 chars when provided via lang-attribute @stschr
#4322 For low latency DASH use min/max playbackRate when the buffer is safe in mode: liveCatchupModeLoLP @bwallberg
#4324 Update to imscJS v1.1.4 @nigelmegitt

Bugfixes

#4296 Fix two scheduling errors related to quality switches @dsilhavy
#4297 Fix the handling of abandoning segment requests @dsilhavy
#4314 Fix issues with the controlbar when muting video playback and transitioning from dynamic to static content @ShikiSeiren
#4323 Fix a bug in the OfflineStreamProcessor.js @dsilhavy

dash.js v4.7.2

28 Sep 13:24
Compare
Choose a tag to compare

Features

#4281 Adds a functional testsuite based on the Karma framework @dsilhavy
#4270 Reset MSE when switching codec if changeType() is unstable or unavailable. @matvp91

Improvements

#4225 Define target web and es5 for webpack to make build files ES5 compliant @dsilhavy
#4221 Fix init value for storeLastSettings @minhui-foxtel
#4278 Add support for replacing a text node via MPD patching. @dsilhavy
#4242 Prevent redundant CC parser restarts during Low Latency streams @m-buczek
#4274 Add setting to change mediasource duration from infinity to math.pow(2, 32) @bwallberg
#4249 Compare indices of mediaInfo objects when checking if a track change was rendered. This accounts for content that has no ID attribute for the AdaptationSets @dsilhavy
#4272 Remove babel-preset-env @ShiningTrapez

Bugfixes

#4224 Fix a bug for VTT.js based rendering that causes cues not to be removed after switching to a new source. @dsilhavy
#4279 Do not execute multiple setCurrentTime via waitForReadyState to avoid race condition @dsilhavy
#4239 Remove unusable key sessions when ProtectionController is stopped without waiting for session.close promise to be resolved @dsilhavy
#4246 Fixes for edge case errors that have been captured by Sentry IO around referencing null objects after reset has been called. @littlespex
#4211 Fix types of TestRequest URL property @ondreian
#4268 Added getTargetLiveDelay method to type definitions @matvp91
#4252 Fix wrong attribute in L2A rule @dsilhavy
#4253 Fix error in ProtectionModel_21Jan2015.js when closing key session @dsilhavy
#4223 Fix wrong Typescript definition of updateSource @dsilhavy
#4265 Check for "text/vtt" in catch block of SourceBufferSink.js @dsilhavy
#4273 Use fixed version of Chrome driver as latest one is unavailable @dsilhavy
#Link Upgrade browser-tools CircleCI orb to 1.4.2 to solve Chromedriver issue @dsilhavy

Others

Link Change content steering sample stream URL @dsilhavy
Link Use license that doesnt expire in the Widevine sample @dsilhavy
Link Change MSS sample streams @dsilhavy

dash.js v4.7.1

21 Jun 10:03
Compare
Choose a tag to compare

Improvements

#4201 #4203 Improve throughput on abort: Enables throughput rule to consider measured throughput (or value returned by CMSD response header) on the aborted requests @bbert
#4195 L2A Improvements based on BBC MMSys Paper @piersoh
#4193 Add autoLoad flag to start playback in reference client once page is loaded @dsilhavy
#4196 Add option to mute playback in reference UI via query parameters @dsilhavy

Bugfixes

#4189 Fix reporting of CMCD for SegmentBase range requests @dsilhavy
#4213 Content Steering: Add protocol string to host url if not present @dsilhavy
#4192 Do not close key session if key is usable in getLicense.html demo @dsilhavy
#4191 Typescript: Fixed FragmentRequest 'type' typing @ShikiSeiren
#4185 Fix handling of MPDs containing SegmentList with SegmentTimeline @tea
#4208 Fix a regression for subtitle playback. We need the segment duration of the subtitle tracks to get a valid buffer target @dsilhavy
#4214 Fix JSDoc in Settings.js @dsilhavy
Link Add postbuild command to copy index.d.ts to dash.d.ts @dsilhavy
Link Add Axinom teststreams with new license server URL @dsilhavy
Link Fix wrong unregister event listener for PLAYBACK_SEEKED in CatchupController @dsilhavy

dash.js v4.7.0

05 May 11:34
Compare
Choose a tag to compare

Features

#4173 Add support for DASH content steering version 0.9.7 including support for pathway cloning and steering elements @dsilhavy
#4127 Add support for inband prft boxes parsing @bbert
#4169 Allow preloading content with a specific start time @dsilhavy

Improvements

#4155 Fix blinking cues when segmented over multiple segments or chunks (cont'd) @bbert
#4158 Add DescriptorType model class to MediaInfo for elements of type viewpoint, role, accessibility, audioChannelConfiguration @stschr
#4174 Allow the playback whenever the t attribute is missing in the SegmentTimeline elements @dario-fiore
#4126 Add timeout for fragment request progress @bbert
#4128 Update BBC sample streams in reference client and sample pages @dsilhavy
#4138 Upgrade IMSC.js version to 1.1.3 @vodlogic
Link Remove Github issues stale bot @dsilhavy
Link Use dash.all.min.js as main entry point for npm installations @dsilhavy
Link Add teststream for SegmentTimeline with $number @dsilhavy
Link Link new sample stream in content steering sample @dsilhavy

Bugfixes

#3913 Fix Typescript settings and add missing objects @ShikiSeiren
#4136 Update getMatroskaUint to handle larger integer values @kv-bh
#4156 Fix styling of embedded WebVTT cues by adding support for sttg box @dsilhavy
#4149 Fix: changeType() is Not Fully Implemented on Sony PS5 @agajassi
#4172 Process EssentialProperty_asArray in addition to EssentialProperty @stschr
#4163 Fix bug which causes multiperiod stream to stall after internal seek in previous period. Preloading was not triggered again. @dsilhavy
#4167 Fix: VTT line styling failing, invalid snapToLines value @bwallberg
#4130 Fixes in calculateThroughputByChunkData() @piersoh
#4140 Fix DRM checking for single representation in adaptation @minhui-foxtel
#4144 Fix/rerequest quality switch @dsilhavy
#4147 Initialize box processors when MSS content is actually being played @dsilhavy
#4165 fix: wrong MediaInfo.labels type definition @bwallberg
Link Add missing event to ProtectionEvents.js @dsilhavy
#4177 Fix linting errors for "no-multi-space" rule @dsilhavy
#4178 Fix nullpointer if video element is set to null @dsilhavy
#4176 Fix error in playFromTime.js test that causes CircleCI report upload to crash @dsilhavy

dash.js v4.6.0

20 Feb 08:06
Compare
Choose a tag to compare

Features

  • #4108 Adds the preload functionality to the current version of dash.js. The idea is to preload the media segments into the memory before attaching a video element and initializing the MSE. That way content can be preloaded on platforms that only have a single decoder and are currently displaying different content. As an example, this enables Broadcast-Broadband ad-insertion on HbbTV devices. @dsilhavy
  • #4095 Add feature support for Common Media Server Data @bbert . Includes:
    • CMSD response headers parsing
    • Add settings to
      • Enable/disable CMSD parsing
      • Enable/disable use of "mb" maximum suggested bitrate (mb) as an upper-bound for the ABR algorithm
      • set the weight ratio to be applied on etp regarding measured bandwidth to determine throughput to be used by ABR throughput rule
    • Update reference sample to add CMSD settings configuration and to display bandwidth (measured, etp) metrics
  • #4122 Adds the possibility to define a function that is called before segments are appended to the SourceBuffer. That way the application can modify the data if required. @dsilhavy

Improvements

  • #4102 Use Karma as a testrunner for the unit tests. Allows us to run the tests in "real" browser-based environments and not in node.js context @dsilhavy
  • #4103 #4412 Fix blinking cues when segmented over multiple segments or chunks @bbert
  • Link Add unit test for Utils.parseHttpHeaders @dsilhavy
  • Link Remove deployment script from Circle CI/CD @dsilhavy
  • Link Remove http rewrite on the default timing source @dsilhavy
  • Link Improve error message for missing ttml rendering div @dsilhavy
  • Link Update browser tools for Circle CI to version 1.4.1 @dsilhavy

Bugfixes

  • #4101 Fix handling of embedded texttracks for dynamic streams with MPD updates @dsilhavy
  • #4107 Fixes an issue when the timescale value in the manifest differs from the timescale in init segments @bbert
  • #4110 Corrected fallback responseHeaders value to be null @piersoh
  • #4418 Move ContentSteeringController configuration initialization to initialize function to fix error in offline playback @dsilhavy
  • Link Fix a regression when providing a posix string as start value to attachSource @dsilhavy

dash.js v4.5.2

14 Dec 12:47
Compare
Choose a tag to compare

Features

#4089 Add parsing and rendering of WebVTT subtitles in dash.js using vtt.js, not relying on native texttracks events anymore. This is required for platforms like HbbTV that do not provide native WebVTT support. An example can be found here: https://reference.dashif.org/dash.js/nightly/samples/captioning/vttjs.html @dsilhavy

Improvements

#4088 Fix redundant segment download when seeking back into already buffered area @dsilhavy
#4093 In case of gaps: Check for a valid segment request using the period duration @dsilhavy

Bugfixes

#4087 Do not trigger live delay calculation multiple times at playback start @dsilhavy
#4091 If seek is called with a negative value rewrite to 0 @dsilhavy
#4092 Account for invalid starttimes provided to attachSource() @dsilhavy
#4096 Fix linting errors @dsilhavy

dash.js v4.5.1

11 Nov 08:33
Compare
Choose a tag to compare

Features

  • #4064 Adds an example which shows how the dash.js player can be connected to a TimingObject for synchronized playback between multiple clients @chrisguttandin

Improvements

  • #4054 Improvements when setting min and max playback rate @mattjuggins :
    • Separate playbackRate into a min and max value. This means the application of rates can be the same between ServiceDescription and dash.js settings.
    • Applies playback rates of value 1.0 if explicitly set.
    • Modify catch-up algorithms to take into account these separate playback rate values.
    • Update sample to take into account min and max playback rate values.
  • #4018 Separate settings matcher to work on each property provided for initial track selection individually @stschr
  • #4056 Change the logic for pruning the buffer ahead. Calculate the continuous buffer starting at the target time and prune according to the threshold values defined in the settings @dsilhavy
  • #4057 For VoD Limit the seek range to the duration of the content @dsilhavy
  • #4082 Add settings attribute to define manifest request timeout value @dsilhavy

Bugfixes

  • #4086 Fix a bug that lead to wrong selection of initial WebVTT track @dsilhavy
  • #4058 Fix Typescript typings for MediaPlayer.on() method @bbert
  • Link Add min width to video time of Controlbar to overcome issues when seeking between a time less than one hour and a time larger than one hour @dsilhavy
  • #4068 Fix rounding issues when searching for valid segment in order to jump a gap @bbert
  • #4069 Some platforms provide changeType() as a function but actually using it causes problems when switching between tracks with different codecs. This PR adds a settings flag to disable the usage of changeType even when it is available on the platform. @dsilhavy
  • #4079 Only run Github actions if we are on the official repository @dsilhavy
  • #4080 Add supplementalProperties attribute to index.d.ts and MediaInfo.js @dsilhavy
  • #4081 Catch errors when applying styles on WebVTT cue @dsilhavy
  • #4085 Fix an issue that causes an exception when calling extendedFilter with an empty string @dsilhavy

dash.js v4.5.0

28 Sep 06:37
Compare
Choose a tag to compare

Features

#4031 Adds support for content steering as defined in the IOP specification - @dsilhavy
#4003 New playback catchup seeking/pausing logic: Adjust the liveDelay when the user seeks/pauses. Then catchup mode is applied with the new live delay as target value.By calling player.seekToLive() the app can jump back to this original live delay. - @dsilhavy
#4024 Allow requests to be modified in an async manner. - @littlespex
#4036 #4015 Implements a "matcher" for the XML parser; it checks @lang attributes read from MPDs and normalizes them into a BCP-47 compliant format. In addition, normalize language tags provided through dash.js' setInitialMediaSettingsFor()-API as Strings, while using RegExp through this API is maintained. - @stschr

Improvements

#4020 Lower minPlaybackRateChange for non Safari browsers depending on the maximum catchup rate. Otherwise the target live delay is not reached for low catchup rates. - @dsilhavy
#3996 Pass url to RequestModifier.modifyRequestHeader for example to add additional headers - @lkinasiewicz
#4004 Fix stalling issue when using buffer.fastSwitchEnabled is enabled. - @lkinasiewicz
#4001 Add ua-parser-js to enable reliable browser name and version parsing - @dsilhavy
#4002 Add hashtag mechanism to sample menu selection. Allows to send direct links to specific sample sections - @dsilhavy
#4039 WPE fix: Avoid pruning buffered ranges already enqueued for playback - @eocanha
#4028 Add an example how to define robustness levels for DRM playback - @dsilhavy
Link Add popup to low latency testplayer and fix catchup mechanism "enabled" checkbox - @dsilhavy

Bugfixes

#4023 Fixes the selection of a key system with parameters specified by the application. As an example, the robustnessLevel can be specified individually for audio and video tracks. Before this PR, only one of the provided values was used, either audio or video. - @dsilhavy
#4025 Remove check in getValidTimeAheadOfTargetTime that caused stall in stream with gaps in the previous period and the upcoming period - @dsilhavy
#4048 Add missing streamId to DroppedFramesHistory.js - @dsilhavy
#4026 Fix B64 generation of KID to be compliant with EME spec - @dsilhavy
#4019 Fix wrong call to _abortBeforeAppend - @dsilhavy
Link Fix wrong link to controlbar in Low Latency testplayer - @dsilhavy
#4051 Only consider buffer replacements in the GapController.js for audio and video to avoid stalling on gaps due to texttracks. - @dsilhavy

Operation

#4041 Adds a Github action to automatically deploy to nightly and latest on the Akamai CDN - @dsilhavy