Changelog
🚀 4.12.7 (2023/12/19)
iOS
🐛 Issues
- Fixed an issue where TextTracks are not displayed when entering native picture-in-picture mode.
🚀 4.12.6 (2023/08/22)
iOS
🐛 Issues
- Fixed an issue where native picture-in-picture mode would not be retained after a source change.
🚀 4.12.5 (2023/06/14)
Android
🐛 Issues
- Fixed an issue where the paused state was not always reset.
- Fixed an issue where missing DRM key was not handled correctly.
🚀 4.12.4 (2023/05/24)
Android
✨ Features
- Added support for
playbackUrlParameters
forVerizonMediaSource
.
🐛 Issues
- Fixed an issue where the scheduling multiple Google IMA ads would crash the SDK.
- Fixed an issue where recovering from failed source caching was not possible.
👎 Deprecations
- Deprecate
VerizonMediaSource#getParameters()
in favor ofVerizonMediaSource#getPreplayParameters()
.
iOS
✨ Features
- Added support for
playbackUrlParameters
onVerizonMediaSource
.
💥 Breaking Changes
- Bumped Xcode minimum support version to 13.2.1 and Swift version to 5.5.
tvOS
💥 Breaking Changes
- Bumped Xcode minimum support version to 13.2.1 and Swift version to 5.5.
🚀 4.12.3 (2023/05/03)
Android
🐛 Issues
- Fixed an issue where the cached
SourceDescription
would lose DRM parameters. - Fixed an issue where the existing caching tasks would return incorrect state after app restart.
🚀 4.12.2 (2023/04/25)
Android
🐛 Issues
- Fixed an issue where the cached
SourceDescription
would lose some metadata. - Fixed an issue where the existing caching tasks would return incorrect state.
- Fixed an issue where caching would fail when the app is obfuscated.
🚀 4.12.1 (2023/04/20)
iOS
🐛 Issues
- Fixed an issue where the initial cast state was wrong while using
CastStrategy.auto
.
🚀 4.12.0 (2023/04/03)
General
⚡ Improvements
- Cancel all previous downloads on a source change for HESP streams.
🐛 Issues
- Fixed an issue where setting preload to
metadata
would not start preloading the metadata for HLS streams. - Fixed an issue where the
loadstart
event would not be dispatched for HLS streams. - Fixed an issue where the player could stall on slightly malformed HLS streams that have a different
NAME
attribute for default renditions across different rendition groups. - Fixed an issue with HLS streams where incorrect/incomplete codec information in the master playlist could cause the player to stall.
- Fixed an issue where the player would sometimes stall indefinitely on HESP streams during startup.
Web
✨ Features
- Store bandwidth estimations to improve quality selection on startup for HESP streams.
🐛 Issues
- Fixed an issue where the player would hang some time on bandwidth drop for HESP streams on iOS Safari.
- Eliminated flickering on mobile Chrome when using VR through WebXR.
- Fixed an issue when changing text tracks in native fullscreen, the changes weren't applied when going back to the inline player.
Android
✨ Features
- Added an overload to
MediaTrack.setTargetQualities()
that accepts aList<Quality>
instead of aQualityList
.
⚡ Improvements
- Improved
TARGETQUALITYCHANGEDEVENT
event type inAudioTrackEventTypes
andVideoTrackEventTypes
.
Unified Android
🐛 Issues
- Fixed an issue where binary data contained in a cue of a metadata track would not be part of the
TextTrackCue
content property.
iOS
✨ Features
- Exposed
ownerIdentifier
anddata
fields from ID3 private frames on the TextTrackCue'scontent
property.
⚡ Improvements
- Added
CachingParameters().init()
constructor
🐛 Issues
- Fixed an issue where caching flow was not started if a rendition has Content Protection parameter specified.
- Fixed an issue where initializing THEOplayerConfiguration without parameters would cause a crash.
tvOS
🐛 Issues
- Fixed an issue where initializing THEOplayerConfiguration without parameters would cause a crash.
🚀 4.11.0 (2023/03/17)
General
🐛 Issues
- Fixed an issue where the player would not store the bandwidth estimations in cache when playing HLS streams.
Web
💥 Breaking Changes
- Updated the default VR direction so that looking forward corresponds to a
yaw
value of0
instead of-180
.
✨ Features
- Add the possibility to configure the desired timescale to which it might need to shift to for DASH streams.
⚡ Improvements
- Improve battery and network consumption of playback of HESP streams by pausing the player when it is hidden.
- Improved VR rendering performance on Firefox.
🐛 Issues
- Fixed an issue where sometimes the audio would freeze after switching qualities when playing HESP on iOS Safari.
- Fixed an issue where audio and video would sometimes lose synchronization when playing an HESP stream on iOS Safari.
Unified Android
🐛 Issues
- Fixed an issue where repetitive source setting would cause memory buildup.
- Fixed an issue where the playback of the content would not start in case of an empty VAST.
🚀 4.10.0 (2023/03/06)
General
🐛 Issues
- Fixed an issue where the player would often overestimate the available download bandwidth when playing an HLS stream.
- Fixed an issue where the
useCredentials
andcrossOrigin
configuration flags were not respected for HLS streams.
Web
🐛 Issues
- Fixed an issue where the latency on HESP streams increases when switching between qualities on iOS Safari.
- Fixed an issue where default text tracks were not automatically enabled on iOS Safari.
- Fixed an issue where a player with muted autoplay would unintentionally pause any background music in iOS Safari.
- Fixed an issue where the player could become unresponsive after a source change when the license is invalid.
- Fixed an issue where the player would rarely error when loading an MP4 segment of a HLS stream.
Android
🐛 Issues
- Fixed an issue where the player did not reflect the correct chromecast state.
Unified Android
✨ Features
- Introduced
THEOplayerGlobal.getPlaybackSettings()
to control and optimize playback behaviour (experimental)
🐛 Issues
- Fixed an issue where mid-roll ads were not visible on low-end devices.
- Fixed an issue where the startup time would be too long when switching sources.
iOS
🐛 Issues
- Fixed an issue where closing the native picture-in-picture window would instead restore the previous presentation mode.
- Fixed compatibility issues of fullscreen orientation coupling on iOS 16.
- Fixed an issue where showing a subtitle/caption textTrack would disable an active metadata track.
- Fixed an issue where the player was stuck in a muted state after muting during an IMA ad playout.
tvOS
💥 Breaking Changes
- Stop support for tvOS 11. The minimum supported version is now 12.0.
✨ Features
- Bump GoogleInteractiveMediaAds tvOS framework version to 4.8.2.
🚀 4.9.1 (2023/02/21)
iOS
🐛 Issues
- Fixed an issue where THEOplayer did not load on iOS 16.4
🚀 4.9.0 (2023/02/17)
General
🐛 Issues
- Fixed an issue where playback would sometimes stall after a non-seamless period transition on Tizen 2.
Web
💥 Breaking Changes
- Removed HESP feature flag from all published npm builds except
@theoplayer/basic-hesp
. - Playback of HESP streams now requires a player license with the
hesp
feature enabled. Contact THEOplayer support if you require thehesp
feature on your license.
🐛 Issues
- Fixed a potential memory leak due to repeated DRM license creation on WebOS 2016/2017 models.
- Fixed an issue where setting
player.currentTime
on iOS before playback has started wouldn't execute the seek. - Fixed an issue where a
<Tracking event="progress">
inside a VAST advertisement could be triggered too soon. - Fixed an issue where the
playing
event would be dispatched twice during native playback. - Fixed an issue where a quality switch would cause a desync between audio and video for HESP streams on iOS Safari.
- Fixed an issue where CEA608 cues would be kept in memory indefinite, causing issues when playing very long VODs on memory constrained devices.
Android
🐛 Issues
- Fixed an issue where an unhandled NullPointerException could cause application crash while loading ads.
Unified Android
✨ Features
- Added support for background audio playback of progressive media (mp4, mp3. avi...)
🐛 Issues
- Fixed an issue where audio on some DRM protected streams would not play correctly.
- Fixed an issue where process termination during Fullscreen was crashing the app.
- Fixed an issue where some HEVC streams were failing to play.
iOS
💥 Breaking Changes
- Stop support for iOS 11. The minimum supported version is now 12.0.
- The 3.18.4 version of the IMA SDK framework does not support bitcode. As a result, the THEOplayer iOS SDK also drops support for bitcode when compiled with the IMA or DAI feature flags. Additionally, bitcode support is now deprecated for THEOplayer and will be fully dropped with the next released version. To understand more about this decision, please check the Xcode 14 release notes about bitcode deprecation.
✨ Features
- Added support for wifi-only caching via
CachingParameters.allowsCellularAccess
- Bump GoogleInteractiveMediaAds iOS framework version to 3.18.4.
- Added
enableBackgroundPlayback
property toGoogleIMAAdsConfiguration
API.
🐛 Issues
- Added compatibility support of custom in-app picture-in-picture for iOS 16
tvOS
✨ Features
- Added
enableBackgroundPlayback
property toGoogleIMAAdsConfiguration
API.
🚀 4.8.0 (2023/02/03)
General
🐛 Issues
- Fixed an issue where badly provisioned SSAI streams potentially cause stalls on old webOS devices.
- Fixed an issue where the player would error when switching between two different codecs.
- Fixed an issue where the player would not consider the screen resolution of the smartTV when selecting the optimal quality for HLS streams.
Web
⚡ Improvements
- Improved timing of the MediaTailor tracking events.
🐛 Issues
- Fixed an issue where we didn't dispatch ad events for MediaTailor ads.
- Fixed an issue so that playing a stream with only 1 video quality will only show 'Automatic' in the quality selection menu.
- Fixed the position of the linear ad clickthrough and countdown when using the chromeless player.
Unified Android
✨ Features
- Added support for MPEG audio.
🐛 Issues
- Avoid dispatching
SourceChangeEvent
when casting starts. - Fixed an issue where some HLS streams did not start playback.
- Fixed an issue where when going in or out of FullScreen would not dispatch events.
- Fixed an issue where when a Track change event is received, the track wouldn't contain the changes.
- Fixed an issue where PlayerEvents were not triggered during Google IMA ad playback.
- Fixed stalling on start of HESP streams
- Fixed an issue where playback of DRM protected streams would reveal visual artefacts on some Samsung phones.
iOS
✨ Features
- Added viewController & viewControllerClass APIs to the Fullscreen API. The FullscreenViewController is now public and open to subclass.
- Added a builder type to create GoogleIMAAdsConfiguration instances.
🐛 Issues
- Fixed an issue where the puased state of the player would sometimes be incorrect when calling play() immediately after setting a source.
👎 Deprecations
- Deprecated GoogleIMAAdsConfiguration.init in favor of GoogleIMAConfigurationBuilder
- Deprecated setters on GoogleIMAConfiguration
tvOS
✨ Features
- Added Fullscreen API.
- Added a builder type to create GoogleIMAAdsConfiguration instances.
🐛 Issues
- Fixed an issue that would prevent DRM playback on a player after another player was destroyed.
👎 Deprecations
- Deprecated GoogleIMAAdsConfiguration.init in favor of GoogleIMAConfigurationBuilder
- Deprecated setters on GoogleIMAConfiguration
🚀 4.7.0 (2023/01/20)
General
🐛 Issues
- Fixed an issue where the ABR would not take the player's size into account to decide the optimal quality for HLS streams.
Web
✨ Features
- Added support for the HLS
#EXT-X-START
tag. Note that thePRECISE
attribute is currently ignored: the player always treats the tag as ifPRECISE=YES
was set.
🐛 Issues
- Fixed an issue where the screen becomes black when destroying the player when in full window mode on iOS Safari.
- Fixed an issue where the player would sometimes hang when setting the target latency for HESP streams on iOS Safari.
Unified Android
✨ Features
- Added support for background playback of DASH/HLS audio/video streams.
🐛 Issues
- Fixed an issue where on play-out of DASH streams the player would sometimes continue to download media data after the player was destroyed.
- Fixed an issue where text track cues containing bitmaps would appear stretched or squashed in fullscreen mode.
- Fixed an issue where the positioning of TTML text track cues would sometimes be wrong.
iOS
🐛 Issues
- Fixed an issue where the player's initial paused state was toggled to unpaused, when adding the GoogleIMAIntegration during player setup
🚀 4.6.0 (2023/01/09)
General
🐛 Issues
- Fixed an issue where only audio or video HESP streams would not play.
Web
✨ Features
- Added the possibility to set the label for HLS qualities.
⚡ Improvements
- Added improvements for latency on iOS Safari.
- Improved HLS ABR to not switch to the lowest bandwidth if playback hasn't started yet.
- Reduced amount of memory consumed by the player for HESP streams on iOS Safari.
🐛 Issues
- Fixed an issue with the Google IMA integration where
player.ads.currentAdBreak.ads.length
would sometimes not be updated fast enough during playback of the first ad. - Fixed an issue where FairPlay could use an incorrect assetId.
- Fixed an issue where some HLS variant streams were falsely filtered out on their codecs.
- Fixed an issue where seeking backwards on Tizen 2.4 devices could result in an indefinite stall.
- Fixed an issue where DASH playback would stall on Tizen 2 at period transitions due to overlapping segments.
- Fixed an issue where the
totalBytesLoaded
andcurrentBandwidthEstimate
metrics did not update for HLS streams. - Fixed an issue where a Google DAI DASH live streams did not dispatch ad events.
- Fixed an issue where multi-period DASH streams could wrongfully filter out eventstream cues of the next period.
- Fixed an issue where sometimes the player would do an incorrect seek on Tizen or WebOS 4.X or lower.
- Fixed an issue where a view that is re-enabled would always be paused.
Unified Android
🐛 Issues
- Fixed an issue where the source description of an asset was not correctly passed to a Chromecast receiver.
- Fixed an issue where video artifacts would appear on initial playback of a CMAF stream.
- Fixed an issue where
isPaused
would disregard the state of different Integrations. - Fixed an issue where a TTML text track with cues that contain images would not be rendered correctly.
iOS
🐛 Issues
- Fixed an issue where DRM protected streams, using a custom DRM connector, would not play after switching sources
🚀 4.5.1 (2022/12/16)
iOS
✨ Features
- Provide DAI configuration APIs to enable background mode.
tvOS
🐛 Issues
- Fixed an issue where IMA ads would not play on tvOS.
🚀 4.5.0 (2022/12/09)
General
✨ Features
- Added a new use-case 'same-drm-only' for 'useSeamlessPeriodSwitch' configuration on DASH to allow seamless period switches only between 2 drm or 2 non-drm periods.
⚡ Improvements
- Made the ability to set the maximum bitrate for Google IMA ads visible in the documentation.
🐛 Issues
- Fixed an issue where the player could sometimes crash with an "attempted to download an incomplete segment" error while playing an LL-HLS livestream.
- Fixed an issue on Tizen 2 for use-cases where stalls or video looping could occur.
- Fixed an issue where HESP streams with mediaTimeOffset would not work.
- Fixed an issue with unwanted seeks due to the stall checker starting too soon.
Web
✨ Features
- Added the ability to configure omidAccessModeRules for Google DAI.
🐛 Issues
- Fixed an issue where WebVTT subtitle renditions were not always correctly synchronized when playing an HLS livestream.
- Fixed an issue with the Google IMA integration where no ads could be scheduled after displaying a non-linear ad.
- Fixed a regression on Internet Explorer 11 where the control bar appeared at the top (instead of at the bottom) of the player.
- Fixed a regression on Internet Explorer 11 where HLS streams could not be loaded.
- Fixed an issue where IMA preroll ads were skipped on iOS web when unmuted autoplay was used.
- Fixed an issue that caused the following warning in the developer console in Chrome on Android: "Ignored attempt to cancel a touchend event with cancelable=false".
- Fixed an issue that caused a deprecation warning about
Event.path
in the developer console in Chrome. - Fixed an issue where setting the currentTime before the player has loaded didn't result in a seek once playback started for an HLS source.
- Fixed an issue where some LL-HLS variant streams were falsely filtered out on their codecs.
Android
👎 Deprecations
- Deprecated
AdsConfiguration#googleImaConfiguration()
in favor ofAdsConfiguration#googleIma()
. - Deprecated
Builder#googleImaConfiguration()
in favor ofBuilder#googleIma()
.
Unified Android
🐛 Issues
- Fixed an issue where the optional callback method would not be executed on
play
,pause
andsetCurrentTime
methods.
iOS
🐛 Issues
- Fixed an issue where playing any source after a DRM source could fail
👎 Deprecations
- Deprecated
AdsConfiguration.googleImaConfiguration
in favor ofAdsConfiguration.googleIma
.
🚀 4.4.0 (2022/11/25)
General
💥 Breaking Changes
- Removed analytics, nogolive and bufferedchange event from the HESP api.
Web
✨ Features
- Added ability to configure the maximum bitrate for Google IMA ads.
- Added the ability to replace the ad tag parameters for ad requests for Google DAI.
⚡ Improvements
- Improved the LCEVC integration so enhancements are applied frame accurate.
🐛 Issues
- Fixed an issue where the player inadvertently used non-seamless period switches between two clear periods inside a DRM protected MPEG-DASH stream on Tizen 2.4.
- Added a new use-case 'clear-only' for 'useSeamlessPeriodSwitch' configuration on DASH to allow seamless period switches only between non-drm periods.
- Fixed a memory leak in the MPEG-TS transmux worker.
- Fixed an issue on Tizen 5.0 devices where the player was not able to play MPEG-TS HLS streams.
Unified Android
🐛 Issues
- Fixed an issue where the player sometimes took a long time to start playback on certain HLS live streams with low-precision
#EXTINF
durations. - Fixed an issue with Google DAI sources where the snapback position was not cleared between source changes.
iOS
🐛 Issues
- Fixed an issue where the content player paused state after a source change would be incorrect.
tvOS
🐛 Issues
- Fixed an issue where the content player paused state after a source change would be incorrect.
🚀 4.3.1 (2022/11/18)
Web
🐛 Issues
- Fixed an issue that causes a fatal crash during long playback sessions on certain Tizen and WebOS models.
🚀 4.3.0 (2022/11/15)
General
⚡ Improvements
- Improved HESP ABR resulting in less undesired downswitches.
- Improve the latency calculation for HESP streams.
- Improve ABR downswitching for HESP streams on Mac OS.
- Improve ABR quality selection for HESP streams on iOS Safari.
- Improved cache-friendliness of HESP playback by avoiding
now
initialization requests during startup if possible.
🐛 Issues
- Fixed compatibility with HLS streams from AWS IVS.
Web
✨ Features
- Added an experimental implementation for
THEOplayer.MultiViewPlayer
which supports in sync playback with multiple streams. It can be accessed through themultiview
feature flag and using the multiview license. - Added automatic recovery when the player's buffer becomes too full to the new HLS pipeline. See
player.abr.maxBufferLength
for more information.
⚡ Improvements
- Playing an HLS stream with AES-128 full-segment encryption no longer requires the web page to be served over HTTPS. (This removes the limitation that was introduced in version 4.0.0.)
- Removed the 60 seconds limitation on
player.abr.targetBuffer
.
🐛 Issues
- Fixed an issue where the player could stall indefinitely before a discontinuity when playing certain HLS streams on older smart TVs.
- Fixed an issue where the player didn't fall back to an alternative source when the first HLS source contains DRM that is not supported by the platform.
- Fixed an issue where the
useNativePlayback
option was not respected by the new HLS pipeline. - Fixed an issue where the player could freeze when changing sources after playing a FairPlay-protected HLS stream.
- Fixed an issue where the player would refuse to play an fMP4 segment that contains a
uuid
box with aNULL
character in its extended type. - Fixed an issue with the Google IMA integration where certain ads with percentage based timeOffset would not be scheduled if paired with a pre-roll.
- Fixed an issue with the Google IMA integration where the player would be stuck on a black screen after the viewer skips an ad.
Android
✨ Features
- Added
fullscreenOrientation
flag to THEOplayerSettings to specify which orientation the player will take when in fullscreen.
👎 Deprecations
- Deprecated
PiPManager#enterPiP()
in favor ofPiPManager#enterPiP(PiPType)
. - Deprecated the behavior that using the
fullscreenOrientationCoupling
will also have an influence on the orientation, when entering fullscreen. Please make use of thefullscreenOrientation
instead to specify this behavior.
Unified Android
✨ Features
- Add support for Google DAI integration.
- Add support for Picture in Picture mode.
- Introduced the handling of the violations (gaps) of media streams continuity for Android native media buffers
🐛 Issues
- Fixed an issue where ad-related events would not be dispatched for MediaTailor sources.
- Fixed an issue where play-back of a DASH stream would sometimes fail on parsing MP4 boxes.
- Fixed an issue where removing tracks after switching sources would crash the player.
- Fixed an issue where play-out of DRM protected streams would fail on Huawei devices.
- Fixed an issue where the player would sometimes crash when casting a source using join strategy
auto
. - Fixed MEDIA-LOAD-ERROR on some HLS streams.
- Fixed an issue where subtitle cues would not be updated during play-out.
- Fixed no playing event for only audio streams.
- Fixed an issue where a player configured without a THEOplayer license would not be able to play sources from the white-listed
theoplayer.com
domain.
👎 Deprecations
- Deprecated
IntegrationType#ADS
in favor of specific integration types.
iOS
✨ Features
- The Ads API now exposes a method that returns the scheduled Adbreaks when playing a Google DAI stream
- Added methods to the public player.ads.dai API to control whether the snapBack feature is enabled on Google DAI streams
- Added a public disableUI property to the GoogleIMAConfiguration to toggle the ad UI on non TrueView DAI ads
⚡ Improvements
- Added documentation on how to use a MediaTailorSource
🐛 Issues
- Fixed an issue where casting was not started when using the default Google Cast button
- Fixed an issue where the player got into an infinite loading loop after disconnecting from Chromecast
tvOS
⚡ Improvements
- Added documentation on how to use a MediaTailorSource
🚀 4.2.0 (2022/10/21)
General
🐛 Issues
- Fixed various issues where the new HLS pipeline could lose synchronization when switching between variant streams, which would lead to wrong segments being downloaded or the player stalling indefinitely.
- Fixed an issue where the "Playing on Chromecast" overlay did not always show the Chromecast receiver's name.
- Fixed an issue where the HLS player could crash on certain MPEG-TS segments containing MP3 audio.
- Fixed an issue where the player could sometimes crash when seeking to live on an HLS live stream with a very short sliding window.
Web
✨ Features
- Added a new optional experimental property needsTimescaleShifting to the SourceDescription API to allow an override for the timescale shifting feature that is by default only enabled for Tizen 2.x.
- Added the ability to set subtitle rendering margins using the
player.textTrackStyle
API. This is useful when using a custom UI so there is no overlap between the UI and the rendered subtitles. - Added support for
license-renewal
messages from the CDM when playing a DRM protected stream.
⚡ Improvements
- Updated documentation to indicate that ABRConfiguration is readonly.
- Removed top and bottom margins so that subtitles can be rendered anywhere on top of the player.
- The default player UI will now push subtitles out of the way when it is visible, instead of having a fixed 10% top and bottom margin.
- Made several improvements to MPEG-DASH playback on platforms with limited performance (such as Smart TVs).
🐛 Issues
- Fixed an issue where sometimes the ad is shown below the player after switching tabs on iOS and iPad devices.
- Fixed an issue where playback for HESP streams on iOS Safari 16 would not start.
- Fixed an issue where during play-out of a DASH stream on an EOS stb the first frames would sometimes loop a few times.
- Fixed an issue during Google DAI playback that could result in mismatched click-through URLs when given multiple Google DAI sources.
- Fixed an issue where sometimes the webworker would not load when using the LL-HLS pipeline.
Android
💥 Breaking Changes
- Align Google IMA SDK version used on all Android SDK platforms to 3.25.1.
🐛 Issues
- Fix an issue where the audio of an IMA advertisement could be heard after the player was destroyed.
- Fixed an issue where the state of the player would not be retained when switching to background/foreground whilst playing an Google IMA ad.
Unified Android
✨ Features
- Added
Player#setRenderingTarget(RenderingTarget)
API to switch between SurfaceView and TextureView.
🐛 Issues
- Fixed an issue where playback of a DASH stream would sometimes fail on parsing MP4 boxes.
iOS
🐛 Issues
- Fixed an issue where setting the nativePictureInPicture configuration would introduce unwanted behavior.
- Fixed an issue where the timeOffset and maxDuration values were -1 in the ad data returned by an adEvent.
- Fixed an issues where Ad properties on AdEvents were not properly populated while playing a Google DAI stream.
🚀 4.1.1 (2022/10/14)
Web
🐛 Issues
- Fixed an issue where sometimes the webworker would not load when using the LL-HLS pipeline.
iOS
⚡ Improvements
- Added an identifier to distinguish VerizonMediaAdBreaks.
🚀 4.1.0 (2022/09/26)
General
✨ Features
- Added support for Playlist Delta Updates in low-latency HLS.
🐛 Issues
- Fixed an issue where CEA-608 closed captions were not correctly detected after loading a second HLS stream into the player.
- Fixed an issue where the player would fail to play audio when setting the player's source directly to an HLS media playlist (without an HLS master playlist).
- Fixed an issue where the player could fail to start playback when the variant streams in the HLS master playlist do not have a
CODECS
attribute.
Web
✨ Features
- Added the ability to modify the source URL returned by the Google DAI library before starting playback.
- Added an optional 'deviceID' property to AgamaPlayerConfiguration which if present will be used instead of the internally generated one.
🐛 Issues
- Fixed an issue where the player would error when parsing an MPEG-TS file that contained no data in the new HLS pipeline.
- Fixed an issue where the THEO ad integration would play all previously skipped ads in the post-roll ad break.
- Fixed an issue where attempting to play an HLS stream with MPEG-TS segments on WebOS 4.0 would crash the web page.
- Fixed an issue where WebVTT cues with a line position as a percentage could appear cut off.
- Fixed an issue on webOS 4.0 where sometimes a subtitle cue would remain on screen indefinitely.
Android
💥 Breaking Changes
- Removed deprecated
Player#requestMetrics(RequestCallback)
.
✨ Features
- Added a flag in
THEOplayerGlobal#getSDKType()
API that returns the SDKType in use.
🐛 Issues
- Fixed an issue where play-out of a DRM protected stream would sometimes crash the player after switching sources multiple times.
Unified Android
💥 Breaking Changes
HespApi.EventListener#onAnalytic()
now passes a jsonValue parameter of typeString
instead of typeJSONObject
. The parameter contains a stringified json object.- Removed deprecated
Player#requestMetrics(RequestCallback)
.
✨ Features
- Decreased the memory footprint for MPEG TS content playback.
- Added a flag in
THEOplayerGlobal#getSDKType()
API that returns the SDKType in use.
🐛 Issues
- Fixed an issue where enabling an audio or video track when playing a non-streamable media asset would sometimes crash the player.
- Fixed an issue where the player reset the non-streaming sources while switching in/out of fullscreen.
- Fixed an issue where
play
andplaying
events were not consistently dispatched during play-out of non-streaming media files. - Fixed an issue where playback would sometimes not start for HLS streams containing MPEG-TS segments that do not have an I-frame at start.
- Fixed an issue that would crash the player when attaching a listener to the Hesp API.
- Fixed an issue where ad details would not be passed when dispatching IMA ad events.
- Fixed an issue where a source with multiple IMA ads, which are scheduled on the same timeOffset, would only retain the last ad.
iOS
✨ Features
- Expose Google DAI functions on THEOplayer/ads/dai to convert points in time between timelines including and excluding ads:
func contentTime(from streamTime: Double) -> Double
andfunc streamTime(from contentTime: Double) -> Double
.
🐛 Issues
- Fixed a bug that causes high CPU usages when playing videos with subtitles for more than 30 minutes.
🚀 4.0.0 (2022/08/31)
Officially announcing THEOplayer 4.0
Introducing a major version bump to THEOplayer 4.0. This version officially releases all the improvements and developments THEOplayer has achieved since version 3.0. THEOplayer 4.0 is backwards compatible for most features but includes some breaking changes per SDK. Please review them carefully in the respective changelog for your SDK.
-
Android SDK 4.0: We’ve added support for MPEG-TS, progressive MP4, casting and CSAI to our new high-performing Android pipeline.
-
LCEVC support: You can now play back LCEVC-enabled streams to deliver a richer viewer experience or to achieve bandwidth savings.
-
AWS MediaTailor: Leverage the AWS MediaTailor integration and easily track your client-side events cross-platform to discover how viewers interact with your ads.
-
New HLS pipeline: We’ve combined both HLS and LL-HLS features in our new HLS pipeline and additionally increased performance and stability on smart TVs and older devices.
-
React Native SDK: MP4 playback is available, thumbnail support has been added to the React Native sample app on Github and we’ve updated our documentation to make sure you can easily get started!
General
💥 Breaking Changes
- The new HLS pipeline is now enabled by default. Formerly known as "the LL-HLS pipeline", this pipeline adds support for low-latency HLS streaming, with full support for Widevine, PlayReady and FairPlay DRM. (If you prefer to stay on the old pipeline for now and migrate later, you can enable the
hls-legacy
feature flag on your SDK and setsource.hls.useLegacy
totrue
when configuring your source.) - ID3 cues now have their
startTime
set to the dispatch time, and theirendTime
set to the dispatch time of the next ID3 tag. Previously, theirendTime
was equal to the dispatch time and theirstartTime
was always 0, which renderedTextTrack.activeCues
useless. Users who want to observe ID3 cue activations should now use theenter
event (instead of theexit
event), or alternatively use thecuechange
event on the containing text track.
🐛 Issues
- Fixed an issue where the player would stall during live DASH playback that contained DRM when the entire availability window suddenly contained no DRM.
- Fixed an issue with AES-128 decryption using the new LL-HLS pipeline where the player would incorrectly parse the initialization vector.
Web
💥 Breaking Changes and known limitations
- Removed the deprecated DRM processor APIs, i.e.:
KeySystemConfiguration.certificateRequestProcessor
,.certificateResponseProcessor
,.licenseRequestProcessor
and.licenseResponseProcessor
. Use the Content Protection Integration API instead: https://docs.theoplayer.com/api-reference/web/theoplayer.registercontentprotectionintegration.md - The new HLS pipeline requires the HLS master playlist to correctly list all used audio and video codecs in the CODECS attribute of the #EXT-X-STREAM-INF tags. Otherwise, the player may fail to start playback or fail to play the audio or video track. Notably, when setting the source directly to an HLS media playlist (without a master playlist), the player may fail to play the audio track.
- Playing an HLS stream with AES-128 full-segment encryption requires the web page to be served over HTTPS.
- The new HLS pipeline performs soft quality switches, meaning that it plays the current buffer out before showing the quality switch (as opposed to rebuilding the buffer in the new quality).
✨ Features
- Added automatic recovery when the player's buffer becomes too full. When the player fails to buffer the next segment because there's no more room in its buffer, it will now wait until the playhead has advanced further before retrying this segment. See
player.abr.maxBufferLength
for more information. This is currently only supported for MPEG-DASH streams. - Added support for loading cached streams in the LL-HLS pipeline using the Cache API.
- Allow changing the UI language dynamically with
player.ui.language(languageCode)
. - Added support for clickthroughs in Verizon Media Ads.
- Added support for default classes in WebVTT. Tags such as
<c.yellow>
now receive a default color according to https://www.w3.org/TR/webvtt1/#default-classes. - Added basic support for MP3 audio in the new HLS pipeline.
🐛 Issues
- Fixed an issue where certain nested
<div>
elements inside a TTML subtitle were not rendered. - Fixed an issue which caused the player to be stuck in an infinite loop on the end of a discontinuity with our legacy HLS pipeline.
- Fixed an issue where
<p>
tags in TTML subtitles did not correctly inherit thetts:textAlign
property from their parent region's style. - Fixed an issue where FairPlay streams would still use the new HLS pipeline instead of native playback on Safari.
- Fixed an issue where the browser could run out of memory over time while playing an HLS stream with high-resolution MPEG-TS segments in the new HLS pipeline.
Android
💥 Breaking Changes
- Removed deprecated THEOplayerConfig constructor in favor of
THEOplayerConfig.Builder
. - Removed deprecated
THEOplayerConfig#allowMixedContent(boolean)
. - Removed deprecated
THEOplayerConfig.Builder#googleIma(boolean)
in favor ofAdsConfiguration#googleImaConfiguration()
. - Removed deprecated
MediaTrack#setTargetQualities(List<Q> qualities)
in favor ofMediaTrack#setTargetQualities(QualityList)
. - Removed deprecated TextTrackDescription constructor in favor of
TextTrackDescription#Builder()
. - Removed deprecated SourceDescription constructors in favor of
SourceDescription#Builder()
. - Removed deprecated TypedSource constructors in favor of
TypedSource#Builder()
. - Removed deprecated TypedSource.Builder#setExperimentalRenderingEnabled(boolean) in favor of
TypedSource.Builder#setNativeRenderingEnabled(boolean)
. - Removed deprecated TypedSource#isExperimentalRenderingEnabled(boolean) in favor of
TypedSource#isNativeRenderingEnabled(boolean)
. - Removed deprecated
GoogleDaiConfiguration.Builder#sourceType(SourceType)
andGoogleDaiConfiguration#getSourceType()
in favor ofTypedSource.Builder#type(SourceType)
andTypedSource#getType()
respectively. - Removed deprecated DRM Configuration constructors in favor of respective Builder.
- Removed deprecated
ErrorEvent#getError()
in favor ofErrorEvent#getErrorObject()
. - Removed deprecated
ContentProtectionErrorEvent
methods. - Removed deprecated CachingParameters constructor in favor of
CachingParameters.Builder
. - Removed deprecated
Chromecast#setSource(SourceDescription)
in favor ofChromecast#setConnectionCallback(ChromecastConnectionCallback)
. - Removed deprecated
FullScreenManager#setAspectRatio(AspectRatio)
in favor ofPlayer#setAspectRatio(AspectRatio)
. - Removed deprecated
com.theoplayer.android.api.fullscreen.AspectRatio
enum in favor ofcom.theoplayer.android.api.player.AspectRatio
. - Removed deprecated SpotXAdDescription fields in favor of SpotXDataQueryParameter.
- Stopped providing THEOplayer Android MinApi16 SDK.
- Bumped minimum supported version to Android 5.0 (API level 21).
✨ Features
- Exposed
traffickingParameters
in GoogleImaAd. - Expose
streamTimeForContentTime
andcontentTimeForStreamTime
for Google DAI.
👎 Deprecations
- Deprecated static
AgamaPlayerConfiguration.Builder#agamaPlayerConfiguration(String)
constructors in favor ofAgamaPlayerConfiguration.Builder(String)
. - Deprecated static
AgamaSourceConfiguration.Builder#agamaSourceConfiguration(String, StreamType)
constructors in favor ofAgamaSourceConfiguration.Builder(String, StreamType)
. - Deprecated public YouboraOptions(String) constructor in favor of
YouboraOptions.Builder(String)
. - Deprecated static
YouboraOptions.Builder#youboraOptions()
constructors in favor ofYouboraOptions.Builder(String)
. - Deprecated public
YouboraOptions.Builder()
constructor in favor ofYouboraOptions.Builder(String)
. - Deprecated static
YouboraOptions.Builder#youboraOptions(String)
constructors in favor ofYouboraOptions.Builder(String)
. - Deprecated static
ChromecastMetadataDescription.Builder#chromecastMetadata()
constructor in favor ofChromecastMetadataDescription.Builder()
. - Deprecated static
GoogleDaiTypedSource.Builder#daiTypedSource(GoogleDaiConfiguration)
constructor in favor ofGoogleDaiTypedSource.Builder(GoogleDaiConfiguration)
. - Deprecated static
AbrStrategyConfiguration.Builder#abrStrategyConfiguration()
constructor in favor ofAbrStrategyConfiguration.Builder()
. - Deprecated static
AbrStrategyMetadata.Builder#abrStrategyMetadata()
constructor in favor ofAbrStrategyMetadata.Builder()
. - Deprecated static
DRMTodayConfiguration.Builder#drmToday(String)
constructor in favor ofDRMTodayConfiguration.Builder(String)
. - Deprecated static
DRMTodayConfiguration.Builder#drmToday(KeySystemConfiguration)
constructor in favor ofDRMTodayConfiguration.Builder(KeySystemConfiguration)
. - Deprecated static
IrdetoConfiguration.Builder#irdeto(String)
constructor in favor ofIrdetoConfiguration.irdeto(String)
. - Deprecated static
IrdetoConfiguration.Builder#irdeto(KeySystemConfiguration)
constructor in favor ofIrdetoConfiguration.Builder(KeySystemConfiguration)
. - Deprecated static
KeyOSDRMConfiguration.Builder#keyOsDrm()
constructor in favor ofKeyOSDRMConfiguration.Builder()
. - Deprecated static
KeyOSKeySystemConfiguration.Builder#keyOsKeySystemConfiguration(String)
constructor in favor ofKeyOSKeySystemConfiguration.Builder(String)
. - Deprecated static
TitaniumDRMConfiguration.Builder#titaniumDrm(String, String, String)
constructor in favor ofTitaniumDRMConfiguration.Builder(String, String, String)
. - Deprecated static
VudrmDRMConfiguration.Builder#vudrmDrm(String)
constructor in favor ofVudrmDRMConfiguration.Builder(String)
. - Deprecated static
ClearkeyKeySystemConfiguration.Builder#clearkeyKeySystemConfiguration(String)
constructor in favor ofClearkeyKeySystemConfiguration.Builder(String)
. - Deprecated static
DRMConfiguration.Builder#fairplayDrm(FairPlayKeySystemConfiguration)
constructor in favor ofnew DRMConfiguration.Builder().fairplay(FairPlayKeySystemConfiguration)
. - Deprecated static
DRMConfiguration.Builder#playreadyDrm(KeySystemConfiguration)
constructor in favor ofnew DRMConfiguration.Builder().playready(KeySystemConfiguration)
. - Deprecated static
DRMConfiguration.Builder#widevineDrm(KeySystemConfiguration)
constructor in favor ofnew DRMConfiguration.Builder().widevine(KeySystemConfiguration)
. - Deprecated static
DRMConfiguration.Builder#clearkeyDrm(ClearkeyKeySystemConfiguration)
constructor in favor ofnew DRMConfiguration.Builder().clearkey(ClearkeyKeySystemConfiguration)
. - Deprecated static
FairPlayKeySystemConfiguration.Builder#fairPlayKeySystemConfiguration(String, String)
constructor in favor ofFairPlayKeySystemConfiguration.Builder(String, String)
. - Deprecated static
KeySystemConfiguration.Builder#keySystemConfiguration(String)
constructor in favor ofKeySystemConfiguration.Builder(String)
. - Deprecated public KeySystemConfiguration constructors in favor of
KeySystemConfiguration.Builder(String)
. - Deprecated static
YoSpaceDescription.Builder#yoSpaceDescription()
constructor in favor ofYoSpaceDescription.Builder()
. - Deprecated static
YoSpaceLogLevelConfiguration.Builder#yoSpaceLogLevelConfiguration()
constructor in favor ofYoSpaceLogLevelConfiguration.Builder()
. - Deprecated static
TextTrackDescription.Builder#textTrackDescription()
constructor in favor ofTextTrackDescription.Builder(String)
. - Deprecated static
TextTrackDescription.Builder#textTrackDescription(String)
constructor in favor ofTextTrackDescription.Builder(String)
. - Deprecated static
TextTrackDescription.Builder#src(String)
constructor in favor ofTextTrackDescription.Builder(String)
. - Deprecated static
TypedSource.Builder#typedSource()
constructor in favor ofTypedSource.Builder(String)
. - Deprecated static
TypedSource.Builder#typedSource(String)
constructor in favor ofTypedSource.Builder(String)
. - Deprecated
TypedSource.Builder#src(String)
method in favor ofTypedSource.Builder(String)
. - Deprecated static
SourceDescription.Builder#sourceDescription()
constructor in favor ofSourceDescription.Builder(String...)
orSourceDescription.Builder(TypedSource...)
. - Deprecated static
SourceDescription.Builder#sourceDescription(String...)
constructor in favor ofSourceDescription.Builder(String...)
. - Deprecated static
SourceDescription.Builder#sourceDescription(TypedSource...)
constructor in favor ofSourceDescription.Builder(TypedSource...)
. - Deprecated static
SourceDescription.Builder#sourceDescription(VerizonMediaSource...)
constructor in favor ofSourceDescription.Builder(VerizonMediaSource...)
. - Deprecated
SourceDescription.Builder#sources(String...)
method in favor ofSourceDescription.Builder(String...)
. - Deprecated
SourceDescription.Builder#sources(TypedSource...)
method in favor ofSourceDescription.Builder(TypedSource...)
. - Deprecated public THEOplayerAdDescription constructors in favor of
THEOplayerAdDescription.Builder(String)
. - Deprecated static
THEOplayerAdDescription.Builder#adDescription()
constructor in favor ofTHEOplayerAdDescription.Builder(String)
. - Deprecated static
THEOplayerAdDescription.Builder#adDescription(String)
constructor in favor ofTHEOplayerAdDescription.Builder(String)
. - Deprecated
THEOplayerAdDescription.Builder#source(String)
method in favor ofTHEOplayerAdDescription.Builder(String)
. - Deprecated public GoogleImaAdDescription constructors in favor of
GoogleImaAdDescription.Builder(String)
. - Deprecated static
GoogleImaAdDescription.Builder#googleImaAdDescription()
constructor in favor ofGoogleImaAdDescription.Builder(String)
. - Deprecated static
GoogleImaAdDescription.Builder#googleImaAdDescription(String)
constructor in favor ofGoogleImaAdDescription.Builder(String)
. - Deprecated
GoogleImaAdDescription.Builder#source(String)
method in favor ofGoogleImaAdDescription.Builder(String)
. - Deprecated static
SpotXAdDescription.Builder#spotxAdDescription()
constructor in favor ofSpotXAdDescription.Builder(String)
. - Deprecated static
SpotXAdDescription.Builder#spotxAdDescription(String)
constructor in favor ofSpotXAdDescription.Builder(String)
. - Deprecated static
SpotXAdDescription.Builder#spotxAdDescription(SpotXAdDescription)
constructor in favor ofSpotXAdDescription.Builder(SpotXAdDescription)
. - Deprecated
SpotXAdDescription.Builder#id(String)
method in favor ofSpotXAdDescription.Builder(String)
. - Deprecated public
SpotXAdDescription.Builder()
constructor in favor ofSpotXAdDescription.Builder(String)
. - Deprecated static
SpotXAdDescription.SpotXDataQueryParameter#spotxDataQueryParameters()
constructor in favor ofSpotXAdDescription.SpotXDataQueryParameter.Builder()
. - Deprecated static
SpotXAdDescription.SpotXDataQueryParameter#spotxDataQueryParameters(SpotXDataQueryParameter)
constructor in favor ofSpotXAdDescription.SpotXDataQueryParameter.Builder(SpotXDataQueryParameter)
. - Deprecated static
SpotXAdDescription.SpotXData#spotxData()
constructor in favor ofSpotXAdDescription.SpotXData.Builder()
. - Deprecated static
SpotXAdDescription.SpotXData#spotxData(SpotXData)
constructor in favor ofSpotXAdDescription.SpotXData.Builder(SpotXData)
.
Unified Android
💥 Breaking Changes
- Bumped minimum supported version to Android 5.0 (API level 21).
✨ Features
- Added support for MediaTailor sources.
- Added MediaTailor integration with progression tracking functionality.
🐛 Issues
- Fixed the HTTP callback crash on slow phones
- Fixed an issue where the ABR controller would not take into account the player size for HESP streams.
iOS
💥 Breaking Changes
- Removed deprecated
THEOplayerConfiguration
constructors - Removed
Chromecast.source
API in favor ofChromecast.setChromecastConnectionDelegate
- Removed
THEOplayer.unload()
method in favor ofTHEOplayer.destroy()
- Removed deprecated
VRConfiguration
constructors
👎 Deprecations
- Swift 5.3 (XCode 12.4) is deprecated.
- Please start migrating your projects to be compatible with the Swift 5.5 compiler (Xcode 13) or later. Starting from THEOplayerSDK 5.0.0 we will only support Swift 5.5 or higher.
tvOS
🐛 Issues
- Various UI and presentation mode fixes including: better focus when in fullscreen, fixed issues when exiting fullscreen, improved PictureInPicture button animation, and player controls now auto fade out when inactive.
👎 Deprecations
- Swift 5.3 (XCode 12.4) is deprecated.
- Please start migrating your projects to be compatible with the Swift 5.5 compiler (Xcode 13) or later. Starting from THEOplayerSDK 5.0.0 we will only support Swift 5.5 or higher.
🚀 3.7.0 (2022/08/01)
General
✨ Features
- Improved LL-HLS playlist synchronization on live streams when discontinuities are present.
- Support seeking to a program date time in LL-HLS using
player.currentProgramDateTime
.
🐛 Issues
- Fixed an issue where seeking back would result downloading the same segments for a while using the LL-HLS pipeline.
- Fixed a crash in the LL-HLS pipeline when a partial segment does not contain an SPS or PPS NAL.
- Fixed an issue where
#EXT-X-PRELOAD-HINT
tags withBYTERANGE-START
and withoutBYTERANGE-LENGTH
were parsed incorrectly in the LL-HLS pipeline. - Increased timeout on LL-HLS playlist blocking requests to 3*targetDuration.
- Fixed an issue where LL-HLS playlists would not be synced correctly.