Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release/v4.0.0-rc.1 #1364

Merged
merged 1 commit into from
Jan 24, 2024
Merged

release/v4.0.0-rc.1 #1364

merged 1 commit into from
Jan 24, 2024

Conversation

peaBerberian
Copy link
Collaborator

@peaBerberian peaBerberian commented Jan 24, 2024

Note: This is the full changelog combining all previous v4 beta releases (and removing things since released in v3 releases or bug fixes which only fix v4 issues)

Changelog

Changes

  • Create "FREEZING" player state for cases where the playback position is currently not advancing due to an unknown reason, to separate it from regular "BUFFERING". [[V4] Add FREEZING state #1146]
  • The RELOADING player state (gettable through the getPlayerState and playerStateChange API) can now happen at any time to unlock playback.
  • Remove bitrate API: getAvailableVideoBitrates, getAvailableAudioBitrates, setAudioBitrate, setVideoBitrate, getAudioBitrate, getVideoBitrate in profit of the Representations lock APIs [[V4] Remove all bitrate-based API #1144]
  • Remove max bitrate API: setMaxVideoBitrate, setMaxAudioBitrate, getMaxVideoBitrate and getMaxAudioBitrate methods as well as the maxVideoBitrate and maxAudioBitrate options in profit of the Representations lock APIs
  • Remove min bitrate API: setMinVideoBitrate, setMinAudioBitrate, getMinVideoBitrate and getMinAudioBitrate methods as well as the minVideoBitrate and minAudioBitrate options in profit of the Representations lock APIs
  • Remove track preferences API (methods: getPreferredAudioTracks, getPreferredVideoTracks, setPreferredAudioTracks and setPreferredVideoTracks, types: IAudioTrackPreference, ITextTrackPreference and IVideoTrackPreference) in profit of the new tracks API
  • Remove getManualVideoBitrate and getManualAudioBitrate in profit of the new Representations lock APIs
  • Replace initialAudioBitrate and initialVideoBitrate constructor options with a single baseBandwidth option, which better translates what this option is actually doing and allows for future optimizations on our side. [[Proposal] [v4] Remove initialVideoBitrate and initialAudioBitrate, add baseBandwidth #1155]
  • Rename audioTrackSwitchingMode loadVideo option into defaultAudioTrackSwitchingMode [[WIP] Add a promise priotizer  #1030]
  • Remove manualBitrateSwitchingMode loadVideo option to instead rely on the switchingMode property of each lockVideoRepresentations and lockAudioRepresentations calls. [[WIP] Add a promise priotizer  #1030]
  • Remove audioBitrateChange and videoBitrateChange events in profit of the new audioRepresentationChange and videoRepresentationChange events
  • Remove availableAudioBitratesChange and availableVideoBitratesChange events. Those are less needed with the new Representations lock API and can be mostly replicated through the audioTrackChange and videoTrackChange events
  • "Flatten" the transportOptions loadVideo options by putting all its inner properties directly at the top level of loadVideo options, to simplify its documentation and discoverability [[V4] Flatten transportOptions loadVideo option #1149]
  • Remove limitVideoWidth constructor option in profit of the more configurable videoResolutionLimit constructor option
  • Rename networkConfig into requestConfig and re-organize its inner properties to pave the way for future request-related APIs.
  • Remove stopAtEnd loadVideo option and don't automatically stop when reaching the end by default. This behavior can be counter-intuitive and can be very easily implemented by the application.
  • Remove decipherabilityUpdate event as it appeared to be not easily exploitable and exposed internal logic too much [[v4] Remove decipherabilityUpdate event #1168]
  • Remove getUrl method in profit of the more powerful getContentUrls
  • Impossibility to play the content due to unsupported audio and/or video tracks now triggers an error with the MANIFEST_INCOMPATIBLE_CODECS_ERROR instead of MANIFEST_PARSE_ERROR
  • Remove methods: getManifest, getCurrentAdaptations and getCurrentRepresentations, as they reveal the RxPlayer's internals too much
  • The "smooth" transport now needs to be communicated the URL of the Manifest directly (previously, it was possible to redirect it to a XML or JSON file first due to Canal+ legacy reasons).
  • Remove the supplementaryTextTracks loadVideo option. You can use the TextTrackRenderer tool if you wish to diplay external subtitles on top of your content.
  • Rename maximumBufferTime in positionUpdate events to maximumPosition
  • Remove getVideoPlayedTime and getVideoLoadedTime methods. Their names was very confusing and can be re-implemented relatively easily using the media element's buffered property.
  • Rename getVideoDuration to getMediaDuration, to avoid confusion with the video track's duration.
  • Rename getVideoBufferGap to `getCurrentBufferGap, to avoid confusion with the "buffer gap" specific to the video track.
  • Remove image-related API: supplementaryImageTracks loadVideo option, imageTrackUpdate event, getImageTrackData method. Those are better handled by an application. The parseBifThumbnails tool is still available.
  • Replace keySystems[].licenseStorage keySystems option (for a loadVideo call) by the better-named persistentLicenseConfig. The persistentLicense boolean (also a keySystems option) has also been removed because it was redundant with it) [[V4] DRM: Remove persistentLicense keySystems option and rename licenseStorage to persistentLicenseConfig #1147]
  • Remove persistentStateRequired API, in profit of the more powerful persistentState API [[V4] Various DRM-related API updates #1148]
  • Remove distinctiveIdentifierRequired API, in profit of the more powerful distinctiveIdentifier API [[V4] Various DRM-related API updates #1148]
  • Remove keySystems[].fallbackOn loadVideo property as it's now replaced by the more powerful keySystems[].onKeyOutputRestricted and keySystems[].onKeyInternalError properties.
  • Remove keySystems[].onKeyStatusesChange API as it seems to never be used [[V4] Various DRM-related API updates #1148]
  • Remove keySystems[].throwOnLicenseExpiration API as it can now be fully replaced by the keySystems[].onKeyExpiration option
  • Remove aggressiveMode from the transportOptions loadVideo option
  • Remove deprecated throttleWhenHidden player option in profit of throttleVideoBitrateWhenHidden
  • Change payload of periodChange events, so they emit only core properties related to a Period.
  • Change arguments given to a transportOptions.segmentLoader function (the loadVideo option): it now doesn't give the full Manifest, Period, Adaptation, Representation and ISegment structures in arguments but only core properties from it [Future-proof the transport code for a v4.0.0 #995]
  • Custom manifestLoader function added to what was previously the loadVideo's transportOptions option now set an object as argument (with an urlproperty), to let us bring improvements on it in the future [Future-proof the transport code for a v4.0.0 #995]
  • A Representation's frameRate is now always a number - in terms of frame per seconds - instead of a string.
  • Update the arguments of the representationFilter API
  • Representations (in methods: getAvailableVideoTracks, getVideoTrack, representationFilter, getAvailableAudioTracks, getAudioTrack and events: audioTrackChange and videoTrackChange) can have an undefined bitrate
  • Remove deprecated fullscreen related APIs (methods: isFullscreen, setFullscreen, exitFullscreen, event: fullscreenChange) as a a UI is much more adapted to that task and can also bring with it things like a progress bar or HTML text tracks
  • Remove deprecated getNativeTextTrack method. If advanced features are wanted, it's better to just use the HTML text track API
  • Remove deprecated nativeTextTracksChange event. Same reason than for getNativeTextTrack
  • Remove deprecated hideNativeSubtitles from loadVideo options. Same reason than for getNativeTextTrack
  • Remove xhr property from a NetworkError. Doing so stop us from using the fetch API
  • Remove deprecated defaultAudioTrack and defaultTextTrackin profit of new track APIs
  • Remove bitrateEstimationChange event as it is poorly understood (it's not always close to the expected bandwidth) and has a very complex relationship with the chosen quality.
  • Remove the notion of environment variables linked to personalized builds (e.g. RXP_DASH) in profit of the minimal RxPlayer.
  • Rename IPersistentSessionStorage type to IPersistentLicenseConfig [[V4] DRM: Remove persistentLicense keySystems option and rename licenseStorage to persistentLicenseConfig #1147]
  • Remove undocumented audioRobustnesses and videoRobustnesses properties of the keySystems option of loadVideo calls, as more powerful solutions now exist: respectively audioCapabilitiesConfig and videoCapabilitiesConfig [[V4] Various DRM-related API updates #1148]
  • Remove public types ISupplementaryTextTrackOption and ISupplementaryImageTrackOption. Those are the types respectively for supplementaryTextTracks and supplementaryImageTracks which have been removed
  • Remove public types IBitrateEstimate as no API depend on it anymore.
  • Remove public types IManifest, IPeriod, IAdaptation, IRepresentation, IRepresentationInfos, IBifThumbnail, IBifObject and IExposedSegment as no API depend on them anymore.
  • Remove public types IDefaultAudioTrackOption and IDefaultTextTrackOption. Those are the types respectively for defaultAudioTrack and defaultTextTrack loadVideo options which have been removed
  • Remove public types IAudioTrackPreference, ITextTrackPreference and IVideoTrackPreference as the corresponding API do not exist anymore.
  • Stop officially supporting the Internet Explorer 11 browser
  • The MediaError's trackInfo property is now an array renamed as tracksInfo and similar MediaError are grouped in one [[Proposal] [v4] Errors: Replace trackInfo prop by tracksInfo to group similar errors #1264]
  • The manifestUpdateUrl loadVideo option has been removed as it was unused [[Proposal] "Remove" manifestUpdateUrl loadVideo option for the v4 #1276]
  • volumeChange events are now sending both the audio volume and the muted status [Set more standard mute/unMute behaviors #1348]
  • mute/unMute/isMute now rely on the HTMLMediaElement's muted property and not the audio volume [Set more standard mute/unMute behaviors #1348]
  • A representationFilter's advertised codec has now been renamed to codecs and is an Array when defined [Rename codec to codecs in the representationFilter for the v4 #1332]
  • DASH_WASM and DEBUG_ELEMENT are not experimental features anymore [DASH_WASM, DEBUG_ELEMENT become non-experimental features and parseBifThumbnails a non-experimental tool #1339]
  • The parseBifThumbnails function is not an experimental tool anymore [DASH_WASM, DEBUG_ELEMENT become non-experimental features and parseBifThumbnails a non-experimental tool #1339]
  • If all Representations from the current track become undecipherable, automatically switch to another track (also send a trackUpdate event) instead of stopping on error [Improve NO_PLAYABLE_REPRESENTATION behavior for the v4 #1234]
  • Only send MediaError errors with the NO_PLAYABLE_REPRESENTATION error code when no Representation from all tracks of a given type can be played [Improve NO_PLAYABLE_REPRESENTATION behavior for the v4 #1234]

Features

  • Add MULTI_THREAD experimental feature to enable multithreading capabilities through a WebWorker
  • setAudioTrack, setVideoTrack and setTextTrack now may take an object in argument, with the track's id set as a trackId property, to allow new features
  • Add switchingMode optional property to setVideoTrack and setAudioTrack, to configure the way in which the RxPlayer switches between the previous and new track
  • Add optional periodId property to setAudioTrack, setVideoTrack and setTextTrack, to allow setting the track of another, future or past, Period.
  • getAvailableAudioTracks, getAvailableTextTracks, getAvailableVideoTracks, getAudioTrack, getTextTrack and getVideoTrack can now optionally take a periodId argument to retrieve track information on a specific Period, different than the current one.
  • disableTextTrack, anddisableVideoTrack can now optionally take a periodId argument to disable a track for a specific Period
  • Add optional lockedRepresentations property to setAudioTrack and setVideoTrack, to only filter some allowed Representations (i.e. qualities) after switching to the wanted track.
  • Add getCurrentPeriod method to retrieve information on the Period currently played
  • Add getAvailablePeriods method to retrieve information on all Periods on which a track or Representation choice can be made
  • Add lockVideoRepresentations, lockAudioRepresentations, getLockedVideoRepresentations, getLockedAudioRepresentations, unlockVideoRepresentations and unlockAudioRepresentations methods to allow a complex selection of Representations that are currently allowed to play.
  • Add getVideoRepresentation and getAudioRepresentation method to retrieve information on the currently loaded representations [[V4] Remove all bitrate-based API #1144]
  • Add audioRepresentationChange and videoRepresentationChange events to be notified when the currently-loaded Representation for the current Period changes.
  • Add getContentUrls allowing to retrieve the one or several known URLs through which the current Manifest or content is reachable.
  • Add videoResolutionLimit constructor option allowing to automatically limit a video Representation's resolution.
  • Add newAvailablePeriods event to signal new Period on which a track and/or Representation choice can be made
  • Add brokenRepresentationsLock event for when a Representations lock could not be respected anymore
  • Add trackUpdate event for when a track has been updated for any type and Period
  • Add distinctiveIdentifier property in the keySystems option (given to the loadVideo method) to have full control over the MediaKeySystemConfiguration of the same name in the chosen key system [[V4] Various DRM-related API updates #1148]
  • Add persistentState property in the keySystems option (given to the loadVideo method) to have full control over the MediaKeySystemConfiguration of the same name in the chosen key system [[V4] Various DRM-related API updates #1148]
  • Add keySystems[].onKeyOutputRestricted and keySystems[].onKeyInternalError properties to configure the RxPlayer's behavior when a key switches to the status respectively "output-restricted" and "internal-error"
  • Add audioCapabilitiesConfig and videoCapabilitiesConfig properties in the keySystems option (given to the loadVideo method) to allow advanced configuration of respectively the "audioCapabilities" and "videoCapabilities" in the asked MediaKeySystemConfiguration [[V4] Various DRM-related API updates #1148]
  • Add representationListUpdate event for when the list of available Representation for a current track changes [Add representationListUpdate event for the v4 #1240]
  • add connectionTimeout property to the requestConfig loadVideo option for both the manifest and segment requests to set a timeout just linked to HTTP connection establishment [feature: add a connection timeout #1319]
  • Add relativeResumingPosition property to the setVideoTrackand setAudioTrack options [feat: change position on audio track change #1331]
  • types: export type ICompatibleKeySystem to the public API [types: export type IcompatibleKeySystem to the public API #1340]
  • types: Add ISegmentLoaderContext public type for the first argument of the segmentLoader API
  • types: Add IRepresentationFilterRepresentation public type for the first argument of the representationFilter API
  • types: Add IRepresentationContext public type for the second argument of the representationFilter API
  • types: Add IManifestLoaderInfo public type for the first argument of the manifestLoader API
  • types: Add IPeriodChangeEvent public type to define the properties send through a periodChange event
  • types: Add IPeriod public type to define a Period object returned by methods like getAvailablePeriods or getCurrentPeriod
  • types: Add IVideoTrackSwitchingMode public type to define the type of the switchingMode property optionally given to setAudioTrack
  • types: Add IAudioRepresentationsSwitchingMode public type to define the type of the switchingMode property optionally given to lockAudioRepresentations
  • types: Add IVideoRepresentationsSwitchingMode public type to define the type of the switchingMode property optionally given to lockAudioRepresentations
  • types: Add IBrokenRepresentationsLockContext public type to define the type sent as a payload of the brokenRepresentationsLock event
  • types: Add ITrackUpdateEventPayload public type to define the type sent as a payload of the trackUpdate event
  • types: Add ILockedVideoRepresentationsSettings public type to define the object that should be given to the new lockVideoRepresentation method
  • types: Add ILockedAudioRepresentationsSettings public type to define the object that should be given to the new lockAudioRepresentation method
  • types: Add IAudioTrackSetting public type to define the object that may be given to the setAudioTrack method
  • types: Add IVideoTrackSetting public type to define the object that may be given to the setVideoTrack method
  • types: Add ITextTrackSetting public type to define the object that may be given to the setTextTrack method

Bug fixes

Other improvements

@peaBerberian peaBerberian merged commit 34d2a0a into misc/worker.v4.0.0 Jan 24, 2024
4 checks passed
@peaBerberian peaBerberian added this to the 4.0.0-rc.1 milestone Feb 5, 2024
@peaBerberian peaBerberian deleted the release/v4.0.0-rc.1 branch February 7, 2024 17:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant