- api/events: add
"streamEvent"
event for when a DASH EventStream's event is reached - api/events: add
"streamEventSkip"
event for when a DASH EventStream's event is "skipped" - types/events: add
IStreamEvent
andIStreamEventData
- which define the payload emitted by both a"streamEvent"
and"streamEventSkip"
events to the exported types - api/tracks: add second argument to
setPreferredAudioTracks
,setPreferredTextTracks
andsetPreferredVideoTracks
to be able to also apply them to the currently loaded Periods / content - text/webvtt: parse settings attributes of WebVTT subtitles when in HTML mode
- api/tracks: add codec information to
getAvailableAudioTracks
andgetAudioTrack
- dash: do not reduce the minimum position when using the
manifestUpdateUrl
transportOptions
inloadVideo
- local-manifest: consider
language
property from a "local" Manifest - local-manifest: refresh the Manifest even if we dont have a Manifest URL, as is often the case when playing locally-stored contents
- local-manifest: allow the "expired" property of a local-manifest to be updated
- compat/eme/fairplay: for fairplay contents, better format the initialization data given to the CDM. The previous behavior could lead to invalid license requests
- eme: re-allow serialization into a JSON string of the persisted session data, as presented in the DRM tutorial
- compat/low-latency: fix compilation of async/await when playing low-latency contents with the default bundled builds
- eme: ensure that the previous MediaKeySystemAccess used had
persistentState
to "required" when a new content needs it to be - eme: fix
closeSessionsOnStop
keySystems
option actually not removing any MediaKeySession when stopping a content (v3.20.1 regression).
- dash: emit minor errors arising when parsing the DASH MPD through warning events (whose payload will be an error with the
PIPELINE_PARSE_ERROR
code) - dash: consider AdaptationSet@selectionPriority in our initial track choice if the user preferences lead to multiple compatible tracks
- misc: do not download video segments when playing on an "audio" element.
- eme: replace the MediaKeySession's cache entry based on the least recently used instead of on the least recently created to improve cache effectiveness.
- eme/persistent sessions: Limit the maximum of stored persistent MediaKeySessions to 1000 to avoid the storage to grow indefinitely (higher than that, the least-recently used will be evicted)
- eme: fix
OTHER_ERROR
issue arising when loading a new encrypted media when a previous since-disposed instance of the RxPlayer played encrypted contents on the same media element - eme: fix
OTHER_ERROR
issue arising on Internet Explorer 11 when playing more than one encrypted content - eme: fix issue where more than 50 active MediaKeySessions at the same time could lead to infinite rebuffering when playing back a previous content with multiple encryption keys
- directfile: for directfile contents, don't reset to the preferred audio, text or video track when the track list changes
- eme: remove any possibility of collision in the storage of EME initialization data. The previous behavior could theorically lead some initialization data to be ignored.
- eme: fix typo which conflated an EME "internal-error" key status and an "output-restricted" one.
- api: add
disableVideoTrack
method - api: add the
preferredVideoTrack
constructor option andsetPreferredVideoTracks
/getPreferredVideoTracks
methods to set a video track preference (or to start with the video track disabled). - api: add optional
codec
property to preferred audio tracks APIs, allowing applications to communicate a codec preference. - api: make the
language
andaudioDescription
properties inpreferredAudioTracks
' objects optional. - api: add
signInterpreted
togetVideoTrack
andgetAvailableVideoTracks
return objects to know when a track contains sign language interpretation
- api: deprecate the
getManifest()
method - api: deprecate the
getCurrentAdaptations()
method - api: deprecate the
getCurrentRepresentations()
method
- compat/eme: Set proper EME Safari implementation, to play contents with DRM on it without issues
- compat/directfile/iOS: On Safari iOS, fix auto-play warnings when a directfile content is played with the
playsinline
attribute set. - directfile: In Directfile mode, always disable the current text track when a
null
is encountered in the preferredTextTracks array
- abr: ignore requests that may have directly hit the cache in our adaptive logic
- dash/perf: improve parsing efficiency for very large MPDs, at the expense of a very small risk of de-synchronization. Mechanisms still allow for regular re-synchronization.
- dash: handle multiple URL per segment anounced through multiple BaseURL elements in the MPD
- dash/smooth/metaplaylist: add
manifestUpdateUrl
to loadVideo'stransportOptions
to provide a shorter version of the Manifest, used for more resource-efficient Manifest updates - tools/createMetaplaylist: add the experimental
createMetaplaylist
tool, which allows to generate Metaplaylist contents from given Manifests - tools/TextTrackRenderer: add the optional
language
property to thesetTextTrack
method of the experimentalTextTrackRenderer
tool as it could be needed when parsing SAMI subtitles - types: export IAvailableAudioTrack, IAvailableTextTrack and IAvailableVideoTrack types
- types: export IAudioTrack, ITextTrack and IVideoTrack types
- dash/smooth: fix segment url resolution when there is query parameters in the Manifest URL and/or segment path, themselves containing "/" characters
- local-manifest: fix videoElement's duration and
getVideoDuration
for contents in the experimentallocal
transport - tools/parseBifThumbnails: do not return an un-displayable ArrayBuffer of the whole thing in each
image
property in the experimentalparseBifThumbnails
function
- compat: avoid pushing a segment on top of the current position in Safari, as it can sometime lead to green macro-blocks
- dash: add multiple performance improvements related to MPD parsing on embedded devices
- dash/smooth/metaplaylist/local: refresh less often the Manifest when parsing it takes too much time to improve performance
- smooth: filter unsupported video and audio QualityLevels when parsing a Smooth Manifest
- build: greatly reduce the time needed to produce a modular build through the
npm run build:modular
script - build: remove Object.assign dependency
- directfile: support most audio tracks API when playing a directfile content
- directfile: support most text tracks API when playing a directfile content
- directfile: support most video tracks API when playing a directfile content
- api: add
seeking
andseeked
events which anounce the beginning and end of a seek, even when seeking to an already buffered part - subtitles/ttml: handle styles inheriting other styles in TTML subtitles
- local-manifest: add experimental
local
transport to allow the playback of downloaded contents (even when offline) - tools: add the experimental
TextTrackRenderer
tool to be able to add a custom text track to any content - tools: add the experimental
parseBifThumbnails
tool to easily parse thumbnails in the BIF format
- api: deprecate the
supplementaryTextTracks
loadVideo option in profit of the external TextTrackRenderer tool - api: aeprecate the
supplementaryImageTracks
loadVideo option in profit of the external parseBifThumbnails tool - api: deprecate the
getImageTrackData
method in profit of the externalparseBifThumbnails
tool - api: deprecate the
imageTrackUpdate
event in profit of the externalparseBifThumbnails
tool - api: deprecate
hideNativeSubtitles
(officially)
- subtitles/ttml: Correctly handle alpha information in the rgba values included in a TTML file
- images/bif: fix sometimes incorrect "ts" value on thumbnails returned by the
getImageTrackData
method and theimageTrackUpdate
event
- node: allow the RxPlayer to be imported from Node.js for server-side-rendering
- images/bif: throw a better error when an invalid BIF file is received
- api: be more "generous" with player events by ditching the deep-equal npm module due to package size and some edge-case behavior
- demo: avoid re-rendering multiple ui components when unnecessary
- dash/metaplaylist: fix infinite rebuffering issue when refreshing multi-Period contents under specific conditions
- buffer: be less aggressive when garbage collecting subtitles (if the maxBufferAhead/maxBufferBehind options are set) to avoid useful subtitles being removed
- directfile/compat: for directfile contents, trigger directly the LOADED state on iOS/iPad/iPod browsers as those are not preloaded there
- demo: display clickable "play" button on the video element when autoplay is blocked due to browser policies - to help users unlock the situation
- demo: add "Other" key system to allow specifying a custom key system in the demo page
- eme/api: add keySystems.fallbackOn property to
loadVideo
to allow fallbacking to other qualities when encountering various key errors - eme/api: allow to set
fallbackOnLastTry
on agetLicense
Error to be able to fallback on other qualities when a license request is on error - eme/api: add
NO_PLAYABLE_REPRESENTATION
MediaError
for when every video or audio quality cannot be played - manifest/api: add
decipherable
property to a Representation object - api: add
decipherabilityUpdate
event triggered when a Representation's decipherability status is updated - languages/api: add
dub
boolean to audio tracks (throughgetAudioTrack
andgetAvailableAudioTracks
) to tell if this is a dubbed track - languages/ttml: with TTML subtitles, support length relative to the Computed Cell Size for
tts:fontSize
,tts:padding
,tts:extent
,tts:origin
andtts:lineHeight
- transports/api: add
checkMediaSegmentIntegrity
transportOptions
to automatically retry media segments which appear corrupted - transports/api: add
minimumManifestUpdateInterval
transportOptions
to limit the Manifest update frequency - transports/api: add "progress" callback to a custom segmentLoader to improve adaptive streaming when an external segment loader is used
- dash/metaplaylist: download the first segment of a new Period when the last downloaded segment from the previous Period ends after that segment ends
- smooth/metaplaylist: consider
serverSyncInfos
transportOptions
for Smooth and MetaPlaylist contents - buffers: completely clean a previous audio/text track from the SourceBuffer when switching to a different audio/text track
- dash: avoid requesting an inexistant segment when downloading a multi-Period DASH content with a number-based SegmentTemplate with the
agressiveMode
option set totrue
- eme: do not wait for a previous invalid MediaKeySession to be closed before re-creating a valid one for the same content, to work around a widevine issue
- eme: avoid race condition issue arising when multiple init data are received before the MediaKeys have been attached to the media element
- dash: do not consider "trickmodes" AdaptationSet as directly playable video tracks
- directfile: begin directly at the end (instead of the beginning) when setting a
startAt
loadVideo option with afromLastPosition
property set to0
on directfile contents - metaplaylist: fix playback for non-live MetaPlaylist contents not starting at a
0
time
- abr: better estimate a lower bitrate after a sudden fall in bandwidth
- dash/low-latency: properly use @availabilityTimeOffset when playing a low-latency DASH content
- code: use only strict boolean expressions in the code (do not rely on falsy or truthy values anymore).
- demo: add buffer content graphs to the demo page to vizualize exactly what have been buffered
- demo: improve accessibility of the demo page for the english-speaking visually impaired
- misc: replace uglifyJS by terser for minification purposes
- dash: update timeshiftBufferDepth considered when refreshing the MPD
- dash: fix infinite rebuffering issue when refreshing a Multi-Period MPD with the oldest Periods removed
- api: go to
"SEEKING"
state instead of"BUFFERING"
when seeking while the player is in the "BUFFERING" state - api: Avoid reinitializing the video, audio and text track choice after a
"RELOADING"
state - api: When going back to a Period on which
disableTextTracks
was called, keep the text track disabled even if differentpreferredTextTracks
are set - smooth: Replace
{CustomAttributes}
token in a segment URL - dash: load the last segment of a Period when it is declared in a SegmentTemplate (with no SegmentTimeline) and when its end is exactly equal to the end of the Period
- dash/metaplaylist: be more tolerant with the appendWindows set as the previous behavior could lead to infinite rebuffering and segments re-downloading
- dash/metaplaylist/smooth: Better handle discontinuities in a VoD content
- dash/metaplaylist: Handle discontinuities between DASH Periods and between MetaPlaylist contents
- dash/smooth: Avoid requesting multiple time the last segment when the duration given in the Manifest are inexact
- smooth: Skip without throwing Manifest's StreamIndex with an unrecognized type
- dash: Improve prediction of when to update a dynamic MPD with xlinks
- dash: Be more tolerant of differences between a segment's time anounced by the Manifest and the reality to avoid multiple cases of segment re-downloading
- dash: Guess initialization range for segments defined in a SegmentBase without an Initialization element
- dash: Throw better error when a sidx with a reference_type
1
is encountered - api: Throw a better error when setting a
preferredAudioTracks
orpreferredTextTracks
value in the wrong format - demo: Allow to export and share demo links with custom contents
- demo: Fix video track switching in the demo page
- demo: Fix spinner not hiding when playing on very specific conditions
- demo: reset playback rate before loading a content
- dash: add
lowLatencyMode
loadVideo
option to play low-latency DASH contents with chunk-encoded CMAF and chunked transfer encoding close to the live edge efficiently - metaplaylist: add the experimental
metaplaylist
transport, which allows to smoothly play a concatenation of multiple contents - api: add
serverSyncInfos
totransportOptions
(loadVideo
option) - errors: add
code
property to aNetworkError
indicating the corresponding HTTP status
- dash: fix minimum time calculation for Multi-Period MPDs with SegmentTemplate segment indexes but no SegmentTimeline
- dash: play static MPD not declaring any segment for a time of 0 seconds at the minimum possible time by default
- dash: fix maximum position calculation for live Multi-Period contents where the currently generated period is not the last one declared in the MPD
- api: authorize to set no
url
toloadVideo
if themanifestLoader
transportOption
is set - smooth: the
aggressiveMode
option now only allows requests for segments which had time to at least begin to be generated to avoid too much HTTP 412 - dash: the
aggressiveMode
now also have an effect for some SegmentTemplate DASH contents (download segments even if they're not finished) - code: add pre-commit and pre-push git hooks to automate checking and facilitate bisecting
- dash: better handle live Multi-Period contents where the currently broadcasted period is not the last one declared in the MPD
- dash: better infer the end of a Period if the start of the next one is defined
- api: always start live contents at the live edge if one is defined and not just before the last available segments
- ci: run integration tests with Travis and appveyor again
- api: fix
networkConfig.segmentRetry
loadVideo
option. Due to a typo, it was forced to the default value (4) - api/abr: when the
throttleVideoBitrateWhenHidden
option is set to true, wait 60 seconds (as documented) after the page is hidden before switching to a lower bitrate - dash: fix segment indexing for SegmentList-based MPD with a period start different than 0
- dash/smooth: check if the segment should still be available before retrying it (avoid unnecessary HTTP 404 errors)
- dash/smooth: the Manifest can now be refreshed due to unexpected 404 HTTP errors on a segment request (only on particular conditions)
- dash: better handle segments overlapping multiple periods by using the data that is only within the concerned Period's bounds
- demo: authorize to play stored contents with an HTTP Manifest in the HTTPS demo
- eme: add
getLicenseConfig
property to thekeySystems
loadVideo
option, to be able to have much more control over getLicense's behavior - eme: add
noRetry
togetLicense
errors to abort retries when the licence request fails - eme: add
message
togetLicense
andonKeyStatusesChange
errors to allow custom errors when the license request fails - eme: add a new
ENCRYPTED_MEDIA_ERROR
with the codeCREATE_MEDIA_KEYS_ERROR
for when we cannot create a MediaKeys instance (seen on some Android devices).
- api: avoid sending {audio,video...}BitrateChange with a
-1
value when starting to play a content - api/abr: a call to
setAudioBitrate
orsetVideoBitrate
could be ignored for a content if it was still loading. This is now fixed. - api/abr: a call to
setMaxAutoBitrate
orsetMaxVideoBitrate
could be ignored for a content if it was still loading. This is now fixed. - dash: fix maximum position calculation when refreshing a live MPD with a UTCTiming element and no SegmentTimeline.
- dash/smooth: a MPD/Manifest request failing could still be retried when loading another content
- eme/compat: on Safari, depend on WebKitMediaKeys even if MediaKeys is defined because of differences of implementations
- pipelines: always send
PIPELINE_LOAD_ERROR
warnings when a segment request or a Manifest request is retried - errors: replace undocumented
PIPELINE_RESOLVE_ERROR
code into the proper documentedPIPELINE_LOAD_ERROR
code - errors: replace undocumented
PIPELINE_PARSING_ERROR
code into the proper documentedPIPELINE_PARSE_ERROR
code - errors: add to the
ErrorCodes
static property the previously forgottenNONE
,INVALID_KEY_SYSTEM
andINVALID_ENCRYPTED_EVENT
codes.
- abr: make use of another adaptive algorithm, buffer-based, when enough buffer has been built.
- demo: allow the user to save custom contents to local storage to be able to reuse them when the page is refreshed
- eme: throw a better error in
onKeyStatusesChange
if the Promise is rejected without an Error - errors: refactore error management to better correlate the
fatal
boolean to a playback stop and to better ensure a documented error is always thrown - scripts: make our build script compatible with MacOS (handle BSD sed)
- api/abr: add
throttleVideoBitrateWhenHidden
which unlikethrottleWhenHidden
does not throttle the video bitrate if the media element is in picture-in-picture mode
- api/abr: deprecate
throttleWhenHidden
in profit ofthrottleVideoBitrateWhenHidden
which has a better API definition for some edge cases
- api/abr:
limitVideoWidth
now also considers if the video is in picture-in-picture mode - buffer: better prevent the
BUFFER_FULL_ERROR
MediaError
on some memory-constrained devices - dash: consider the buffer depth as infinite (until
availabilityStartTime
) if thetimeShiftBufferDepth
is not set - smooth: consider the buffer depth as infinite if the
DVRWindowLength
is not set or set to 0 - init: start live contents that just began (less than 10 seconds ago) at the minimum position instead of throwing a STARTING_TIME_NOT_FOUND MEDIA_ERROR.
- tests: use web server (local by default) instead of stubbed XHRs to serve tests contents to our integration and memory tests
- eme: add
disableMediaKeysAttachmentLock
key system option to bypass a deadlock (with possible tradeoffs) when playing encrypted contents on some peculiar devices
- dash/smooth: never rely on Date.now when calculating time differences to avoid issues when the user adjusts the system clock while playing a live content
- eme: throw a better error (avoid
toString is not a function
messages) for aKEY_LOAD_ERROR
when thegetLicense
function provided fails without a proper error - api: fix rare situation with DASH multi-period contents where we reported no available bitrate, Adaptation nor Representation when switching to another Period.
- eme: add other default contentTypes when calling requestMediaKeySystemAccess to improve device support
- demo: update the demo UI
- code: change indentation style of a big chunk of the code to increase readability
- dash: add UTCTiming support
- smooth: add
aggressiveMode
transportOption to requests segments in advance - dash/smooth: add
referenceDateTime
transportOption to set a default reference time for live contents
- buffer: work around firefox bug leading to infinite rebuffering when seeking many times in a content
- dash/smooth: add optional
url
,sendingTime
andreceivingTime
properties in the response given by manifestLoader transportOption - misc: deploy documentation pages and demos from our previous versions
- misc: add new RxPlayer logo to README.md and the demo
- npm: publish package again. An error in the previous release led to some files missing on npm
- languages/api: add
preferredAudioTracks
andpreferredTextTracks
player options - languages/api: add
setPreferredAudioTracks
,getPreferredAudioTracks
,setPreferredTextTracks
andgetPreferredTextTracks
methods - languages/api: add
availableAudioTracksChange
,availableTextTracksChange
andavailableVideoTracksChange
events - abr/api: add
availableAudioBitratesChange
andavailableVideoBitratesChange
events - eme: allow playback of mixed encrypted and unencrypted contents on Chrome
- types: export the new
IAudioTrackPreference
andITextTrackPreference
types
- languages/api: deprecate the
defaultAudioTrack
loadVideo
option in favor of thepreferredAudioTracks
player option. - languages/api: deprecate the
defaultTextTrack
loadVideo
option in favor of thepreferredTextTracks
player option.
- dash: fix
minimumUpdatePeriod
management for DASH contents - smooth: better prevent 412 HTTP errors for smooth streaming contents
- subtitles: ensure subtitles are not visible in Firefox when disabling them in the
"native"
textTrack mode. - errors: avoid sending multiple
MEDIA_TIME_BEFORE_MANIFEST
orMEDIA_TIME_AFTER_MANIFEST
warnings instead of just one - api: fix (deprecated) option
hideNativeSubtitles
- errors: set a readable error message for every error and warnings thrown
- tools/mediaCapabilitiesProber: set logs about unimportant missing APIs as debug-level instead of warn-level
- types: provide type safety to
addEventListener
andremoveEventListener
- dash/api: fix
getMinimumPosition
for MPDs with an availabilityStartTime superior to unix epoch - smooth: be more tolerant on downloaded segments (accept ISOBMFF with boxes in any order)
- buffers/abr: fix issue infrequently leading to a delay in quality changes
- buffers: improve synchronisation to the SourceBuffer's buffer to avoid cases where the same segment could be downloaded multiple times
- subtitles: fix bug in the clean-up logic of subtitles in the
"html"
texttrack mode that would lead to removed subtitles still being displayed - pipelines: retry a segment request with a backoff instead of stopping when receiving a HTTP 412
- compat/subtitles: work-around firefox issue in the
"native"
texttrack mode to ensure track cues are removed when the content is stopped - subtitles/webvtt: support default classes in the WebVTT specification
- subtitles/webvtt: multiple styles for the same element are now merged into one (instead of considering only the last one)
- subtitles/webvtt: fix styling issues when both styles applied globally and styles applied on a selector are defined
- subtitles/webvtt: do not remove whitespaces in styles to keep a sane formatting for some complex values
- dash: warn through logs when fields are not in the expected format
- drm: throw more explicative error messages when DRM are not supported in the current target
- dash/smooth: get more precize duration from ISOBMFF by better handling the default duration taken from the tfhd box
- tests: continue unit test coverage improvements (from 22% in the
v3.10.2
to 33.6%) - demo: fix initial text-track selection
- dash/smooth: fix manifest updates for some DASH contents (SegmentTimeline without SegmentTemplate) and for some Smooth usages
- compat/drm: adopt a new strategy for malfunctioning CENC PSSH on Edge by moving them at the end of the initialization data
- dash/smooth: update deprecated Manifest.adaptations property when updating the manifest
- dash: refresh the MPD less often
- dash/smooth: improve precision of
getMaximumPosition
when the Manifest is updated - tests: use the Jest library for unit tests
- tests: add a lot of unit tests to sensitive code (from a coverage of 13% in the v3.10.1 to 22% in the v3.10.2)
- npm: reduce size of the npm package
- abr: always consider the last quality estimation
- drm: work-arround Edge bug where the browser does not accept a valid CENC PSSH (DRM-related information in an ISOBMFF)
- dash: handle
S
nodes (segments) with an @r attribute at-1
in an MPD - dash: handle
SegmentTimeline
which have as a firstS
node (segment) an undefined @t attribute in an MPD - dash: Representation.index.getLastPosition() for SegmentBase-based DASH Representations now returns the end of the last segment (it returned the start of the last segment before)
- dash/smooth: throw better error (
MANIFEST_PARSE_ERROR
) if none of the audio or video tracks of a content can be played (e.g. none have supported codecs)
- manifest: better infer the minimum time of a Manifest
- code: refresh code architecture (rename and move modules, remove some dependencies...)
- tests: add coverage reports for both unit and "integration" tests, to check where tests are lacking and better pin down our hot-spots
- tests: add appveyor countinous integration service for unit tests
- dash: Manage xlinks in "onLoad" resolution model
- dash: Implement AdaptationSet switching by merging similar and switchable AdaptationSet into a single track
- compat: add
MEDIA_ERR_METADATA_NOT_LOADED
warning, triggered when the browser has issues with loading the initial data (only seen on the Samsung mobile browser in directfile mode) - compat: add
MEDIA_ERR_PLAY_NOT_ALLOWED
warning, triggered when the application tries toplay
but the current browser doesn't allow it (often due to autoplay policy) - api: the
play
API now returns a Promise, mirroring the original browser'splay
API
- api: The
xhr
property from aNetworkError
is now deprecated
- compat/smooth: fix fatal error
BUFFER_APPEND_ERROR
happening on some HSS contents with Edge - dash/smooth: never refresh the manifest if its content is not dynamic
- dash/smooth: use new URL if the initial manifest request is redirected (again :/ - thanks @fnatte)
- api: do not go out of the
LOADING
state if the metadata could not be fetched (even if the browser tells us otherwise) - to work around Samsung Browser bug - api: avoid going out of the
LOADED
state until the initial seek is done and metadata is fetched - compat: use Promise ponyfill to improve IE11 compatibility with the MediaCapabilitiesProber and some EME functionalities
- api: translate most IETF language tags into corresponding ISO639-3 codes for the
normalizedLanguage
property - given from APIs such asgetAvailableAudioTracks
- tools: fix
mediaCapabilitiesProber.getCompatibleDRMConfigurations
experimental tool on Safari - api: filter out duplicates in
getAvailableVideoBitrates
andgetAvailableAudioBitrates
- dash: better infer unknown Period durations
- dash: better manage overlapping Periods by giving more importance to the last chronological one
- memory: clean-up
Adaptation
andRepresentation
information on Periods which are not considered anymore - log: warn through our logs every time a warning event is sent by the API
- demo: authorize DRMs in IE11 or Safari when in HTTP in the demo page
- demo: fix time indication for non-live contents
- compat: fix
undefined Object.values function
issue happening in some older browsers (mainly encountered in IE11 and old webkit versions) - compat: remove side-effects relative to DRM on Safari
- tools: fix issue about an undefined Array.prototype.find method in some older browsers when calling mediaCapabilitiesProber.getCompatibleDRMConfigurations (mainly encountered in IE11)
- eme: activate MediaKeys caching on Edge
- compat: add in our validation process a ban of methods and functions unavailable in older browsers
- tests/smooth: reinforce our Smooth Streaming integration tests
- smooth: authorize empty tracks ("StreamIndex") in Smooth manifests
- smooth: fix issue preventing emergency manifest updates
- dash: fix timeout for minimumUpdatePeriod in cases where the time at which the manifest was last requested is not known (like when setting a customManifestLoader argument)
- smooth: keep supplementary segment information when updating the manifest
- smooth: when updating segment information, perform garbage-collection of those concerning unreachable segments
- dash: consider
minimumUpdatePeriod
attribute in MPDs - buffer: add codec-switching for browsers supporting the
SourceBuffer.prototype.changeType
API - dash/smooth: accept and parse segments with a "stpp.ttml.im1t" codec (TTML IMSC1 in MP4)
- smooth: fix calculations of the initial time, duration and minimum position for HSS VOD contents not starting at a '0' time
- buffer: fix priority updates for segment requests
- dash: calculate VOD duration from the last period if undefined in the MPD's root
- dash: remove possibility of obtaining two periods with the same id
- typings: make
manualBitrateSwitchingMode
loadVideo
option an optional TypeScript typing (thanks @fnatte again!)
- abr: do not always cancel pending requests when switching to a new bitrate
- abr: re-estimate the bandwidth immediately after each request
- buffer: remove automatic garbage-collection of the "image" source-buffer (its rules should be more complex than those in place)
- tools/mediaCapabilitiesProber: Make
getCompatibleDRMConfigurations
work under IE11 and old webkit versions - tools/mediaCapabilitiesProber: Add a multitude of bug fixes to the experimental mediaCapabilitiesProber
- package: divide by more than 2 the size of our package published in
npm
(thanks @necccc) - tests: add memory tests to detect memory leaks
- demo: add 'favicon' to the demo page
- abr: fix memory leak in ABR Management
- eme: avoid re-attaching a server certificate at each encrypted event
- buffer: lower the "paddings" applied to the video buffer when raising the quality
- abr: when pratical, avoid relying on the "Content-Length" header to protect against miscalculations when downloading from misconfigured servers
- abr: lower the minimum number of bytes we wait to download before we evaluate the bandwidth
- abr: use performance.now instead of Date.now for better precision
- module: move express from the dependencies to the devDependencies
- demo: fix standalone demo and add possibility to launch it via HTTPS
- api/dash/smooth: add representationFilter API to prevent Representations (i.e. media qualities) from being played
- api/buffer: add
manualBitrateSwitchingMode
option to allow a direct representation switch when callingsetVideoBitrate
andsetAudioBitrate
- api/buffer: emit a
MEDIA_TIME_BEFORE_MANIFEST
warning when the wanted time is before what is announced in the manifest - api/buffer: emit a
MEDIA_TIME_AFTER_MANIFEST
warning when the wanted time is after what is announced in the manifest
- remove export of undeclared
ICompatVTTCue
from modular build
- buffer: to avoid taking too much memory, regularly clean-up text and image buffer 5 hours ahead/behind the current position (customizable)
- demo: add HTTPS capabilities on local full demo
- rxjs: update rxjs to 6.3.3
- typescript: update typescript to 3.1.2
- eme: add
throwOnLicenseExpiration
boolean tokeySystems
(loadVideo
option) to allow better expiration management - eme: in the
getLicense
property ofkeySystems
(loadVideo
option), it is now possible to resolve withnull
to avoid a license update. - eme: in the
onKeyStatusesChange
property ofkeySystems
(loadVideo
option), it is now possible to resolve withnull
to avoid a license update. - tools: replace experimental tool
mediaCapabilitiesProber.isDRMSupported
by the more usefulmediaCapabilitiesProber.getCompatibleDRMConfigurations
- smooth: giving a WSX URL instead of the Manifest URL for a smooth content is now deprecated.
- smooth: giving a publishing point definition URL (.isml) instead of the Manifest URL for a smooth content is now deprecated.
- smooth: giving a Smooth Streaming server manifest URL (.ism) instead of the Manifest URL for a smooth content is now deprecated.
- api: switch state to "ENDED" if seeking to the end while the player is in the "LOADED" state.
- api: switch state to "SEEKING" if seeking in the content while the player is in the "LOADED" state.
- dash: consider multiple
Role
nodes for an AdaptationSet. - typescript: fix typings error when an application build us without the
skipLibCheck
TypeScript option enabled. - smooth: fix Manifest URL generation when a ".ism" or a ".isml" URL is given.
- doc: document deprecation of the
adaptations
property returned from aManifest
object (as returned from thegetManifest
method).
- doc: add quick start tutorial.
- doc: add player states documentation.
- demo: add possibility to play encrypted contents.
- demo: update demo page.
- tests: consolidate our integration tests.
- directfile: send
LOADED
event again for directfile contents - thanks @Fnatte - dash: don't merge "main" AdaptationSet if they are not of a video type
- eme: fix bug which prevented the
closeSessionsOnStop
keySystem option to work properly - typescript: export types compatible with project references
- directfile/tests: add basic directfile integration tests
- build: update to Babel 7
- rxjs: update to RxJS 6.3.1
- api: add video track switching
- dash: add webm support
- api: Emit warning if autoPlay is blocked on the current browser
- api: add
getAvailableVideoTracks
method to retrieve every video tracks - api: add
getVideoTrack
method to get the active video track - api: add
setVideoTrack
method to switch the video track - api: add
videoTrackChange
event to know when a video track has been switched - api: add
RELOADING
event for cases where the player needs to reload (such as during a video track switch)
- api: the method
isFullscreen
has been deprecated - api: the method
setFullscreen
has been deprecated - api: the method
exitFullscreen
has been deprecated - api: the method
getNativeTextTrack
has been deprecated - api: the event
fullscreenChange
has been deprecated - api: the event
nativeTextTrackChange
has been deprecated
- ttml: display forbidden characters (such as ">") in a
"native"
textTrackMode
- ttml: process
xml:space
even if it is not defined at the top level - buffer: perform a better clean-up of previous media in a SourceBuffer when switching audio or text track
- manifest/dash: throw a MANIFEST_PARSE_ERROR when no AdaptationSet of a given type in a Period is in a compatible codec
- types: export and document main typings used internally such as ILoadVideoOptions (the loadVideo argument)
- misc: log every fatal errors
- misc: remove dumb npm inclusion as a project dependency
- doc: improve architecture documentation
- dash: Manage presentationTimeOffset completely (allow advanced multi-period configurations)
- dash: Fix Adaptations bug when the first DASH adaptation was a "main" one
- smooth: Remove the limitation of a minimum bitrate in Smooth Streaming
- dash: Fix condition which prevented to play audio-only live DASH streams
- typescript: add typescript declaration files
- abr: update ABR mechanisms when the estimated bandtwidth fall suddenly
- api: warn in the log when the browser reject a wanted autoplay
- drm: Add keyId information to the internal Manifest structure
- typescript: update typescript to v3.0.1
- parsers: fix wrong computation of segment time in template index
- abr: get concerned request in starvation mode
- tools: add
mediaCapabilitiesProber
tool as an experimental tool - builds: add minimal import with feature selection (allowing cleaner feature switching or lazy-loading)
- dash: allow multiple "main" adaptation
- api: add static
version
property to the RxPlayer API
- vtt: fix
line
setting for vtt tracks in"native"
textTrackMode - dash: always play "main" adaptation first
- misc: don't interfere with a client's RxJS implementation by switching to RxJS 6
- dash: presentationTimeOffset doesn't have an influence on requested segment anymore
- smooth/dash: throw a
"MANIFEST_PARSE_ERROR"
if no audio and video adaptations/StreamIndex are available in the current content
- builds: Reduce size of the builds
- builds: use uglifyJS instead of Closure-compiler
- builds: update to typescript 2.9
- rxjs: update to RxJS version 6 (v6.2.1)
- code: set complete URL in segment's media property
- demo: add time indicator on the progress bar
- demo: update fullscreen mode to also display the text track element
- misc: moved demo server scripts to the respective demo directories
- misc: moved manifest parsers to the
src/parsers
directory - misc: moved scripts from
./tools
to./scripts
- misc: moved webpack configs to the root of the project
- buffer: fix several bugs happening when calling
endOfStream
to announce the end of the current content. Especially prevalent on Chrome. - net: use redirected URL as a base for further requests when the manifest request led to a HTTP redirect.
- vtt/srt: ignore silently (do not throw) when an unknown block has been detected in a vtt or srt file
- vtt/srt: support styling spans (like b, i and u XML tags) spanning multiple lines
- api:
getAvailableTextTracks
andgetAvailableAudioTracks
now always return an array (and never null) as anounced in the API documentation - api: set default log level to
"NONE"
instead of"INFO"
- misc: remove development-only code from the non-minified code
- misc: move some dev dependencies from
dependencies
todevDependencies
inpackage.json
- eme: allow multiple licenses per content
- eme: allow different MediaKeys to be attached on multiple media elements
- eme: limit simultaneous loaded MediaKeySession to 50 by default (configurable)
- source-buffer: clean properly the text SourceBuffer on deactivation
- buffer: perform discontinuity seeks only for native source buffers
- doc: generate documentation pages
- misc: add sonarqube quality pass
- code: set a clearer private state for the API
- tools: update to webpack v4.8.3
- tools: update to typescript v2.8.3
- api: emit SEEKING state instead of BUFFERING when the user seeks to an unbuffered part just after resuming playback
- api: work around bug found in old versions of Chrome where the ENDED state would never be triggered at the end of the stream
- api/language: fix bug where an audio or text language would not be switched to on certain conditions in live contents
- smooth: fix frequent manifest refreshing happening immediately when changing audio/text language
- eme/error: fix reason string and error message for KEY_STATUS_CHANGE_ERROR
- buffer: update download queue immediately when seeking to an already-buffered part, to always prioritize needed segments
- buffer: schedule segments per level of priority to lower some buffering/seeking/loading time
- demo: fix "Big Buck Bunny WEBM"'s URL
- misc: fix missing browser API on IE11
- buffer: end correctly streams which experienced a custom sourcebuffer (text/image) crash
- tools: support development on windows
- api: add directfile API to allow the playback of files natively managed by the browser
- api: fix player state when seeking after the video ended
- text/api: fix getTextTrack API which could return the current audio track instead
- text: clean-up custom HTML text track SourceBuffer's buffered when the text track is disabled
- dash: Handle multi-periods DASH manifests
- api: add
periodChange
event - api: add
stopAtEnd
option to the constructor, to deactivate automatic content un-loading when it ends - api: add
manifestLoader
to thetransportOptions
of aloadVideo
call
- stream: call
endOfStream
for better end detection and to allow the Chrome browser to display the last frames of a video - buffer: always play the last possible milliseconds of a content (removed END_OF_PLAY config attribute)
- eme: workaround a bug found on Chrome where setting a
keySystems
option inloadVideo
would always throw on HTTP (not HTTPS) pages. - vtt: fix WebVTT parsing when the last line of a WebVTT file is not a new line
- dash: ignore availabilityStartTime settings for a static MPD
- buffer: ignore segments for a duration inferior to the MINIMUM_SEGMENT_SIZE (200ms by default) to avoid infinite re-downloading
- update RxJS to v5.5.6
- update TypeScript to v2.7.2
- api: add
networkConfig
toloadVideo
options - eme: add
closeSessionsOnStop
to thekeySystems
loadVideo
option
- dash: fix Range request ranges for representations based on a SegmentList index
- smooth: allows smooth Manifests for non-live contents to begin at a timestamp != 0
- eme: fix bug which prevented to play encrypted contents on IE11
- buffer: fix issue which could led to multiple video or audio segments being downloaded at the same time
- dash/text: support MPD AdaptationSet with a "caption" Role as text Adaptations
- dash/text: remove offset set for subtitles on live contents, which led to unsynchronized subtitles
- dash: fix issue which could led to segments being re-downloaded too much in a SegmentTemplate scheme
- demo: set "html" textTrackMode by default to have a better stylization of closed captions.
- eme: consider unknown errors (e.g. errors coming from the user of the library) as fatal eme errors
- text/webvtt: authorize header options without parsing them
- text/webvtt: authorize timestamps without hours
- misc: remove multiple unneeded assertions in DEV mode
- misc: update DEV mode default debug level from DEBUG to INFO
- text/ttml: apply correctly a style if directly set on an attribute
- eme: load new video even if the last EME clean-up failed
- misc: set better work arround for typescript issue 20104 to make building npm scripts usable again
- tools: update the update-version npm script
- demo:
npm run start
andnpm run standalone
now build the rx-player in the "development" environment - tools: add more logs in DEBUG mode
- misc: work around typescript issue 20104 temporarly to launch in Chrome in HTTP
- abr: adopt a less agressive strategy to avoid re-bufferings
- smooth: avoid most of the manifest refresh requests
- Switch codebase to TypeScript
- Add Travis CI
- misc: add possibility to do custom builds through environment variables, to remove unwanted features from minified code.
- languages: add support for segmented VTT subtitles
- languages/dash: add support for plain text TTML, SAMI, SRT, VTT and MP4-embedded VTT subtitles in DASH manifests
- languages/smooth: add support for MP4-embedded VTT subtitles in Smooth manifests
- languages: add possibility to show fragmented or not TTML, SAMI, SRT and VTT text tracks in a element, even for browser that do not support the VTTCue API
- languages: add possibility to show TTML, SRT, VTT and SAMI text tracks in HTML tags for richer stylisation.
- api: add
textTrackElement
option toloadVideo
- api: add
textTrackMode
option toloadVideo
- api: add
nativeTextTracksChange
event - eme: it is now possible to directly set the reverse domain name of the wanted key system in the
type
property ofloadVideo
'skeySystems
option. - api: add property
percentage
to thestartAt
argument ofloadVideo
. - abr: add
bitrateEstimationChange
event - api: add
LogLevel
static property - api: a Date object can now be given to the
loadVideo
argumentstartAt.wallClockTime
. It will be automatically converted into seconds. - languages: add
normalizedLanguage
property in manifest-related-APIs to expose the ISO 639-3 language code of the audio and text tracks - languages: add
normalized
property in language-related-API to expose the ISO 639-3 language code of the audio and text tracks - loadVideo: add
codecs
property to supplementaryTextTracks - api: add
wantedBufferAhead
constructor option - api: add
maxBufferAhead
constructor option - api: add
maxBufferBehind
constructor option - api: add
getVideoBufferGap
method - api: add
isMute
method - api: add
getManualAudioBitrate
method - api: add
getManualVideoBitrate
method - config: add a global config file (src/config.js) to easily tweak the player behavior
- languages: switch from ISO 639-2 to ISO 639-3 language codes in various APIs
- languages: the
language
property returned by language and manifest related APIs now reflect the exact language as set in the manifest - api:
setVideoBitrate
can now be called even when no content is playing - api:
setAudioBitrate
can now be called even when no content is playing - api:
setVideoBitrate
can now be called even when no video track has the exact same bitrate - api:
setAudioBitrate
can now be called even when no audio track has the exact same bitrate - api: giving a number to
seekTo
now has the same effect than setting a position option in argument (seekTo({ position }) === seekTo(position)
) - api:
getUrl
now do not throw if no content is playing - api:
isLive
now do not throw if no content is playing - api:
loadVideo
does not return anything anymore - api: private (undocumented) variables have been isolated on a player instance to a
_priv
object. - api: the constructor option
throttleWhenHidden
is now set to false by default - api: the constructor option
limitVideoWidth
is now set to false by default
- api: remove
defaultAudioTrack
constructor option - api: remove
defaultTextTrack
constructor option - api: remove
transportOptions
constructor option - api: remove
transport
constructor option - api: remove
nativeTextTrackChange
event in favor ofnativeTextTracksChange
event (notice the "s") - api: remove
goToStart
method - api: remove
getStartTime
method - api: remove
getEndTime
method - api: remove
toggleDebug
method - api: remove
hideDebug
method - api: remove
showDebug
method - api: remove
getDebug
method - api: remove
getImageTrack
method - api: remove
setVideoBufferSize
method in favor ofsetWantedBufferAhead
method - api: remove
getVideoBufferSize
method in favor ofgetWantedBufferAhead
method - api: remove
setAudioBufferSize
method in favor ofsetWantedBufferAhead
method - api: remove
getAudioBufferSize
method in favor ofgetWantedBufferAhead
method - api: remove
maximumBufferTime
property frompositionUpdate
events - api: remove
getCurrentTime
method - api: remove
asObservable
method - api: remove
loadVideo
optionmanifests
in favor ofurl
andkeySystems
options - api: remove
loadVideo
optionsubtitles
in favor ofsupplementaryTextTracks
option - api: remove
loadVideo
optionimages
in favor ofsupplementaryImageTracks
option - api: remove constructor option
initVideoBitrate
in favor ofinitialVideoBitrate
option - api: remove constructor option
initAudioBitrate
in favor ofinitialVideoBitrate
option - api: remove constructor option
defaultLanguage
in favor ofdefaultAudioTrack
option - api: remove constructor option
defaultSubtitle
in favor ofdefaultTextTrack
option - position: remove
subtitleChange
event - position: remove
languageChange
event - position: remove
progress
event - position: remove
currentTimeChange
event in favor ofpositionUpdate
event - adaptive: remove
getMetrics
method - adaptive: remove
getAverageBitrates
method - adaptive: remove
getVideoMaxBitrate
method in favor ofgetMaxVideoBitrate
method - adaptive: remove
getAudioMaxBitrate
method in favor ofgetMaxAudioBitrate
method - errors: remove static method
getErrorTypes
in favor of the static propertyerrorTypes
- errors: remove static method
getErrorCodes
in favor of the static propertyerrorCodes
- languages: remove
normalizeLanguageCode
method - languages: remove
getAvailableLanguages
method - languages: remove
getAvailableSubtitles
method - languages: remove
isLanguageAvailable
method - languages: remove
isSubtitleAvailable
method - languages: remove
getLanguage
method - languages: remove
getSubtitle
method - languages: remove
setLanguage
method - languages: remove
setSubtitle
method
- dash: fix bug that prevented to play most dash contents with SegmentTemplate-based manifests
- dash: it's now possible to play SegmentTimeline-based contents with a numbering scheme
- dash/text: calculate the text track time offset for dynamic DASH contents (prevented most text tracks from live DASH contents to be displayed)
- eme: fix EME issues when loading multiple videos in IE/Edge
- api: The state of the player when ready to play with autoPlay === false is now
"LOADED"
and not"PAUSED"
- api: fix infinite loading bug when a new content is synchronously launched as soon as the previous one is ended or fell on error
- dash: allow absolute BaseURL in Periods
- languages: avoid excessive re-downloads if a
supplementaryTextTracks
is provided and either amaxBufferBehind
or amaxBufferAhead
is set. - eme: the
reason
for the eme errorKEY_STATUS_CHANGE_ERROR
is now correctly filled in - eme: do not set widevine robustnesses for non-widevine key systems
- languages: fix bug which led the text buffer to crash when the
wantedBufferBehind
option is set - languages: fix bug which led to TextTracks chunks being re-downloaded multiple times
- speed: fix playback rate bug when setting it while the player is stalled
- smooth: fix "fallback" callback in the segmentLoader API for smooth contents.
- smooth: fix some minor risks of infinite rebuffering for live contents, when the isobmff's tfrf box is not well parsed.
- buffer: avoid infinite player rebuffering when the manifest is not exactly aligned with the real duration of the content
- buffer: avoid multiple causes of infinite player rebuffering by managing segment garbage collection
- languages: getAudioTrack now always returns the currently set audio track
- languages: getTextTrack now always returns the currently set text track
- manifest: improve manifest refreshing logic, by not downloading it when unnecessary
- smooth: begin to play arround 10s before the live edge instead of 20 seconds for smooth contents
- network: the backoff algorithm has been refactored for better network error resilience
- adaptive: improved ABR management to provide a better, faster and more stable bandwidth estimation
- adaptive: add strategies for abrupt changes of bandwidth to avoid excessive re-buffering on network fluctuations
- adaptive: the adaptive algorithm now take into account the current playback rate
- doc: added file architecture documentation
- tests: fixed and added integration tests
- demo: the demo now manages most languages defined by in the ISO 639-3 standard
- eme: update EME workflow to improve support (especially chromebooks)
- buffer: improve buffer ranges "bookeeping" logic to avoid re-downloading the same segments
- eme: add audioRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
- eme: add videoRobustnesses to loadVideo's keySystems argument (/!\ undocumented API - can break without official notice)
- eme: add serverCertificate to loadVideo's keySystems argument
- buffer: add {set,get}MaxBufferAhead methods
- buffer: add {set,get}MaxBufferBehind methods
- buffer: add {set,get}WantedBufferAhead methods replacing the deprecated buffer size methods
- setVideoBufferSize has been deprecated in favor of setWantedBufferAhead
- getVideoBufferSize has been deprecated in favor of getWantedBufferAhead
- setAudioBufferSize has been deprecated in favor of setWantedBufferAhead
- getAudioBufferSize has been deprecated in favor of getWantedBufferAhead
- buffer: avoid some infinite re-buffering by re-calculating buffer ranges at every tick
- eme: add eme support for some legacy browser without video or audio capabilities
- general: add support for older browsers (which does not support array.prototype.{find,findIndex,includes})
- general: use Object.assign ponyfill instead of the previous polyfill to avoid malicious interferences with other codebases
- adaptive: fix width limitation bug. Impacted limitVideoWidth + setMaxVideoBitrate APIs
- position: add maximumBufferPosition to the positionUpdate event's payload to replace the previous "liveGap" from currentTimeChange event
- upgrade to rxjs 5.4.1 to escape memory leak
- position: "liveGap" from currentTimeChange event now means the difference to the maximum "bufferisable" position to keep compatibility with the old API
- api: fix timeFragment.start handling
- stream: the BUFFER_APPEND_ERROR error, happening when a SourceBuffer.appendBuffer failed for an unknown reason, is now a fatal error for audio/video segments
- eme: fix rxjs timeout management which prevented from playing DRM-protected contents
- api: add securities to avoid useless errors to be thrown when the player (already) encounter an error
- position: fix bug which prevented to seek at the beginning of the content with the new api
- position: fix typo which prevented to perform absolute seeks with the new api
- buffer: automatically seek if there is discontinuity in a live stream
- adaptive: take the lowest bitrate (instead of the initial/default one) when the player is not displayed/too small
- hotfix: fixed rxjs imports
- hotfix: the player can now be imported through a commonjs require
- hotfix: the player could not play if the video element's width was too short
- manifest: segment id were not always the same on a segmentLoader and on the API calls.
- adaptive: setVideoBitrate now throw a more meaningful error if no content is playing
- adaptive: setAudioBitrate now throw a more meaningful error if no content is playing
- language: setSubtitle now throw a more meaningful error if no content is playing
- language: setLanguage now throw a more meaningful error if no content is playing
- language: isLanguageAvailable do not throw and return false if no content is playing
- language: isSubtitleAvailable do not throw and return false if no content is playing
- api: deprecated api now only warn once
- tests: integration tests have been added
- manifest: the manifest object and the management of its index has been refactored for future improvements
- images/dash: add BIF support in DASH MPD
- subtitles/smooth: add support for closed captions in smooth manifest
- subtitles: add closed caption support in supplementaryTextTracks loadVideo arguments
- position: add getMinimumPosition and getMaximumPosition methods
- position: add startAt loadVideo argument (replace the timeFragment API)
- position: add positionUpdate event
- images: add getImageTrackData method
- images: add imageTrackUpdate event
- position: add possibility to use relative, absolute and wall-clock time on seekTo API
- transport: add segmentLoader transportOption for constructor and loadVideo API
- api: add setMaxAudioBitrate and setMaxVideoBitrate method
- api: add exitFullscreen method
- api: add ErrorTypes and ErrorCodes static properties
- api: add getPosition method
- api: add getWallClockTime method
- manifest: add getCurrentRepresentations method
- manifest: add getCurrentAdaptations method
- api: add throttleWhenHidden option to constructor (to disable throttling when the current page is hidden for an extended time)
- api: add limitVideoWidth option to constructor (to disable throttling to match the video element's width)
- api: add initialAudioBitrate and initialVideoBitrate to constructor's options
- api: add defaultTextTrack and defaultAudioTrack to loadVideo and constructor's options
- languages: add getAvailableAudioTracks method with audio description support
- languages: add getAvailableTextTracks method with closed caption support
- languages: add getAudioTrack method with audio description support
- languages: add getTextTrack method with closed caption support
- languages: add setAudioTrack method with audio description support
- languages: add setTextTrack method with closed caption support
- audiotrack/dash: add audio description support in DASH MPD
- subtitles/dash: add closed captions support in DASH MPD
- subtitles/dash: add subtitles support in DASH MPD (only ttml for now)
- position: the timeFragment API is deprecated (loadVideo's timeFragment argument, getStartTime, getEndTime and goToStart)
- api: currentTimeChange event is replaced by the positionUpdate event
- api: progress event is deprecated and not replaced
- api: getImageTrack is replaced by the imageTrackUpdate event
- api: loadVideo parameter subtitles is replaced by supplementaryTextTracks
- api: loadVideo parameter images is replaced by supplementaryImageTracks
- api: getVideoMaxBitrate is replaced by getMaxVideoBitrate
- api: getAudioMaxBitrate is replaced by getMaxAudioBitrate
- api: toggleDebug is deprecated and not replaced
- api: hideDebug is deprecated and not replaced
- api: showDebug is deprecated and not replaced
- api: getDebug is deprecated and not replaced
- api: asObservable is deprecated and not replaced
- api: getAverageBitrates is deprecated and not replaced
- api: getMetrics is deprecated and not replaced
- position: using seekTo with a Number argument is deprecated.
- position: getCurrentTime is deprecated in favor of getWallClockTime
- api: setVideoMaxBitrate is replaced by setMaxVideoBitrate
- api: setAudioMaxBitrate is replaced by setMaxAudioBitrate
- api: using setFullscreen(false) is replaced by exitFullscreen
- api: getErrorTypes method has been deprecated in favor of the ErrorTypes property
- api: getErrorCodes method has been deprecated in favor of the ErrorCodes property
- languages: initAudioBitrate option in constructor is deprecated in favor of initialAudioBitrate
- languages: initVideoBitrate option in constructor is deprecated in favor of initialVideoBitrate
- languages: defaultSubtitle option in constructor and loadVideo is deprecated in favor of defaultTextTrack
- languages: defaultLanguage option in constructor and loadVideo is deprecated in favor of defaultAudioTrack
- languages: getAvailableLanguages is deprecated in favor of getAvailableAudioTracks
- languages: getAvailableSubtitles is deprecated in favor of getAvailableTextTracks
- languages: getLanguage is deprecated in favor of getAudioTrack
- languages: getSubtitle is deprecated in favor of getTextTrack
- languages: isLanguageAvailable is deprecated and not replaced
- languages: isSubtitleAvailable is deprecated and not replaced
- languages: setLanguage is deprecated in favor of setAudioTrack
- languages: setSubtitle is deprecated in favor of setTextTrack
- adaptive: fix a bug where it was impossible to switch between multiple videos representations with the same width
- languages: fix bug where the user could switch to a closed caption track unknowngly
- languages: fix bug where the user could switch to an audio description track unknowngly
- manifest: improved and documented getManifest's return value
- manifest: defined and documented a generic manifest object structure (slowly replacing the old object).
- images: image playlists are now not re-fetched if the request failed (no retry)
- dash: lowered security time raising the startup time for SegmentTemplate-based contents
- api: getLanguage/getSubtitle returns now the language of the last chunk received, not the last set
- manifest: fixed manifest-refreshing logic (mainly for live contents)
- dash: fixed support for dash SegmentTimeline-based contents
- api: differentiate unset default languages from empty strings
- languages: handle undefined languages (to an empty string)
- api: allow the player to be instanciated with no option
- mp4: fix minor bugs with isobmff parsing
- images: keep externally-given BIF track when the manifest is refreshed
- timings: fix timeFragment arguments RegExp
- subtitles: fix webVTT management for unsupported user agents
- timings: fix calculation of the position and duration for non-dynamic contetns
- documentation: The API documentation has been completely rewritten
- manifest: The DASH manifest handling has been refactored
- smooth: Smooth index handling has been completely separated from the DASH logic
- tests: fix and re-wrote unit tests
- documentation: Code documentation has been added
- demo: The Demo has been completely rewritten
- demo: The bundle has been removed from the code committed.
-
RxJS: use RxJS5.beta1
-
Promise: remove es6-promise dependency and stop relying completely on promises
-
eme: improve IE11 and Edge support on EME
-
smooth: activate patch in place on non IE targets for less memory allocation
-
player: deprecate directFile api and skip MediaSource assert for directfile
-
player: clone array for getAvailableBitrates methods
-
player: fix when no adaptation or no representation
-
player: record subtitle state as empty string
-
buffer: start with buffer infos to cache infos asap
-
stream: start stalling system after having first metadata
-
refacto: clean pipelined objects and POO where needed
-
lint: add new rules (no-var, prefer-const, enforce brackets)
- buffer: add garbage collector
- player: emit currentTimeChange synchronously
- player: add {defaultLanguage,defaultSubtitle} api
- log: warn to info for some logs
- player: fix getAvailable* for direct files
- player: fix subtle race on loadedmetadata after retry
- eme: remove compat code for old chrome versions with eme flags
- eme: always ask for temporary session type
- eme: fix template error message
- eme: improve persistent license support and compat
- smooth: fix index timeline if no duration
- allow to pass query parameters
- smooth: fix parseBoolean causing isLive to be always true
- eme: license persistency support
- timings: add progress sampling
- compat: add firefox workaround for autoplay
- stream: do not stall on loadedmetadata event
This release introduces the use of ES6 classes for all modules that depends on a sort of class hierarchy. It comes with an upgrade of RxJSv3.1.1.
We also started using eslint as our main linter instead of jshint.
- smooth: customizable parser (7b50ce9)
- smooth: add application/smil as SAMI content-type (e0aa2bb)
- improve video start time by ticking on loadedmetadata (27bd43c)
- dash: incremental id from adaptations/representations (c24fecb)
- stream: discontinuity check on each stalled tick (3a5b796)
- fix missing new on Promise (4679632)
- compat: fix IE11 compat for setMediaKeys (2ccb11f)
- player: fix synchronous dispose on loadVideo (dc79bd1)
- pipelines: fix audio/video init segment caches (ea3422f)
- stream: remove initial seek hack (ae0ac23)
- player: fix getVideoLoaded/PlayedTime (63bf304)
- player: fix getUrl (577ce87)
- manifest: enforce id setting to parsers (927d275)
- smoothstreaming transport support
- api for initial aubio/video bitrate choice
- simplify WebVTT support and implementation
- allow percentage values on start/end time values
- fix local buffer representation out-of-sync with native ones
- fix no retry for > 500 http codes
- fix no MediaKeySession reuse on Chrome
- fix quota error with MediaKeys attached to multiple video elements on Chrome
Initial public release.