Releases: Dash-Industry-Forum/dash.js
dash.js v4.4.0
Features
#3895 Support for ProducerReferenceTime specified in the manifest: Adds calculation of liveDelay described in TS 103 285 Clause 10.20.4
#3900 Update manifest source url without re-initialising player
#3898 Provides a way of setting 'withCredentials' true/false on DVB Metrics Reporting requests.
#3831 Support for ServiceDescription "OperatingBandwidth"
#3893 Enable whitelisting of CMCD parameters
Improvements
#3894 JSON stringify the license request payload to Clearkey servers
#3884 BOLA rule: Avoid quality switch to lowest level for video track when switching audio track
#3883 Remove non-standard t metric from HttpList reports
#3910 Trigger event when AdaptationSet is removed due to all representations being incompatible
#3831 Move catchup logic to a separate CatchupController class
#3831 Move ServiceDescription logic to a separate class ServiceDescriptionController
#3831 Do not overwrite Settings.js parameters when applying the ServiceDescription logic.
#3831 Use MediaPlayerModel as a proxy between classes and Settings.js if additional logic needs to be applied and the settings can not be used 1:1
#3831 Add new class CustomParametersModel to save all callback functions and additional parameters defined by the app
#3831 Remove enableLowLatency from Settings.js. Switch to low latency mode internally based on MPD parameters availabilityTimeComplete
#3831 Remove minDrift, always apply catchup logic if in low latency mode
#3831 Calculate the live latency at a central place PlaybackController.computeAndSetLiveDelay. Add notification to recalculate once settings are changed, see bullet below
#3831 Add DISPATCH_KEY_MAP to Settings.js to trigger events once a specific setting is updated
#3921 Enforce indention in ESLint config
#3926 Prevent exception when PlayReady CDM returns UTF-8 unwrapped message
#3923 Change precedence of ServiceDescription elements
#3888 Fix playback stalling for buffered ranges
#3918 Reduce export settings url length by comparing to default settings
#3934 Add example for keeping DRM MediaKeySessions in DRM section
#3937 Abort license request on reset
Bugfixes
#3892 Update SessionToken typings (add getUsable())
#3903 Fix concurrent internal seeks
#3925 [MSS] Fix regression in MssParser
#3924 [MSS] Fix start FragmentInfo requests on seeking event
#3935 Fix regression in key system selection based on priority
#3938 Fix deleting all cues from text tracks
dash.js v4.3.0
Features
#3859 Add support for multiple system strings for a single key system, e.g "com.microsoft.playready.recommendation" and "com.microsoft.playready" for the Playready DRM
3865 Add an "export settings" feature to reference UI to share all settings via a generated URL
Improvements
#3843 Throw an error in case of invalid settings provided via updateSettings()
#3837 Fix live seeking for embedded devices on which we can't set video element time at unavailable range in audio AND video buffers
#3851 Fixes a memory leak for inline events without id and presentation time. Before this PR the events were not removed from the list of outdated events leading to large memory consumption for longtime playback.
#3857 Exclude text StreamProcessor when checking buffer level for initial playback
Link Set default fragment request timeout to 10 seconds
#3866 Improve special character escaping in CMCD string values
#3867 Add Typescript definition for custom initial track selection function
#3876 Remove getNormalizedTime()
#3878 Solve situations in which there is a gap at the start of a period in a dynamic MPD with .
Link Add Akamai Controlbar to npm package
#3880 Divide browserstack sessions and run tests parallel
#3879 Corrected ServiceDescription handling for low latency streaming
Bugfixes
#3847 Load the last remaining segment when the user seeks to the very end currentTime = duration
#3874 Fix issue after a track switch if enableSeekDecorrelationFix is enabled
#3872 Fix an issue when getting video model current time and seeking state, after setting current time but while waiting for video element ready state to have metadata.
#3854 Fix: When resetting BufferController and aborting then removing source buffers from MediaSource could cause a getAllBufferRanges exception
Link Close comment header in ControlBar.js
#3881 Fix calculation of thumbnail timestamp for multiple periods
dash.js v4.2.1
Improvements
#3823 Account for seek to 0 in _noMediaRequestGenerated and consider if the requiredMediaTime is larger than the start time of the segment
#3827 Update sources.json with new Axinom test vectors
#3824 Wait for video element ready state to change to HAVE_METADATA before triggering STREAM_INITIALIZED
Link Update Unified Streaming sample URLs
Link Add demo page to load stream via query parameters
#3830 Adding AACH in the list of supported codecs for MSS parser
#3811 Preserve cdata on manifest parsing and expose on dash event messageData
#3832 Enable gap seek fix by default
Link Add an example how to use parsed MPD objects instead or urls
Link Add sample for MPD anchors
Bugfixes
#3833 Apply a minor offset when using MPD anchors with #t=0 for dynamic streams when calcFromSegmentTimeline is enabled
#3825 Fix race condition when using "autoplay" in the reference UI
Link Fix SessionToken typings
Link Fix error in JSDoc in ProtectionController.js
dash.js v4.2.0
Features
#3793 DRM: Support for license server URL via MPD tags
#3805 DRM: Support for manifest based key rotation. Rely on key id updates instead of initData updates
#3793 DRM: Add ignoreEmeEncryptedEvent setting to ignore pssh from init and media segments,
Improvements
#3779 Avoid creating one HTTPLoader instance per request
#3793 DRM: Add promises if possible to control async functions. The previous usage of events was messy, made the content hard to maintain and was not required for most of the functions (except for keymessage and needkey)
#3793 DRM: Removed call to protectionModel.requestKeySystemAccess in case a new key session is created after the keysystem has already been selected
#3793 Update DRM Wiki description
Link Show warning in case location.protocol is http when accessing the reference client
Link Rename event STREAM_SWITCH_STARTED into PERDIO_SWITCH_STARTED
#3816 DRM: Do not filter keySystems based on protData for "encrypted" events
Link Add resolution to monitoring example
Major bugfixes
#3783 Fix issue on text track selection
#3785 Fix scheduleWhilePaused not working
#3789 Fix seek with null value in PlaybackController.js
Minor bugfixes
#3780 [MSS] Do not update manifest if already updating at tracks switching for live streams
Link Fix exception in GapController.js when enableSeekFix is set to true
Link Check for stableBufferTime larger than 0 in MediaPlayerModel.js
#3791 Fix issue on WebVTT text tracks
#3799 Avoid uncaught exception on SourceBuffer.abort()
#3814 Add dynamic attribute for calls to getAverageThrougput
#3815 Check for video element readystate in PlaybackController.updateCurrentime
dash.js v4.1.0
Features
#3727 Optimize multiperiod prebuffering by improving logic to decide whether all segments of a period have been loaded
#3743 Improve buffer robustness: Recover from media_decode errors
#3672 Allow for registering a custom function to select the initial track
#3751 Add track selection mode based on selectionPriority attribute
#3684 Enable low latency based on MPD parameters (availabilityTimeComplete=false)
Improvements
#3745 Improve and fix reporting of multiple CMCD parameters
#3770 Handle all 2XX status codes on license request
#3772 In case of a seek into a gap: Try to find the closest segment to the target time and adjust the seek target accordingly
#3775 Enable gap jumping when seeking close to the end of a period
Major Bugfixes
#3759 Fix wrong timing calculation for client/server clock drift
#3735 Fix initialization after reset has been called
#3757 Fix javascript errors on reset
#3748 Fix transition from live to static
#3754 Fix live playback on WebOS
#3767 Fix outer period seek to 0
Additional bugfixes
#3720 Correct reporting and logging of URL if modified (e.g. by CMCD)
#3744 Fix DVRWindowSize manifest property
#3725 Fix EventController._triggerRemainingEvents not doing anything
Link Fix link in VTT sample
#3722 Explicitly match null status for response codes
#3734 Fix download time visualization in reference client
#3733 Ignore readystate when resetting the playbackrate
Link Fix wrong parameter when calling enableForcedTextStreaming
Link Add missing information about errorSettings to index.d.ts and Settings.js
#3746 Fix availabilityTimeOffset for live MSS
#3747 Fix cmcd nor reporting
#3749 MSS: Fix issue when selecting new audio track and new text track simultaneously on live streams
#3755 Fix, complete types definition file
#3756 Stream: do not reset() on protection error
Link Fix a bug in the GapController.js when unregistering events
dash.js v4.0.1
Improvements
#3683 Add a sample for mediaplayer only usage
Link Link2 Minor improvements in the low latency sample player
Link Re-Add additional logic to InsufficientBufferLevelRule
Link Add DRMToday option to reference client
Bugfixes
#3683 Fix a bug that causes the mediaplayer only bundle to have an error
#3689 Fix fragmented wvtt text not recognized as fragmentedText
#3689 Avoid duplicate identical cues
#3690 Fix cues with NaN timestamp
#3691 Fix quota exceeded reporting
#3693 Avoid error when using getCurrentTrackFor with unknown type
#3696 Fix DRM tests for MSEdge functional tests
#3698 [MSS] fix track switch for live streams
#3699 When a segment download error occurs we need to retry in case we have multiple BaseURLs. If all BaseURLs result in a download error we terminate.
#3704 Fix detecting target stream when skipping gap at the and of period
#3706 Do not clear entire buffer when seeking to 0
#3694 Treat HTTP headers case-insensitively
#3712 Fix a bug when selecting the next stream after a period transition
#3715 Use "prepare" rather than "postinstall" so dashjs can be used as a dependency
Link Add missing githook.js to files in package.json
Link Check for isNaN in hasEnoughSpaceToAppend
Link Remove mpd.timeShiftBufferDepth !== Number.POSITIVE_INFINITY restriction from calculation of AST
Link Dispatch error when KEY_ERROR occurs.
dash.js v4.0.0
Features
#3413 Major improvements for multiperiod playback (stability, gap handling, baseURL resolution, race conditions)
#3413 Enable audio track switch with different codecs (different AdaptationSets)
#3413 Enable seeking between periods for multiperiod livestreams
#3660 AAST based approach for measurement and estimation of throughput calculation in LL CTE streaming
#3630 Rework sample Section and provide additional samples
#3641 Reworked text track handling
#3596 Replace grunt with Webpack
#3596 Replace JSHint by ESLint
#3624 Rework buffer and scheduling logic
#3413 Enable usage of availabilityTimeOffset
#3635 Automatically fall back to Timeline based DVR window calculation if no segment is found in the "standard" DVR window
#3633 Add parameter in MediaPlayer.setQualityFor() to force quality switch
Improvements
#3663 Improved Lol+ based throughput calculation for low latency streaming
#3413 Separate DVR window and AST/AET calculation
#3631 Cleanup errors and add missing JSDoc
Link Remove iron-mocha and iron-node dependencies
#3635 Optimize memory usage
#3646 Add settings attribute to control setting the stall state in the videomodel
#3647 Remove outdated mediaInfo objects from StreamProcessor after MPD updates
#3644 Updated _applyServiceDescription(): only enable LL on critical SupplementalProperty, correct min/maxDrift
Link Add settings attribute to enable/disable MediaCapabilities API
Link Set stable buffer time equal to live delay for low latency streams
#3655 Use promises for updating the internal info after an MPD update to avoid race conditions
#3653 Allow configuration of additional ABR rules like InsufficientBufferRule via settings and reference U
#3653 Add settings to disable/enable ServiceDescription
#3658 Support legacy devices by polyfilling promises
#3659 Allow DRM configuration in reference UI (server, header, priority)
#3665 Add missing fields in index.d.ts
Link Add settings to configure retry attempts and retry interval for license requests
Link Adjust InsufficientBufferRule.js. Apply switch to lowest quality if buffer is empty
#3671 Dependencies update and replacement of deprecated code coverage tool
Bugfixes
#3608 Git hooks: Fix path problem on Windows
Link: Fix a bug for dynamic streams with multiple video AdaptationSets. MPD update lead to selection of wrong MediaInfo
Link: Fix a bug when switching between multiple thumbnail tracks
Link: Fix for BUFFER_LOADED event never triggered when minBufferTime > stableBufferTime
Link: Do not hide time display in ControlBar.js whenever liveThresholdSecs is reached to avoid seeking problems
#3625 Fix seek to DVRWindow.start
Link: Fix a bug in the playFromTime.js functional tests. stream url was overwritten and not restored
Link: Fix a bug in the calculation of the segment availability end time when the value is set to Infinite
Link: Remove unnecessary protectionController.setMediaElement call
Link Do not apply strong comparison in the EventController.js when checking a value
Link Do not handle abandoned fragments in case the abort was triggered by a representation switch
#3643 Fix segmented text track selection
Link Abort requests when deactivating a stream
Link Fix config bitrate when using configRatio. Value needs to be specified in kbps
#3652 Fix offline module
#3654 Fix a bug that lead to starting the the schedule timer twice
Link Fix wrong reference to streamInfo once buffering is completed. Due to this, signalEndOfStream was not called for multiperiod VoD streams and playback stalled some frames before the end.
Link Check if we can start prebuffering after an MPD update. New periods might have been added
Link Use type for calls to getCurrentDVRInfo if required. Otherwise audio only is not working properly.
[Link] Delete texttracks based on period boundaries and do not disable track when period switches
#3669 Fixes the error on entering/leaving full screen on Chrome
Link Fix a bug in the TimeSyncController.js which causes time syncs to be blocked once the sync attempt failed
Link Fix xhr check in setup function of functional tests
Link Fix a bug in the low latency demos
#3680 Update/fix typings in index.d.ts
dash.js v3.2.2
Features
#3554 Add CMCD header mode
#3515 Functional tests for list of smoke vectors
#3563 MediaPlayer API to register custom capabilities filters
#3557 Automatic stale of outdated issues
Improvements
#3553 Check TypeScript type declaration file on every build
#3577 Add a settings parameter for the EventController.js refresh delay
#3578 Add TRACK_SELECTION_MODE_FIRST_TRACK
#3561 Replacing arrow function with regular functions in samples
#3581 Improve multiperiod switching
Bugfixes
#3549 Fix execution of local functional tests on mac
#3551 Fix implicit "any" type in index.d.ts
#3550 Bugfix audio test asserts
#3560 Add missing TypeScript type signature for destroy method
#3541 Adding optional error to KeyStatusesChangedEvent type
#3536 Fix internal seek
#3564 Fix MediaPlayer.time() for live streams
#3567 [MSS] Fix support for live streams with missing DVRWindowLength
#3569 ValidateExecutedFragmentRequest while removing buffer may causes playback stall
#3559 Fix wrong segment fetching if QuotaExceedError occurs
#3574 Fix MSS live seeking
#3585 Ensure init segment is always appended
dash.js v3.2.1
Features
#3451 Implementation of MPEG-DASH 5th Edition Patching Semantics
#3534 Implementation of new UTC synchronization logic
#3535 Add feature for filtering license requests and responses
#3472 Add functional tests for audio switching
#3465 Add functional tests for text switching
#3499 Add functional tests for initial audio
#3500 Add functional tests for initial text track
#3498 Add "highestEfficiency" initial track selection mode
#3512 Adds CapabilitiesFilter that filters unsupported Representations and Adaptations
#3522 Adds conformance warning events and outputs
Improvements
UTC Sync , Low Latency , DRM : Add tutorials and link in Readme.md
#3508 Add further CMCD parameters
#3502 Functional tests: add possibility to set stream manifest url to be tested in command line
#3497 Expose dashjs.isSupported utility for checking MSE support
#3506 Fix performance problem caused by unnecessary EME calls
#3523 Corrections and addition of missing values in Settings.js JSDoc
#3532 Improve setting MediaSource's duration
Bugfixes
#3484 Fix a bug which causes wrong thumbnail url calculation for SegmentTimeline
#3480 Add missing ABR strategies to TypeScript defs
#3487 Add missing reason to SwitchRequest in ABRRulesCollection.js
#3495 Fix settings typings
#3501 Functional Tests: Fix seek period
#3496 Fix invalid MediaPlayerEvents import
#3504 Account for schemeIdUri, value and id fields in EventController
#3518 Fix invalid number of arguments of the DashMetrics.addManifestUpdate
#3525 Fix reporting of wrong playback index to DroppedFramesHistory
#3526 Fix "Cannot read property 'media' of undefined" for SegmentList
#3533 [MSS] Fix parsing of case insensitive boolean attribute values
#3531 Fix AbrController's reference to StreamProcessor lost when switching period
#3530 Fixes for discharging preloaded content
#3539 [MSS] Fix representation's width and height
#3543 Remove IE11 unsupported ES6 features from ref player
#3545 [Chromecast] Fix track switch
#3548 Use SegmentBase@presentationTimeOffset for inband event presentation time calculation
#3547 Ensure manifest loadedTime updated when patch applied
dash.js v3.2.0
Features
#3411 DASH Events: Support for onReceive mode
#3424 Add Learn2Adapt ABR algorithm for low-latency streams
#3469 Add LoL+ ABR algorithm for low-latency streams
#3468 Enable live playback catchup for non low latency streams
#3264 Add Chromecast sender and receiver applications
Improvements
#3406 Compare mediaInfo objects in DashAdapter
#3385 UpdateSettings new streaming parameters : trackSwitchMode and selectionModeForInitialTrack
#3422 Add a fragment request timeout
#3437 Use resizeObserver when available for resizing captions
#3432 Add MediaPlayer.destroy to free all memory
#3372 Refactor of the EventBus
#3444 Add event for transition from dynamic to static
#3420 Align CMCD reporting with latest changes in the spec
#3428 Migrate to intern v4
#3450 Remove default CID from CMCD
#3456 Decrease already seen initData log from warn to info
#3467 Fix timing for live gap jumps
#3471 Rewrite the event timing calculation and dispatching logic
#3478 Disable Event.LOG per default. Can be enabled via settings parameter
Bugfixes
#3405 Fix prebuffering static mpds
#3401 Fix ManifestUpdater for 'dynamic' to 'static' streams
#3425 Accept non-compliant imagetype attribute name in SMPTE-TT image
#3440 [MSS] fix segment duration
#3414 dvb:probability should be 1000 by default
#3458 Fix script error in case of AdaptationSet removal at MPD update
Fix a bug which caused the preload sample to crash