From 2ec2a7c0b9f520ead36e02f0eb8f0bcf2e7c44c7 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Wed, 18 Mar 2026 15:36:50 +0100 Subject: [PATCH 01/10] Split THEOplayer changelog by major version --- theoplayer/changelog.md | 10493 ---------------- .../version-v4/changelog.md | 3088 ++++- .../version-v6/changelog.md | 3178 +---- .../version-v7/changelog.md | 7740 ------------ .../version-v8/changelog.md | 8356 +----------- .../version-v9/changelog.md | 9405 +------------- 6 files changed, 3124 insertions(+), 39136 deletions(-) diff --git a/theoplayer/changelog.md b/theoplayer/changelog.md index eace8bc1949f..5ae891478b75 100644 --- a/theoplayer/changelog.md +++ b/theoplayer/changelog.md @@ -1022,10496 +1022,3 @@ For more info on navigating our breaking changes, take a look at our migration g - Added the `getHeaders` method to Network API. - Added protection against race conditions during destruction of the player. - -## ๐Ÿš€ 9.12.1 (2025/09/19) - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would sometimes stall about 10 seconds after stream start on devices with slow appends on certain HLS streams. - -## ๐Ÿš€ 9.12.0 (2025/09/09) - -### Web - -#### โœจ Features - -- Added support for handling backdrop GAM properties for OptiView Ads streams. -- Added Google IMA VAST support to OptiView Ads. -- Added support for ABR strategies and bitrates for OptiView Real-time streams. - -#### ๐Ÿ› Issues - -- Fixed the styling of the L-shape layout when playing an OptiView Ads stream. -- Fixed an issue where the `currentTime` was `NaN` when using the MultiViewPlayer and an undefined `offset`. -- Fixed an issue on Firefox where sometimes the audio and video are desynced at the start of a live stream. -- Fixed an issue for OptiView Ads where an L-shape content ad break would not stop showing when playing a VOD source. -- Fixed an issue where the player would fail to play an HLS stream containing MPEG-TS segments with a non-trivial scaling list in their H.264 SPS. -- Fixed an issue where the player would play a single layout ad in L-shape layout when it previously played in an L-shape content layout for an OptiView ads stream. - -### Android - -#### โœจ Features - -- Added support for loading background images from GAM properties for OptiView Ads. - -#### โšก Improvements - -- Updated the Millicast integration's dependency on the Millicast SDK to version 2.5.0. - -#### ๐Ÿ› Issues - -- Fixed an issue where cancelling one caching task when multiple are downloading and then stopping the app would leave caching progress notifications that could not be dismissed. -- Fixed an issue where quartile events were missing for alternative ad sources in OptiView Ads. -- Fixed an issue where `setTargetQuality` did not work as intended for OptiView Live Streams. -- Fixed an issue where `readyState` was not updated while playing a Google IMA ad. - -### iOS - -#### โœจ Features - -- Added the `DOUBLE` layout for OptiView Ads. -- Added the OptiView Ads API via `player.theoads`. This is API specific to the [OptiView Ads](https://optiview.dolby.com/products/server-guided-ad-insertion) feature that exposes information about playing and scheduled interstitials and allows configuration of THEOads specific properties. -- Added support for handling backdrop GAM properties for OptiView Ads streams. - -#### โšก Improvements - -- Exposed more details on an `ErrorEvent` when the underlying `errorObject` is an `AVPlayerError`. -- Updated the Millicast SDK to v2.5.1 (for iOS & tvOS). - -#### ๐Ÿ› Issues - -- Fixed an issue where sideloaded text tracks would not cache correctly. -- Fixed an issue where fatal errors were not properly dispatched. -- Fixed playback rate not being reflected properly when using the GoogleCastIntegration. -- Fixed an issue where an overlay would not show due to incorrect encoding of query parameters for OptiView Ads. -- Fixed an issue where a fatal error would be dispatched when the app does not support background playback and the player is backgrounded while playing an OptiView Live stream. - -## ๐Ÿš€ 9.11.0 (2025/08/26) - -### Web - -#### โœจ Features - -- Added support for the L-shape content layout for OptiView Ads. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would not be able to play DRM enabled OptiView Live streaming channels that use the V1 API. -- Fixed a regression where `player.duration` incorrectly returned `+Infinity` instead of `NaN` for an HLS stream that has not yet started loading. - -### Android - -#### โœจ Features - -- Added the possibility to schedule OptiView Ads Overlays through SSE. -- Added L-shape content support for OptiView Ads. -- Added `TextTrackDescription.format` to specify the content type of a sideloaded subtitle track in advance. When set, this allows the player to load the subtitle track only when enabled, instead of needing to load all subtitles at startup to detect their content type. - -#### โšก Improvements - -- Updated Media3 to [version 1.8.0](https://github.com/androidx/media/releases/tag/1.8.0). - -#### ๐Ÿ› Issues - -- Fixed an issue where the `play` and `pause` events were missing for an OptiView Ads ad break. -- Fixed an issue where the player would not wait for subtitles to be loaded before initiating playback, which could result in the first few subtitles not being displayed. -- Fixed an out-of-memory crash when playing a large MP4 file on certain low-end devices. -- Fixed an issue where the player would error when a sideloaded subtitle track fails to load. The player will now disable the track instead and continue playing without it. -- Fixed an issue where the player was unnecessarily trying to download images from a thumbnails track. - -### iOS - -#### โœจ Features - -- Added support for the L-shape content layout for OptiView Ads. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player configuration was not passed to the chromecast receiver causing image overlays to not work. -- Fixed an issue where an HLS live stream would not recover after a network offline recovery. - -### tvOS - -#### โšก Improvements - -- Allow the player on Apple TV to choose the higher quality video track with the same resolution when playing OptiView Live streams. - -### Roku - -#### โœจ Features - -- Added sideloading of the HLS master manifest to enable reporting of bitrate, average bitrate, and encoded framerate to Conviva. -- Added support for DPI analytics through the THEOConvivaConnector. - -#### ๐Ÿ› Issues - -- Fixed an issue where an invalid license message would flicker on start up. -- Fixed an issue where postroll ads were not being reported to Conviva. - -## ๐Ÿš€ 9.10.2 (2025/08/20) - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would not switch up to a higher video quality as long as it didn't reach the target latency for OptiView Live streams. - -## ๐Ÿš€ 9.10.1 (2025/08/13) - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the player did not throw an ErrorEvent when it could not fetch the playlist. - -## ๐Ÿš€ 9.10.0 (2025/08/08) - -### Web - -#### โœจ Features - -- Added support for multiple video instances on Sony PlayStationยฎ 5. - -#### โšก Improvements - -- Improved order of events on stream startup for OptiView Live streams. -- Improved the OptiView Ad to content transition to be more consistent while also requiring less bandwidth. - -#### ๐Ÿ› Issues - -- Fixed an issue where WebVTT cue timestamps were not correctly adjusted for 33-bit PES timestamp wraparound when playing an HLS stream with fMP4 audio/video segments. -- Fixed an issue where a short HLS stream containing exactly one segment would stall near the end of the video instead. -- Fixed an issue where a WideVine L1 protected DASH stream would fail to play on Android Fire TV (model AFTMM). -- Fixed an issue where closed captions tracks in an HLS stream were sometimes missing information from their associated `#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS` tag. -- Fixed playback when using OptiView Live Streaming on Tizen 3.0. -- Fixed an issue where the player fatally errors when going offline during a DASH live stream, instead of playing out the remaining buffer and trying to recover first. -- Fixed an issue where starting or ending AirPlay might trigger an unhandled promise rejection in Safari. -- Fixed an issue where the player did not resume buffering after a temporary network disconnection when playing an MPEG-DASH stream. -- Fixed an issue where a stream using OptiView Ads could get stuck after playing an ad break in PiP. -- Fixed an issue where sometimes multiple ad events were dispatched while playing OptiView Ads in PiP. -- Fixed an issue where ad events could be desynced when using OptiView Ads in Picture-in-Picture. - -### Android - -#### โœจ Features - -- Added `KeySystemConfiguration.forceSoftwareDecrypt` in order to force the player to always use Widevine L3. Note that this may prevent the player from switching to a high-definition quality, and should only be used to work around issues on specific devices. -- Added `KeySystemConfiguration.integrationParameters` to allow passing integration-specific parameters to a custom `ContentProtectionIntegration` which are also specific to the selected key system. -- Added `NetworkConfiguration.useHttpEngine` to allow the player to use `android.net.http.HttpEngine` or [Cronet](https://developer.android.com/develop/connectivity/cronet) for its network requests. These more modern network stacks allow the player to use HTTP/3 instead of HTTP/1.1, which can be more efficient. - -#### โšก Improvements - -- Improved error messages from the audio/video decoder. -- Improved order of events on stream startup for OptiView Live streams. - -#### ๐Ÿ› Issues - -- Fixed an edge case where a `TypedSource` without a `type` whose `src` ends with `.m3u8` but also contains the substring `mpd` would incorrectly be detected as MPEG-DASH instead of HLS. We highly recommend always setting an explicit `type` to avoid similar issues with confusing URLs. -- Fixed a crash due to a `ConcurrentModificationException` when playing a DASH livestream containing a thumbnails track. -- Fixed an issue where `CachingTask.bytesCached` would return `0` for caching tasks that were already fully downloaded before the app was started. - -### iOS - -#### โšก Improvements - -- Improved the ABR algorithm of our OptiView Live streams for HESP playback. -- Improved playback stability of OptiView Live streams on iOS 17 and below by using the HLS fallback stream. - -#### ๐Ÿ› Issues - -- Fixed an issue where when setting a new OptiView Live source the previous one would continue playing until `play()` was called. -- Fixed an issue where the `seeking` property would return `false` while the player was seeking in OptiView Live streams. - -### tvOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the `maxMobileBitrate` from a distribution was incorrectly being applied on tvOS for OptiView Live streams. - -### Roku - -#### โœจ Features - -- Added support for protected OptiView Live content using the `player.theoLive.authToken` API. -- Added Conviva reporting of OptiView Live endpoint loading and fallback, along with reporting of the OptiView Live CDN. -- Added the `getHeader` method on the Network API. - -#### ๐Ÿ› Issues - -- Made autofocus behavior reflect the client selected focus so the player doesn't grab focus after the client has removed focus. -- Added session ID to bye call so THEOlive sessions complete properly. - -## ๐Ÿš€ 9.9.0 (2025/07/31) - -### Web - -#### โœจ Features - -- Added the possibility to schedule OptiView Ads Overlays through SSE. -- Added the `authToken` property to the `theoLive` API for JWT auth token configuration. - -#### โšก Improvements - -- Delayed loading of OptiView Live streams until `play` is called. -- Improved stability of OptiView Live streams on Tizen platforms. -- Improved stability of OptiView Live streams on WebOS devices. - -#### ๐Ÿ› Issues - -- Fixed an issue with OptiView Ads where a playback error during an ad break would fully stop playback. -- Fixed an issue where WebVTT default text background colors (e.g. ``) were not working correctly. -- Fixed an issue where WebVTT default text colors and default text background colors were not working when using Open Video UI. -- Fixed an issue where the player would not show the OptiView Ads Overlays anymore when it stopped casting to Chromecast. - -### Android - -#### โœจ Features - -- Added support for `ClearkeyKeySystemConfiguration.keys` in the Media3 pipeline. -- Added `TextTrackStyle.getFont()` and `.setFont(Typeface)`. -- Added the `authToken` property to the `theoLive` API for JWT auth token configuration. -- Implemented clickthrough URL on OptiView Ads Overlays. - -#### โšก Improvements - -- Cues from sideloaded subtitles are no longer eagerly added to their `TextTrack` in the Media3 pipeline, to avoid stalling the player while loading a large subtitle file. Instead, these subtitle cues are now added in a just-in-time fashion. -- Added `SourceType.THEOLIVE` to more easily distinguish between THEOlive sources and plain HESP sources. -- Fixed an issue where sideloaded chapter and metadata tracks were included when `MediaInfo` gets loaded into the player on a Cast Receiver. -- Delayed loading of OptiView Live streams until `play` is called. - -#### ๐Ÿ› Issues - -- Fixed `TextTrackStyle.setFont(fontFile, fontStyle)` not correctly loading the font file. -- Fixed an issue where caching an invalid source crashes the player. - -### iOS - -#### โœจ Features - -- Added the `authToken` property to the `theoLive` API for JWT auth token configuration. -- Added support for image Overlays in OptiView Ads. -- Added `MediaPlaylistInterceptor` protocol for HLS playlist interception and - manipulation. - -#### โšก Improvements - -- Added the `reason` property to `IntentToFallbackEvent` which indicates why the player chose to fall back. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `destroy` event would be dispatched twice. -- Fixed an issue where incorrect query params were sent with the discovery call of OptiView Live stream. - -### Roku - -#### โšก Improvements - -- Delayed loading of OptiView Live streams until `play` is called. - -#### ๐Ÿ› Issues - -- Fixed an issue where source descriptions without the `live` property would fail to play. -- Fixed an issue where the Conviva connector could cause a crash when the `isLive` property was missing from source metadata. - -## ๐Ÿš€ 9.8.2 (2025/07/17) - -### Web - -#### โšก Improvements - -- Improved support for frame metadata extraction with OptiView RealTime streams on older browsers, all the way back to Chrome v87. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would not do the IMA streamRequest on startup when using SSE for an OptiView Ads stream. -- Fixed an issue where the player would always update the ad tag parameters on the StreamManager on every ad break when playing an OptiView Ads stream. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where a stream request happened on every AdBreak for OptiView Ads. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where loading a THEOad could fail, causing a black screen. -- Fixed an issue where the THEOadDescription would not be used when playing an OptiView live stream with ads enabled. - -## ๐Ÿš€ 9.8.1 (2025/07/15) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where OptiView Ads were crashing when the `initializationDelay` parameter was `NaN`. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where ABR would not switch up to higher qualities for THEOlive sources. -- Fixed an issue where the `ActiveQualityChangedEvent` was not dispatched for THEOlive sources. - -### Roku - -#### ๐Ÿ› Issues - -- Fixed an issue where the Conviva connector could cause a crash when the `isLive` property was missing from source metadata. - -## ๐Ÿš€ 9.8.0 (2025/07/12) - -### Web - -#### โœจ Features - -- Added an `initializationDelay` property to `TheoAdDescription` to delay the initialization of OptiView Ads. - -#### โšก Improvements - -- Improved stability of OptiView live streams on VIZIO devices. -- Improved the transition from ads to content when playing an HESP stream in combination with OptiView ads. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would become paused when switching tabs while in native picture-in-picture on Chromium based browsers on OptiView live streams. -- Fixed an issue where Millicast streams with `connectOptions.disableVideo` set to `true` would fail to play. - -### Android - -#### โœจ Features - -- Added an `initializationDelay` property to `TheoAdDescription` to delay the initialization of OptiView Ads. - -#### โšก Improvements - -- Fixed an issue where chapter tracks were not marked as `TextTrackKind.CHAPTERS` in the Media3 pipeline. - -#### ๐Ÿ› Issues - -- Fixed an issue where an `ActiveQualityChangedEvent` would either be sent with a wrong value or not sent at all in a multi-period DASH stream. -- Fixed an issue where waiting events would not be dispatched on OptiView live streams. -- Fixed an issue where using a View-based UI with THEOplayer and playing Millicast stream will cause a crash. -- Expose actual bandwidth of audio qualities for HESP / OptiView live streams. - -### iOS - -#### โœจ Features - -- Added an `initializationDelay` property to `THEOAdDescription` to delay the initialization of OptiView Ads. - -#### ๐Ÿ› Issues - -- Fix issue where network connectivity errors were not forwarded to the NetworkEventTypes.ERROR event listener -- Fixed an issue where id3 metadata tracks would be notified in advance, causing issues i.e. for Google DAI. - -### Chromecast CAF - -#### โœจ Features - -- Added support for VOD assets with THEOads overlay images. - -### Roku - -#### โšก Improvements - -- Added discoveryUrl property to THEOlive config and removed need for a trailing slash on discovery URLs. - -#### ๐Ÿ› Issues - -- Fixed an issue where source descriptions without the `live` property would fail. - -## ๐Ÿš€ 9.7.0 (2025/07/02) - -### General - -#### โœจ Features - -- Added support for OptiView Ads in combination with OptiView Live streaming. - -### Web - -#### โœจ Features - -- Added the ability to play two adbreaks seamlessly after each other for THEOads. -- Added new `DistributionLoadStartEvent`, `EndpointLoadedEvent` and `DistributionOfflineEvent` events to the `theoLive` API as part of OptiView Live API V2 support. -- Added support for MPEG-TS segments with multiple SPS/PPS NALs in the MPEG-TS transmux worker. - -#### โšก Improvements - -- Changed the default amount of retries for OptiView live streams to 3 so that all the recovery mechanisms work without the need to explicitly set a finite value. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player's content is zoomed in when going in fullscreen when playing a THEOads stream. -- Fixed an issue where not all representations are shown for a DASH stream with adaptation set switching. -- Fixed an issue where the player would dispatch events with incorrect `currentTime` when playing a THEOads stream on smartTVs. -- Fixed an issue where the `currentTime` and `currentProgramDateTime` values would be incorrect for a short time after a transition from adbreak to content using THEOads. -- Fixed an issue where switching OptiView live streams with DRM enabled would sometimes fail on Safari. -- Fixed content protection events not being dispatched for OptiView live streams. -- Fixed an issue where an HLS live stream would not start at the live point on iOS Safari. -- Fixed an issue where an empty VAST/VMAP response would block content if `blockContentIfAdError` was enabled in the player source description. -- Fixed an issue where quality or track switches with non-identical codecs would cause a fatal error on Edge browsers. -- Fixed an issue where the defined ad parameters for a MediaTailor source are not being passed correctly to MediaTailor. - -#### ๐Ÿ‘Ž Deprecations - -- Renamed `adParams` to `adsParams` in the MediaTailor source definition in the Web SDK. The old name still works, but is now deprecated. - -### Android - -#### โœจ Features - -- Added support for adbreak to adbreak transition with THEOAds. -- Added `THEOplayerGlobal.logger` API to enable logs for specific tags and ability to add listeners to receive log messages. -- Added a new `EndpointLoadedEvent` that fires when an OptiView Live endpoint is successfully loaded. -- Improved debug logging for the Media3 playback pipeline. -- Added support for MPEG-TS segments with multiple SPS/PPS NALs in the MPEG-TS transmux worker for the legacy playback pipeline. -- Added support for GAM properties in THEOads overlays. -- Added ClearKey DRM support to the media3 pipeline. - -#### โšก Improvements - -- Fixed video artifacting on older FireTV devices when playing OptiView live streams. -- Added support for `"maxBitrate"` when setting up a `SourceDescription`. This can be set by defining an `abr` property for the source. -- Improved the latency measurement available in the latency API. -- Manifest and segment requests now have the proper `Request.type`, `.subType` and `.mediaType` in the Media3 pipeline. -- Added `LinearAd.durationAsDouble` to retrieve an linear adโ€™s duration with sub-second precision. - -#### ๐Ÿ› Issues - -- Fixed an issue where subtitle styles set through the `TextTrackStyle` API were not being applied to subtitles with embedded styles. -- Fixed an issue where subtitles with a background color set by an embedded style were always rendered with the default background color instead. -- Fixed an issue wherein OptiView Live streams were not honouring the set `AbrStrategyConfiguation` on the player. -- Fixed an issue where the player would crash on ad playback in MediaTailor streams. -- Fixed an issue where `PlayEvent` and `PauseEvent` weren't fired immediately on `play()` and `pause()` API calls. Also ensured `PlayEvent` fires when a source is invalid. -- Fixed an issue where the `PauseEvent` did not fire when the player becomes ended. -- Fixed an issue where the defined ad parameters for a MediaTailor source are not being passed correctly to MediaTailor. - -#### ๐Ÿ‘Ž Deprecations - -- Renamed `adParams` to `adsParams` in the MediaTailor source definition in the Android SDK. The old name still works, but is now deprecated. - -### iOS - -#### โœจ Features - -- Added a target latency override to THEOlive source description. -- Added `THEOliveConfiguration.discoveryUrl` and `THEOliveConfiguration.discoveryUrls` to support custom discovery URLs for OptiView live streams. - -#### โšก Improvements - -- Update Millicast SDK to v2.4.3 -- Added a new improved OptiView live streaming (formerly known as THEOlive) playback pipeline. - - The new pipeline is enabled by default as it brings significant improvements. - - The legacy playback pipeline is still available, and can be activated by setting `THEOliveConfiguration.useLegacyPlaybackEngine` to `true`. - - The legacy playback pipeline is scheduled to be removed in version 10. - -#### ๐Ÿ› Issues - -- Fixed an issue where closed caption text tracks were automatically selected and bypassing accessibility settings. - -### Chromecast CAF - -#### โœจ Features - -- Added support for GAM hosted interstitial image overlays. -- Added in the ability to display THEOads interstitial overlays included in HLS manifests. -- Added support for VOD assets with THEOads overlay images. - -### Roku - -#### โœจ Features - -- Added support for OptiView live v2 streams. -- When an OptiView live stream has an error, the player will now attempt to fallback to other sources for the stream. - -#### ๐Ÿ› Issues - -- Fixed crash on start up when using an array for `source.sources`. -- Fixed an issue where a THEOlive source would not work when passed as an element in a sources array in the source description. - -## ๐Ÿš€ 9.6.1 (2025/06/23) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where an MPEG-DASH thumbnail adaptation set with a large amount of thumbnails could cause the player to temporarily lock up the main thread on lower end devices. The player now parses these thumbnails in a background thread instead. -- Fixed an issue where MPEG-DASH streams with duplicate service descriptors in their CEA-608 `` descriptor would result in scrambled closed captions. - -## ๐Ÿš€ 9.6.0 (2025/06/18) - -### Web - -#### โœจ Features - -- Added support for using the `"keyids"` initialization data format in EME, as defined by [W3C](https://www.w3.org/TR/eme-initdata-keyids/). -- Added support for ClearKey content protection signaled by the DASH-IF system ID (`e2719d58-a985-b3c9-781a-b030af78d30e`) in the context of a DASH stream. (ClearKey signaled by the W3C system ID was already supported.) -- Added support for ABR strategies for OptiView live streams. - -#### โšก Improvements - -- Improved latency control, especially on CPU-restricted devices. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player did not recognize a PlayReady PRO object as valid initialization data in an HLS `#EXT-X-KEY` tag. -- Fixed an issue where seeking to an area of buffer right before a gap on WebOS devices would cause the player to get stuck indefinitely. -- Fixed an issue where video qualities in a Millicast stream did not report their correct width and height. -- Fixed an issue where an incorrect intent to autoplay was sent to Google IMA. - -### Android - -#### โœจ Features - -- Added support for [16 KB page sizes](https://developer.android.com/guide/practices/page-sizes) in the Core SDK. This prepares for the [upcoming Google Play compatibility requirement](https://android-developers.googleblog.com/2025/05/prepare-play-apps-for-devices-with-16kb-page-size.html) where new apps or app updates submitted after November 1st 2025 and targeting Android 15 or higher must support 16 KB page sizes. - -#### ๐Ÿ› Issues - -- Fixed a regression where MediaTailor sources failed to play. -- Fixed an issue where video qualities in a Millicast stream did not report their correct width and height. -- Fixed an issue where some caching notifications would be stuck if multiple tasks run in parallel. -- Fixed a crash when casting a source with a `ChromecastMetadataDescription` without a `releaseDate` or `subtitle`. -- Fixed an issue where a crash could occur due to an invalid playback rate when stopping Chromecast and then stopping the player. -- Fixed an issue where THEOads showed a black screen instead of an advertisement. -- Fixed an issue where setting `AbrStrategyType.BANDWIDTH` would ignore the historic data of the network conditions. -- Fixed an issue where no `TimeUpdateEvent` would be dispatched after seeking using the Media3 playback pipeline. -- Fixed an issue where a large amount of `AddCueEvent`s from a thumbnail track would delay other player events. - -#### โš  Known Limitations - -- The Millicast integration does not yet support [16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). This has been fixed in THEOplayer version 9.12.0. - -### iOS - -#### โœจ Features - -- Added `unlocalizedLabel` property to tracks. Where applicable, this refers to the label before it gets automatically localized by Apple's AVFramework. - -#### โšก Improvements - -- `THEOplayer.source` now returns the exact same `SourceDescription` (without modifications) that was last set on the property. - -#### ๐Ÿ› Issues - -- Fixed an issue where accessing the player after the `destroy` method was called would crash the application. -- Fixed an issue where entering the background during a THEOad would not let you resume the content. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated the `destroy` method. Instead destroy the player by removing its reference `self.player = nil`. -- Deprecated the `set` from the subscript of the `TextTrackList` API. The `TextTrackList` is a readonly list. - -### Chromecast CAF - -#### โšก Improvements - -- Fixed playout of streams where the manifest extension was not the protocol default (.m3u8 or .mpd), but the type was correctly given in the source description. - -### Roku - -#### โœจ Features - -- Added tracking of CMCD states for THEOlens. -- Added Common Media Client Data (CMCD) Status header on media requests to track rebuffering. -- Added Network API for adding custom headers to media requests during playback. - -#### ๐Ÿ› Issues - -- Stopped ads from playing after a stream has fatally errored. -- Fixed an issue with an event firing after calling `destroy` that caused a crash when switching streams. - -## ๐Ÿš€ 9.5.1 (2025/06/11) - -### Android - -#### ๐Ÿ› Issues - -- Fixed a crash when casting a source with a `ChromecastMetadataDescription` without a `releaseDate` or `subtitle`. -- Fixed an issue where a crash could occur due to an invalid playback rate when stopping Chromecast and stopping the player. -- Fixed an issue where setting `AbrStrategyType.BANDWIDTH` would ignore the historic data of the network conditions. - -## ๐Ÿš€ 9.5.0 (2025/06/03) - -### General - -#### โœจ Features - -- Added support for HLS-only THEOlive channels. - -### Web - -#### โœจ Features - -- Added `player.millicast` API to access Millicast specific diagnostics and stats. See the [diagnostics doc page](https://optiview.dolby.com/docs/millicast/playback/players-sdks/web/player/frame-metadata/) for more information. -- Added support for Dolby Digital (`ac-3`) codecs in HLS when the platform supports it. -- Added a default value for the `ott_placement` GAM ad tag parameter for THEOads. - -#### โšก Improvements - -- Improved the latency of THEOlive streams on iOS Chrome. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would sometimes not end properly when playing an HLS stream that starts with a gap. -- Fixed an issue where the player would crash when playing an HLS stream when all variant streams are offline. Instead, the player will now continue trying to request variant streams until one comes online. -- Fixed an issue where a segment in an HLS stream marked with `EXT-X-GAP` was still being downloaded and buffered. - -### Android - -#### โœจ Features - -- Added `TextTrackStyle.marginRight` and `.marginBottom`. -- Added the `CHANGE` event to `AudioTrackEventTypes` and `VideoTrackEventTypes`. -- Added a default value for the `ott_placement` GAM ad tag parameter for THEOads. - -#### โšก Improvements - -- Improved the subtitle renderer to better handle margins. The relative position of each subtitle is now preserved, and subtitles are shifted only when they would otherwise cross a margin. -- The Google IMA, Google DAI and THEOads integrations now automatically call `ImaSdkFactory.initialize()` to begin loading necessary IMA SDK resources before the first ad request, which improves load times. To improve load times even further, we recommend calling `ImaSdkFactory.initialize()` with your `ImaSdkSettings` manually when your app starts, even before creating your `THEOplayerView`. See [the Google Ads developer blog](https://ads-developers.googleblog.com/2025/05/optimize-ima-android-monetization-with.html) and [this Google IMA guide](https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/load-time#call_imasdkfactoryinitialize) for more information. -- Added an optional `googleImaConfiguration` parameter to `TheoAdsIntegrationFactory.createTheoAdsIntegration()`. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `TRACKLISTCHANGE` event was not firing in the Media3 pipeline. -- Fixed an issue where text tracks would not be selectable in the sender app when casting to a Chromecast receiver. -- Fixed an issue where setting `MediaTrack.targetQuality` on a disabled track (e.g. inside an `ADDTRACK` event listener) would be silently ignored in the Media3 pipeline. -- Fixed an issue where trick play variants (such as `#EXT-X-I-FRAME-STREAM-INF` in HLS) were incorrectly added as qualities of a video `MediaTrack` in the Media3 pipeline. -- Fixed a regression where `GoogleDaiConfiguration.adTagParameters` incorrectly required a `MutableMap` parameter instead of a regular `Map`. -- Fixed an issue where caching a DRM protected stream would pause after starting when using the Media3 pipeline. - -### iOS - -#### โœจ Features - -- Added support for adbreak to adbreak transition with THEOAds. -- Added a default value for the `ott_placement` GAM ad tag parameter for THEOads. - -#### โšก Improvements - -- Improved smoothness of startup when playing THEOlive streams. - -### Roku - -#### โœจ Features - -- Added separate text tracks for HLS daterange and ID3 metadata. These will also still appear in the `metadata` text track. -- Added the ability to add and remove integrations to the player. -- Added support for EMSG and EMSG metadata tracks, available on the text tracks API. -- Added ID3 tag parsing for EMSG ID3 tags received in DASH. -- Added the ability to signal an embedded text track that is not in the manifest. -- Added the ability to configure midroll ads to replace content when they play. - -#### ๐Ÿ› Issues - -- Changed caption suppression logic so it would not get triggered by switching languages. -- Fixed closed captions for HLS so captions don't end up suppressed when a captions track starts as "disabled". -- Fixed an issue where sometimes THEOlive assets would not autoplay. - -## ๐Ÿš€ 9.4.1 (2025/05/23) - -### Web - -#### โšก Improvements - -- When playing a multiperiod DASH stream that has identical adaptation sets and representations across subsequent periods, a previously configured `targetQuality` will now remain active when transitioning to a new period rather than resetting to `undefined`. - -#### ๐Ÿ› Issues - -- Fixed an issue where DASH streams with very small variations in `presentationTimeOffset`s across periods with aligned media would encounter stalls on period transitions. -- Fixed an issue where `targetQuality` would get overridden with an incorrect configuration for DRM-enabled DASH streams where no `default_KID`s are present in the manifest. - -## ๐Ÿš€ 9.4.0 (2025/05/20) - -### General - -#### โšก Improvements - -- Improved the ABR algorithm for OptiView live streams. - -### Web - -#### โœจ Features - -- Added support for subtitles in native fullscreen on iOS Safari for OptiView live streams. -- Exposed VAST `` tag contents on `LinearAd`s. -- Added `skipAdBreak()` method to the Ads API, to allow seeking out of an ad break when using the `csai` integration. - -#### โšก Improvements - -- Added CMCD v2 headers for all types of OptiView live HLS streams. -- Improved the recovery speed of OptiView live streams when the network is interrupted for a very short time. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `manifestupdate` event was not dispatched for iOS Safari. -- Fixed an issue where dispatching of ads using the `csai` integration was erroneous when preload is enabled. -- Fixed an issue where a DASH stream with adaptation set switching enabled and with different codecs between the adaptation sets doesn't play on Chrome, Edge and Safari. - -### Android - -#### ๐Ÿ’ฅ Breaking Changes - -- The type of `GoogleDaiVodConfiguration.adTagParameters` changed from `Map` to `MutableMap` as part of the Kotlin update. This was an unintended breaking change that will be reverted in 9.5. - -#### โœจ Features - -- Added DASH thumbnail track support for Media3. - -#### โšก Improvements - -- Added Kotlin constructor for `SourceDescription`, as an alternative for `SourceDescription.Builder`. -- Added Kotlin constructors for `DRMConfiguration` and `KeySystemConfiguration`, as an alternative for `DRMConfiguration.Builder` and `KeySystemConfiguration.Builder`. -- Media and text tracks are now available on `loadedmetadata` when using the Media3 playback pipeline. - -#### ๐Ÿ› Issues - -- Fixed playback of DRM protected HESP streams. -- Fixed an issue where a source with a `CustomSsaiDescription` (e.g. using the Uplynk or Yospace connector) could not be played with the Media3 pipeline. -- Fixed an issue where the player would sometimes crash on play-out of an HLS source with `#EXT-X-DATERANGE` metadata. -- Fixed an issue where date range cues were not properly removed in the Media3 pipeline once they are entirely before the start of the latest HLS playlist. -- Fixed an issue where cues of text tracks that contain bitmap content would not be rendered. -- Fixed an issue where the player would not free all resources after ad play-out. - -### iOS - -#### ๐Ÿ› Issues - -- Fix issue on iOS with Chromecast where when the app goes to background and a Chromecast session is currently active, audio playback starts on the phone. -- Fix issue on iOS with Chromecast where playback rate cannot be set back to `1.0`. -- Fixed an issue where caching tasks would store multiple files on disk. - -### Roku - -#### โœจ Features - -- Added THEOlive support using backup HLS stream. -- Added in ability to mix VMAP and VAST ads, and to schedule ads. -- Added the ability to set headers on the media requests, and solved the issue of application headers bleeding over into media requests. - -#### โšก Improvements - -- Handled more unusual cases for scheduling ads during playback. -- Handled more cases for scheduling ads, including scheduling ads when no ads have previously been configured. - -#### ๐Ÿ› Issues - -- Solved an issue with multi-ad VMAP postrolls by disabling Inter Pod Stitching for them. - -## ๐Ÿš€ 9.3.4 (2025/09/22) - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where deinitializing the player during the loading of a THEOlive (OptiView Streaming) stream would cause a crash. - -## ๐Ÿš€ 9.3.3 (2025/09/17) - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where THEOlive streams would not restart after app backgrounding. - -## ๐Ÿš€ 9.3.2 (2025/05/13) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where communication with Google IMA backend was interrupted after an ad break on THEOAds. - -## ๐Ÿš€ 9.3.1 (2025/05/12) - -### iOS - -#### โšก Improvements - -- Improved the algorithm behind our HESP pipeline to reach the targetLatency. - -## ๐Ÿš€ 9.3.0 (2025/05/05) - -### Web - -#### โœจ Features - -- Added support for DRM protected OptiView Streaming HLS. - -#### โšก Improvements - -- The VR integration now initializes itself lazily when the first VR-enabled source is set, rather than when the player is created. -- Improved the transition from content to ad for THEOads streams on smart TVs. -- Improved playback stability of HESP streams on Xbox. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would show a blank screen on Tizen 2.4 when playing a non THEOads stream and the `theoads` feature is enabled in the `PlayerConfiguration`. -- Fixed an issue for THEOads where scheduling an ad break through SSE could cause it to be played twice in a row. -- Fixed an issue for THEOads where the player did not resume the content at the correct time after an ad break. -- Fixed an issue where switching between audio tracks with an incompatible codec in an HLS stream causes the player to crash, even though the codecs are supported by the browser. -- Fixed an issue where the Chromeless player would freeze when switching to an adbreak when playing a THEOads stream unmuted on iOS Safari. - -### Android - -#### โœจ Features - -- Added support for the `Metrics` API in the Media3 playback pipeline. - -#### ๐Ÿ› Issues - -- Fixed an issue where a previously removed caching task would sometimes re-appear after restarting the app. -- Fixed an issue where calling `CachingTask.start()` on a task for a DASH stream with persistent DRM would immediately pause the task after the DRM license has been cached. -- Fixed an issue where `CachingTask.percentageCached` was not properly updated to `1.0` (i.e. 100%) after the caching task becomes done. -- Fixed an issue where calling `play()` when the player is ended did not correctly seek back to the start using the Media3 pipeline. -- Fixed an issue where the THEOads session was not cleaned up properly when setting a new source. -- Fixed an issue where `player.abr.strategy` did not work on HLS streams with the Media3 pipeline. - -### iOS - -#### โšก Improvements - -- Improved the IMA pod stream request for THEOads which is now sent on source change instead of when a THEOad starts preloading. -- Updated Millicast integration dependency on Millicast SDK to v2.4.1. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `ended` event would be dispatched twice while playing MPEG format sources. -- Fixed an issue where a new source would autoplay when preload is set to auto. -- Fixed an issue where the metadata of a THEOad was not passed to Google IMA. -- Fixed an issue where some events were not being dispatched for THEOads with Google IMA. -- Fixed an issue where the ID3 based ad events were dispatched too early for THEOads. -- Fixed an issue where PiPConfiguration was not respected after setting a source. - -### tvOS - -#### โœจ Features - -- Added support for THEOads. - -### Roku - -#### โœจ Features - -- Added `suppressCaptions` functionality based on `textTracks` `mode` field. Captions are automatically suppressed when `textTracks` `mode` is `"disabled"`. -- Added the `muted` API to control the video node's mute state. -- Added support for Client Side Ad Insertion using the player `Ads` API. Check out the [getting started with ads on Roku](https://optiview.dolby.com/docs/theoplayer/getting-started/sdks/roku/displaying-ads/) docs for more information. - -#### ๐Ÿ› Issues - -- Fixed an issue where bitrate changes were not being correctly reported to the Adobe Edge connector. - -## ๐Ÿš€ 9.2.0 (2025/04/22) - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- Updated the LCEVC integration compatibility to LCEVCdecJS SDK version 1.2.1. This breaks compatibility with prior versions. For more info check our [LCEVC doc page](https://www.theoplayer.com/docs/theoplayer/getting-started/sdks/web/how-to-play-an-lcevc-source-with-theoplayer/). - -#### โœจ Features - -- Added a flag `enableNonce` to `GoogleDAIConfiguration`. -- Added a flag `allowSeekingForGoogleDai` to enable seeking during an ad break in a Google DAI stream. -- Added support for automatically setting the "ott_placement" GAM ad tag parameter for THEOads. - -#### ๐Ÿ› Issues - -- Fixed an issue where going to fullscreen when playing an LCEVC stream would result in misaligned player positioning. -- Fixed an issue where the `startTime` property of a `DateRangeCue` would be wrong when dispatching an `EnterCueEvent` on a quality switch. -- Fixed an issue on Tizen 2.4 where playback of a DASH stream stalled due to a usable PlayReady DRM key being ignored. -- Fixed an issue where the player could get stuck in a loop when encountering a gap in the buffer of an HLS stream when playing on Tizen devices. -- Fixed an issue where disabling a `MediaTrack` for a HLS CMAF stream would result in an error. - -### Android - -#### โœจ Features - -- Added support for text tracks of type `TextTrackKind.TimeCode` for THEOlive / HESP streams. -- Added support for Multi-Audio THEOlive streams. -- Added support for automatically setting the "ott_placement" GAM ad tag parameter for THEOads. - -#### โšก Improvements - -- Adhere to the values of `NetworkConfiguration` for retrying network requests for THEOlive / HESP streams. - -### iOS - -#### โœจ Features - -- Added support for multiple audio tracks for THEOlive sources. -- Added support for automatically setting the "ott_placement" GAM ad tag parameter for THEOads. - -#### ๐Ÿ› Issues - -- Fixed an issue where the ad tag parameters were not passed to Google when playing a THEOad. -- Fixed an issue where calling `player.destroy()` did not fully destroy the player. -- Fixed an issue where a THEOad would already start playing, only audio, before its start date. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated the `set` from the subscript of the `MediaTrackList` API. The `MediaTrackList` is a readonly list. - -### Roku - -#### โœจ Features - -- Added the THEO Adobe Edge Platform Connector, or THEO AEP connector, for providing media analytics through the AEP SDK. - -#### ๐Ÿ› Issues - -- Corrected the bitrate change detection so it reports video bitrate rather than audio bitrate. -- Added missing ability to set `isLive` for Conviva content metadata from the `updateContentMetadata` method. - -## ๐Ÿš€ 9.1.0 (2025/04/10) - -### Web - -#### โœจ Features - -- Added support for language and label for captions for THEOlive streams. - -#### โšก Improvements - -- Removed `CC` prefix from `TextTrack.label` for CEA-608/708 captions tracks that have a known label or language. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would dispatch wrong THEOads events when playing a THEOads stream in native picture-in-picture. -- Fixed an issue where chapter indicators on the seek bar were positioned incorrectly when the video is clipped using `player.clip`. -- Fixed an issue where the player would not play multiple ads when playing a THEOads streams on smartTVs. - -### Android - -#### โœจ Features - -- Added support for `THEOplayerConfig.networkConfiguration` in the Media3 playback pipeline. - -#### โšก Improvements - -- Prefer language over channel number as track label for CEA-608/708 captions. - -#### ๐Ÿ› Issues - -- Fixed an issue for THEOAds where the LShape layout crashed. -- Fixed an issue where the player would need to occasionally recover on THEOlive / HESP streams resulting in a short spinner. -- Fixed an issue where the Media3 backend failed to cache HLS streams. -- Fixed an issue where the Media3 backend would error immediately instead of retrying when encountering a network error for an HTTP request. -- Fixed an issue where using a Fire TV license would be rejected. -- Fixed an issue where subtitles from a DASH period after the first period were not presented at the correct time with the Media3 pipeline. -- Fixed an issue where a selected subtitle track would incorrectly be disabled on a period switch, even though the next period contains a matching subtitle track. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where using THEOads would introduce a memory leak. -- Fixed an issue where transitioning into an ad break with THEOads would not preserve the volume and muted state. -- Fixed a memory leak for THEOads where an `Ad` would hold a strong reference to its `adBreak`. -- Fixed an issue for THEOads where moving the player view to another UIViewController would cause an application crash. -- Fixed an issue where the Millicast integration framework also included the THEOplayer framework causing applications to be rejected from the App Store. - -### Roku - -#### โœจ Features - -- Added a `stopAndStartNewSession` method to handle cases where a new session should be started on the currently playing media. - -## ๐Ÿš€ 9.0.0 (2025/04/03) -### Officially announcing THEOplayer 9.0 -Introducing a major version bump to THEOplayer 9.0. This version officially releases all the improvements and developments THEOplayer has achieved since version 8.0. - -THEOplayer 9.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. - -- Starting from THEOplayer 9.0, the new Media3 Playback pipeline is now the default for all Android SDK playback, bringing bug fixes, performance improvements and increased stability across a wider range of devices for the Android SDK! Check out our [Getting started with Media3 guide](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/media3/getting-started/) for more information. - -- THEOplayer 9.0 supports playback of Dolby's real time streaming solution Millicast across all of our major SDKs, including React Native! Check out our Getting started with Millicast guides for [Web](https://www.theoplayer.com/docs/theoplayer/how-to-guides/web/millicast/getting-started/), [Android](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/millicast/getting-started/), [iOS](https://www.theoplayer.com/docs/theoplayer/how-to-guides/ios/millicast/getting-started/) and [React Native](https://www.theoplayer.com/docs/theoplayer/getting-started/frameworks/react-native/millicast/) for more information. - -- With THEOplayer 9.0 we are also bumping and upgrading our THEOplayer Roku SDK to 9.0, bringing API and stability improvements along with new connectors for Conviva and Comscore, with more new feature development and connectors to follow! Check out our [Roku docs](https://www.theoplayer.com/docs/theoplayer/roku/) for more information. - -- THEOplayer 9.0 now comes with cross platform support for CMCD! We've added CMCD support for our Media3 pipeline as well as for iOS 18+, and made it available cross-platform through React Native too! Check out our CMCD docs for [Web](https://www.theoplayer.com/docs/theoplayer/connectors/web/cmcd/getting-started), [Android](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/cmcd/getting-started/), [iOS](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/cmcd/getting-started/) and [React Native](https://www.theoplayer.com/docs/theoplayer/getting-started/frameworks/react-native/cmcd/) for more information. - -For more info on navigating our breaking changes, take a look at our migration guides for [Web](https://www.theoplayer.com/docs/theoplayer/getting-started/sdks/web/migrating-to-theoplayer-9/), [Android](https://www.theoplayer.com/docs/theoplayer/getting-started/sdks/android/migrating-to-theoplayer-9/), [iOS](https://www.theoplayer.com/docs/theoplayer/getting-started/sdks/ios/migrating-to-theoplayer-9/) and [React Native](https://www.theoplayer.com/docs/theoplayer/getting-started/frameworks/react-native/migrating-to-react-native-theoplayer-9.md). - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- Virtual reality playback now always uses the WebXR API. The `PlayerConfiguration.vr.useWebXR` configuration flag is now deprecated and ignored. -- Removed `THEOplayer.playerSuiteVersion`. Use `THEOplayer.version` instead. -- Removed the Verizon Media integration (`player.verizonMedia`). Use the Uplynk integration (`player.uplynk`) instead. -- Removed `MillicastSource.streamName`. Use `MillicastSource.src` instead. -- Removed `SourceDescription.manifestMetadataTrack`. -- Removed `player.ads.theoads.replaceAdTagParameters`. Use `player.theoads.replaceAdTagParameters` instead. -- Removed discontinued proof-of-concept integration for Imagine SSAI. -- Removed the option to use THEOads with a sideloaded manifest. - -#### ๐Ÿ› Issues - -- Fixed an issue for THEOads where the player could error on smart TVs after an adbreak. -- Fixed an issue where sideloaded text tracks would not appear on iOS Safari when using native fullscreen. - -### Android - -#### ๐Ÿ’ฅ Breaking Changes - -- The Media3 playback pipeline is now enabled by default. This new pipeline is built on top of [Jetpack Media3](https://developer.android.com/media/media3), which aims to provide more stable playback on a wider range of devices. - - The legacy playback pipeline from version 8.x is still available, and can be activated by setting `TypedSource.playbackPipeline` to `PlaybackPipeline.LEGACY`. - - The legacy playback pipeline is scheduled to be removed in version 10. -- Newly created caching tasks now use the Media3 storage backend by default. - - Sources cached with this backend can only be played using the Media3 playback pipeline. - - Sources previously cached with the legacy storage backend are still playable using the Media3 playback pipeline. - - The legacy storage backend from version 8.x is still available, and can be activated by setting `CachingParameters.storageType` to `CacheStorageType.LEGACY` - when calling `Cache.createTask()`. - - The legacy storage backend is scheduled to be removed in version 10. -- Removed the Media3 integration package. The Media3 playback pipeline now ships with the THEOplayer Android SDK (`com.theoplayer.theoplayer-sdk-android:core`). -- The Android SDK and its integrations are now compiled against API 35. Ensure `compileSdk` is set to 35 or higher in your app's `build.gradle` file. -- Removed deprecated `MillicastSource(Credential, Option)` constructor. Use the primary constructor instead. -- Removed deprecated `MillicastSource.credential` API. Use `src`, `streamAccountId`, `apiUrl` and `subscriberToken` instead. -- Removed deprecated `MillicastSource.option` API. Use `connectOptions` instead. -- Removed deprecated `TypedSource.isHlsDateRange` API. Use `TypedSource.hlsDateRange` instead. -- Removed deprecated `TypedSource.isLowLatency` API. Use `TypedSource.lowLatency` instead. -- Removed deprecated `THEOLiveConfig.userId` API. -- Removed deprecated `THEOLiveConfig.sessionId` API. Use `THEOLiveConfig.externalSessionId` instead. -- Removed deprecated `ConaxDRMConfiguration.Builder.fairPlay(FairPlayKeySystemConfiguration)` API. Use `ConaxDRMConfiguration.Builder.fairplay(FairPlayKeySystemConfiguration)` instead. -- Removed deprecated `THEOplayerConfig.getLiveOffset()` API. Use `TypedSource.liveOffset` instead. -- Removed deprecated `THEOplayerConfig.isHlsDateRange()` API. Use `TypedSource.hlsDateRange` instead. -- Changed the default value of `THEOplayerConfig.Builder#autoIntegrations(boolean)` to `true`. From now on, all available integrations will be automatically added. -- Removed deprecated `GoogleImaIntegrationFactory.createGoogleImaIntegration(THEOplayerView, ImaSdkSettings)` API. Use `GoogleImaIntegrationFactory.createGoogleImaIntegration(THEOplayerView, GoogleImaConfiguration(ImaSdkSettings))` instead. -- Removed deprecated `GoogleDaiIntegrationFactory.createGoogleDaiIntegration(THEOplayerView, ImaSdkSettings)` API. Use `GoogleDaiIntegrationFactory.createGoogleDaiIntegration(THEOplayerView, GoogleImaConfiguration(ImaSdkSettings))` instead. -- Moved the `GoogleImaAd` API from the package `com.theoplayer.android.api.ads.GoogleImaAd` to `com.theoplayer.android.api.ads.ima`. - -#### โš  Known Limitations - -- ~~Availability of media and text tracks has moved from the `loadedmetadata` event to the `loadeddata` event when using the Media3 playback pipeline.~~ (Fixed in version 9.4.0.) -- ~~Text track styling embedded in the source take precedence over user text track style configuration.~~ (Fixed in version 9.7.0.) - -#### โœจ Features - -- Added the `sseEndpoint` property to `TheoAdDescription` to retrieve server-sent events from the configured endpoint. - -#### โšก Improvements - -- Updated the Google Chromecast dependency from 21.4.0 to 22.0.0. -- Updated the Gson dependency from 2.10.1 to 2.12.1. - -### iOS - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed Objective-C support for all THEOplayer APIs. -- Removed deprecated `Integration.IntegrationType` API. Use `Integration.IntegrationKind` instead. -- Removed deprecated `MillicastSource(streamName:accountID:token:connectOptions:)` API. Use `MillicastSource(src:streamAccountId:subscriberToken:connectOptions:)` instead. -- Removed deprecated `MillicastSource(streamName:accountID:token:connectOptions:)` API. Use `MillicastSource(src:streamAccountId:subscriberToken:connectOptions:)` instead. -- The `TypedSource` initializer now takes a `String` parameter as a source instead of a `URL` object. -- The `Ads.dai` property is now only available when the `GoogleIMAIntegration` package is included in the project. - -#### ๐Ÿ› Issues - -- Fixed an issue where when connected to Airplay and playing live content, it does not automatically seek to the live point, and instead starts playing from the earliest DVR window. -- Fixed an issue where the timeupdate event frequency was too high when playing a Millicast source. -- Fixed an issue where playing multiple Millicast sources after each other would cause the app the become unresponsive. - -### Chromecast CAF - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed `THEOplayer.playerSuiteVersion`. Use `THEOplayer.version` instead. - -### Roku - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed the `configuration` property. Player configuration such as the player license should be passed using the new `configure` method now instead. -- Removed support for verizon's SSAI, ads, and other features. This removes the `skipAds` method, ad events and the relevant verizon specific API. A new Uplynk connector will be added in the future to reintroduce this functionality, in the meantime customers relying on this are advised to remain on 1.X and get in contact to notify us of the dependency of Uplynk functionality and desire to upgrade. -- The `setDestinationRectangle` method now only accept separate parameters instead of also an object containing the rectangle properties. -- Removed the deprecated `listener` property and changed the signature of the `removeEventListener` and `addEventListener` methods. -- Removed the `cues` property from the metadata text track and enforced only tracking one active cue in the `activeCues` property. -- Removed the `content` property from metadata text track cues. Added `rawContent` in its place which exposes the raw metadata object the player received from Roku's video node. -- The `activeCues` property on the metadata text track now only tracks the single latest timed metadata encountered in the stream. For the time being, tracking more cues should be tackled outside the player by observing the metadata text track and storing the cues oneself. -- A metadata text track cue will now have its PTS that the player received from the video node on its `startTime`, rather than its `endTime`. -- Fine-tuned playback control options for live streams. By default seeking into the DVR window will be enabled for live streams and pausing the stream will cause the player to resume from the point where the player was paused. Setting the `enableTrickPlay` API to false will change this behaviour to disallow seeking back into the DVR window and cause the player to resume from the live point after being paused. - -#### โœจ Features - -- Added the `autoplay` property to control automatic start of playback after setting the source. It defaults to `false`, and when disabled the poster image will now display before playback begins. - -#### โšก Improvements - -- Updated the Conviva client used in the Conviva connector to 3.5.4 and improved Conviva tracking. - -#### ๐Ÿ› Issues - -- Fixed an issue where license checks would not properly display error messages for different issues with licenses. -- Fixed an issue where app crashes could occur due to lingering listeners after destroying the player instance. - -## ๐Ÿš€ 8.14.0 (2025/03/26) - -### Web - -#### โœจ Features - -- Added the IMA DAI `streamActivityMonitorId` property as a configuration on the `TheoAdDescription`. -- Added the `retrievePodIdURI` property to `TheoAdDescription` to retrieve the PodID as returned from the EABN service from Google. -- Added the `sseEndpoint` property to `TheoAdDescription` to retrieve server-sent events for the configured endpoint. - -#### โšก Improvements - -- Improved event dispatching when playing a stream with THEOads. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would stop after an ad in a THEOads stream on smart TVs. -- Fixed an issue where setting the `skipOffset` in the CSAI configuration to 0 made an ad unskippable instead of immediately skippable. -- Fixed an issue where the player would keep preloading the same segments when the HLS stream starts with a small gap. -- Fixed an issue where the player would dispatch a seeking event when preloading an HLS stream that starts with a small gap. -- Fixed an issue where DRM protected streams fail to play on Tizen or webOS devices due to an error while applying the license. -- Fixed an issue where an `error` event would not be dispatched for Millicast streams when the initial connection failed. - -### Android - -#### โœจ Features - -- Added `TheoAdsIntegration.currentInterstitials` and `TheoAdsIntegration.scheduledInterstitials` in `TheoAdsIntegration` for managing currently playing and scheduled interstitials and events of interstitials lifecycle. -- Added support for multimedia tunneling through `THEOplayerConfig.isTunnelingEnabled` in the Media3 integration. -- Added support for CEA608 subtitles for HESP / THEOlive streams using the Media3 integration. -- Added the IMA DAI `streamActivityMonitorId` property as a configuration on the SGAI TheoAdDescription. - -#### โšก Improvements - -- Added support for DRM pre-integrations in Media3. -- Improved support for forced subtitles in the Media3 integration. - -#### ๐Ÿ› Issues - -- Fixed an issue where `SEEKING` events were emitted while switching from Ad to content while playing THEOAds. -- Fixed an issue where the `activeQuality` on a video track would not update when playing THEOlive / HESP streams using the Media3 backend. -- Fixed an issue when using ABR strategy `bandwidth` with the Media3 integration, where the initial bitrate value passed with the ABR configuration would be ignored. -- Fixed an issue where the player incorrectly attempted to play DRM-protected qualities in MPEG-DASH for which it did not receive a usable key from the DRM license server. -- Fixed an issue where the measured bandwidth estimate was not preserved across playback sessions in the Media3 integration. -- Fixed an issue where trying to play a DRM source could error when configuring `null` headers. -- Fixed an issue where the Media3 integration would throw an error when playback falls behind the live window. Instead, the player now recovers by seeking to live. -- Fixed an issue where the current time would not progress properly on HESP and THEOlive streams when using the Media3 integration. -- Fixed an issue where disabling all subtitle tracks would re-enable the default subtitle track in the Media3 integration. -- Fixed an issue where CEA-608 paint-on captions would flicker with the Media3 integration. - -### iOS - -#### โœจ Features - -- Added the IMA DAI `streamActivityMonitorId` property as a configuration on the `THEOAdDescription`. -- Added the `retrievePodIdURI` property on the `THEOAdDescription` to retrieve the PodID as returned from the EABN service from Google. -- Adding `allowsExternalPlayback` option to allow disabling external playback on the player. This is useful for controlling which player instance is allowed to externally playback through Airplay. -- When the `THEOplayerGoogleIMAIntegration` package is added, it will now be automatically integrated to THEOplayer. This makes explicitly creating and adding the integration unnecessary. -- `THEOplayerConfigurationBuilder` is extended with the method `setGoogleIMAConfiguration` to help configure the integration when auto-integrating. -- Added `GoogleIMAConfiguration` and `GoogleIMAConfiguration.Builder` APIs to build and pass arguments to the `setGoogleIMAConfiguration` method. -- Extended `Ads` API with `ima` property of type `GoogleImaIntegration?`; this helps to get a reference to the auto-integrated instance. -- When the `THEOplayerGoogleCastIntegration` package is added, it will now be automatically integrated to THEOplayer. This makes explicitly creating and adding the integration unnecessary. -- `THEOplayerConfigurationBuilder` is extended with the method `setGoogleCastConfiguration` to help configure the integration when auto-integrating. -- Added `GoogleCastConfiguration` and `GoogleCastConfiguration.Builder` APIs to build and pass arguments to the `setGoogleCastConfiguration` method. -- Extended `Cast` API with `googlecast` property of type `CastIntegration?`; this helps to get a reference to the auto-integrated instance. -- When the `THEOplayerTHEOadsIntegration` package is added, it will now be automatically integrated to THEOplayer by default. This makes explicitly creating and adding the integration unnecessary. -- Extended `Ads` API with `theoAds` property of type `THEOadsIntegration?`; this helps to get a reference to the auto-integrated instance. -- When the `THEOplayerMillicastIntegration` package is added, it will now be automatically integrated to THEOplayer. This makes explicitly creating and adding the integration unnecessary. -- Extended `THEOplayer` API with `millicast` property of type `MillicastIntegration?`; this helps to get a reference to the auto-integrated instance. -- `THEOplayerConfigurationBuilder` is extended with the method `setTHEOliveConfiguration` to help configure the integration when auto-integrating. - -#### โšก Improvements - -- THEOads is now available from iOS 13.0+. - -#### ๐Ÿ› Issues - -- Fixed an issue where THEOads would not play advertisement when playing in Picture-in-Picture. -- Fixed an issue where adding and removing the THEOads integration twice would result in no events being dispatched. - -## ๐Ÿš€ 8.13.2 (2025/03/17) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where player crashed on a call of setSource and reset while rendering video on a custom surface. -- Fixed an issue where the player would incorrectly resize on manual quality switches when using the Media3 integration. - -## ๐Ÿš€ 8.13.1 (2025/03/14) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where playing back THEOlive streams would not work. - -## ๐Ÿš€ 8.13.0 (2025/03/08) - -### General - -#### โšก Improvements - -- Improved speed of ABR decisions on THEOlive and HESP streams. - -### Web - -#### โœจ Features - -- Added support for THEOads streams while playing in native fullscreen. -- Added `mediaUrl` property on client-side VAST ads when using the default `csai` integration, representing the content URL of the `MediaFile` that was selected for ad playback. -- Added `closedCaptionFiles` property on client-side VAST ads when using the default `csai` integration, representing the list of `ClosedCaptionFile`s that may accompany the `MediaFile`s that are available for ad playback. -- Added the IMA DAI `streamActivityMonitorId` property as a configuration on the `TheoAdDescription`. - -#### โšก Improvements - -- When the `Duration` in a client-side VAST ad has an invalid value or is equal to zero seconds, the player now throws an error and skips the ad. -- Added support for VAST error 1009 when the ad server returns an empty VAST response without wrappers. - -#### ๐Ÿ› Issues - -- Fixed an issue where exiting native PiP or native fullscreen did not dispatch a paused event when using THEOads despite being paused due to the native behavior. -- Fixed an issue with Google IMA where only the first ad in a VMAP with multiple ads could be paused. - -### Android - -#### โœจ Features - -- Added support for caching sources using the Media3 integration by setting `CachingParameters.storageType` to `CacheStorageType.MEDIA3`. Sources cached with this method will only be playable using the Media3 integration. -- Added `TextTrackCue.getTrack()` getter. -- Added support for CMCD in THEOplayer. This is only supported with the Media3 integration. Read more about it [on our Android CMCD docs](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/cmcd/getting-started/). -- Added support for automatically adding all available integrations to a new `THEOplayerView` instance. This can be enabled with `THEOplayerConfig.Builder.autoIntegrations()`, and will be enabled by default starting with THEOplayer version 9.0. -- Added support for the Latency Manager API (`player.latency`) in the Media3 integration. -- Added support for THEOlive and HESP streams with the Media3 integration. -- Added support for ABR strategies when using the Media3 integration. - -#### โšก Improvements - -- Improved support for TTML subtitles and CEA-608 captions in the Media3 integration. -- Added Kotlin constructor for `TypedSource`, as an alternative for `TypedSource.Builder`. -- Added support for `ContentProtectionSuccessEvent`, `ContentProtectionErrorEvent` and `MediaEncryptedEvent` in the Media3 integration. -- Added `Player.ads.ima` as an alternative method to retrieve the `GoogleImaIntegration` (if it was previously added to the player). -- Added `Player.ads.dai` as an alternative method to retrieve the `GoogleDaiIntegration` (if it was previously added to the player). -- Added `Player.theoAds` as an alternative method to retrieve the `TheoAdsIntegration` (if it was previously added to the player). -- Added `THEOplayerConfig.googleImaConfiguration` as an alternative method to configure the `GoogleImaIntegration`. -- Added `THEOplayerConfig.castConfiguration` as an alternative method to configure the `CastIntegration`. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated `THEOplayerConfig.liveOffset` and `.isHlsDateRange`. Use their counterparts on `TypedSource` instead. -- Renamed `Media3PlayerIntegration.createMedia3PlayerIntegration()` to `Media3Integration.createMedia3Integration()`. The old name still works, but is now deprecated. -- Deprecated `Media3Integration.SourceSelectCallback`. Use `TypedSource.playbackPipeline` instead to enable or disable the Media3 integration for a specific source. - -### iOS - -#### ๐Ÿ’ฅ Breaking Changes - -- Changing `THEOplayer.backgroundPlaybackDelegate` property type to be optional. This is a minor change for internal purposes, but should not affect common usage of this API. - -#### โœจ Features - -- Added support for CMCD in THEOplayer. This is only supported on iOS 18.0+. Read more about it [on our iOS CMCD docs](https://www.theoplayer.com/docs/theoplayer/how-to-guides/ios/cmcd/getting-started/). -- Added `player.theoLive` API for THEOlive-specific features - -#### ๐Ÿ› Issues - -- Fixed an issue where performing consecutive source changes in quick succession would result in an indefinite freeze on THEOlive sources. -- Fixed an issue where the Chromecast sender app would be disconnected from the session and out of sync with the receiver app when returning from background to foreground. -- Fixed an issue that caused the text track API to stop working correctly after pausing and playing a THEOlive stream. - -## ๐Ÿš€ 8.12.1 (2025/02/28) - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue where exiting native PiP or native fullscreen did not dispatch a paused event when using THEOads despite being paused due to the native behavior. -- Fixed an issue for THEOads on Safari where activating native PiP during an ad break was broken. -- Fixed an issue for THEOads on iOS Safari where native fullscreen did not work for an L-SHAPE adbreak. - -## ๐Ÿš€ 8.12.0 (2025/02/24) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where text track cues would not be removed for THEOlive / HESP streams. - -### Web - -#### โœจ Features - -- Added the THEOads api via `player.theoads`. This is API specific to the [THEOads](https://www.theoplayer.com/product/theoads) feature that exposes information about playing and scheduled interstitials and allows configuration of THEOads specific properties. -- Added support for [Millicast frame metadata](https://docs.dolby.io/streaming-apis/docs/frame-metadata). When setting `metadata` to `true` in `MillicastSource.connectOptions`, all received frame metadata is added to a metadata text track with type `millicast`. -- Rebranded the existing `verizon-media` integration and the Verizon Media player configuration to the `uplynk` integration and the Uplynk player configuration for consistency across the SDKs. -- Uplynk ad information is now also exposed on the general `player.ads` API. -- Added support for THEOads streams while playing in native fullscreen. - -#### โšก Improvements - -- Added `MillicastSource.apiUrl` to allow configuration of a custom Millicast API endpoint. - -#### ๐Ÿ› Issues - -- Fixed an issue where incorrect `durationchange` events were dispatched when playing a THEOads ad break in native PiP. -- Fixed an issue where the `currentTime` would not be consistent for THEOads ad breaks played in native PiP. -- Fixed an issue where the duration of ads when using THEOads was always undefined. -- Fixed an issue where the player would sometimes crash with an internal error when seeking into the last period of an Uplynk MPEG-DASH stream when there's an unplayed midroll that still needed to be played. -- Fixed an issue where ads from a custom SSAI integration would not be available through the Ads API when THEOads is also enabled. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated `player.ads.theoads.replaceAdTagParameters` in favor of `player.theoads.replaceAdTagParameters`. -- Deprecated the `verizon-media` integration and the Verizon Media player configuration in favor of the `uplynk` integration and the Uplynk player configuration. - -### Android - -#### โœจ Features - -- Added support for image overlays in THEOads. -- Added support for playing sources cached through the Cache API using the Media3 integration. -- Handle `ICON_TAPPED` and `ICON_FALLBACK_IMAGE_CLOSED` Google IMA events on Connected TVs by focusing the ad UI when an icon is tapped and resuming ad play-out in case the user has closed the icon fallback image dialog. -- Added support for `TypedSource.liveOffset` in the Media3 integration. - -#### โšก Improvements - -- Updated the Google IMA dependency from 3.33.0 to 3.36.0. - -#### ๐Ÿ› Issues - -- Fixed `seekable.end(0)` being too close to the live edge in the Media3 integration. -- Fixed the default live offset for MPEG-DASH streams in the Media3 integration to be aligned with the legacy player. -- Fixed an issue where `SeekingEvent.currentTime` returned the current time *before* seeking instead of *after* seeking in the Media3 integration. -- Fixed an issue where calling `Player.setAspectRatio()` before setting the first source would have no effect. - -### iOS - -#### ๐Ÿ› Issues - -- Disabled picture-in-picture when paused on a THEOlive stream to prevent encountering an AVFoundation issue where playback would not be able to resume from PiP. -- Fixed an issue where playing a THEOads stream would not dispatch timeupdate events during ad playback. -- Fixed an issue where doing consecutive source changes in quick succession would result in an indefinite freeze on THEOlive sources. - -### tvOS - -#### ๐Ÿ› Issues - -- Fixed an issue that prevented playing IMA ads on tvOS. - -## ๐Ÿš€ 8.11.0 (2025/02/08) - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- Updated the LCEVC integration compatibility for the new LCEVCdecJS SDK version 1.2.0. This breaks compatibility with prior versions. For more info check our [LCEVC doc page](https://www.theoplayer.com/docs/theoplayer/getting-started/sdks/web/how-to-play-an-lcevc-source-with-theoplayer/). - -#### โœจ Features - -- Added native support for HbbTV devices without MSE support and added a flag useOipfDrmAgent to configure the player to use the native HbbTV DRM flow instead of using EME. -- Added `GoogleDAIConfiguration.networkCode`. - -#### ๐Ÿ› Issues - -- Fixed an issue where the browser's decoder could crash on some streams when the player performs a gap jump at the start of the video. The player will now wait a little bit to give the browser a chance to jump this gap on its own, without having to reset its decoder. -- Fixed an issue where a THEOads ad break could end early if the Google IMA SDK sends an incorrect period ended event. -- Fixed THEOads overlays not using the default properties on phone and TV devices. -- Fixed `GoogleDAIConfiguration.authToken` and `.streamActivityMonitorID` not working properly. -- Fixed an issue where author-defined TTML styles such as `tts:color` were not respected. -- Fixed an issue where playing a THEOads stream in native PiP would not dispatch any play/pause events. -- Fixed an issue where playing a THEOads ad in native PiP would dispatch an incorrect ended event at the end of the ad break. - -### Android - -#### โœจ Features - -- Added RetrievePodId parameter for THEOAds source description as an experimental API. -- Improved the Ad events for THEOads streams. - -#### โšก Improvements - -- Improved support for `player.preload = PreloadType.METADATA` in the Media3 integration. The player now fires a `loadedmetadata` event when preloading is complete, and populates `player.duration` and `player.seekable`. -- Improved startup times and initial latency for THEOlive streams. - -#### ๐Ÿ› Issues - -- Fixed an issue where creating or accessing a CachingTask would cause a crash. -- Fixed an issue where Millicast sources would be stretched instead of keeping the aspect ratio. - -### iOS - -#### โœจ Features - -- Added `connectOptions` property to `MillicastSource` initializer to help configure client options for a specific source. -- Added `preventsDisplaySleepDuringVideoPlayback` API to help configure enabling screen locking. -- Introduced `MillicastEventTypes.ERROR` to `THEOplayerMillicastIntegration` for error dispatching. Use the `addEventListener` method on `MillicastIntegration` to listen to Millicast related events. For more info check the API reference at https://www.theoplayer.com/docs/theoplayer/v8/api-reference/ios/Millicast/ - -#### โšก Improvements - -- Improved playback event dispatching system while Airplaying a THEOlive source. - -#### ๐Ÿ› Issues - -- Fixed an issue that caused a fatal error when accessing an expired caching task. -- Fixed an issue where the picture-in-picture presentation mode was not retained after setting a new source. -- Fixed an issue where a THEOlive source would not resume after being paused for too long. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated the `src` property's type. With the next major version the type will be `String` instead of `URL`. - -## ๐Ÿš€ 8.10.0 (2025/01/27) - -### Web - -#### โœจ Features - -- Added native support for HbbTV 1.5. - -#### โšก Improvements - -- Ensure ads in SSAI play back at normal speed, but allow content to resume at the selected playback rate. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player could switch to the main audio track when seeking backwards on Tizen 2.4. -- Fixed an issue where sometimes the player failed to dispatch an `error` event when encountering a media decode error while playing an HLS stream. -- Fixed an issue where a THEOads ad break could be removed from the API before it has been fully played. -- Fixed an issue where going into native PiP during a THEOads adbreak would not play the ad in PiP mode. -- Fixed an issue where starting the stream in the middle of a THEOads ad break could falsely keep the player in a paused state. -- Fixed an issue where THEOads could get stuck at the end of the ad break on MacOS Safari and Firefox. -- Fixed an issue on Safari where a THEOads ad break could be interrupted by setting another ad break. -- Fixed an issue where the same THEOads ad break could be duplicated on the API. -- Fixed an issue where autoplay did not work when using THEOads on smart TV's. -- Fixed an issue with incorrect positioning and sizing of THEOads overlays. -- Fixed an issue where the player would trigger an unhandled promise rejection in Safari version 16 and lower. -- Fixed an issue where THEOads clickthrough didn't work properly. -- Fixed an issue on Firefox where a THEOads ad would be only half the width of what it should be. -- Fixed an issue where the player could show a black screen when going into a THEOads adbreak on MacOS Safari versions 16 and 17. - -### Android - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed `badnetworkMode` on THEOlive API. - -#### โœจ Features - -- Added the Media3 integration. This integration installs a new player backend built on top of [Jetpack Media3](https://developer.android.com/media/media3), which aims to provide more stable playback on a wider range of devices. - - Note that this integration is currently under active development, and some advanced player features may not yet be compatible with this new integration. - - For more information, see [our getting started guide](https://www.theoplayer.com/docs/theoplayer/v8/how-to-guides/android/media3/getting-started/). - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would not automatically retry loading THEOlive streams on recoverable errors. -- Fixed an issue where cues are not added all at once while sideloading thumbnails during MP4 playback. -- Fixed an issue where a source using THEOads would not start play-out. - -### iOS - -#### โœจ Features - -- Added [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/ios/millicast/getting-started/) integration for real-time streaming. The integration is available on Cocoapods and SPM. - -#### ๐Ÿ› Issues - -- Fixed an issue where background audio would not continue when in PiP mode and locking the screen. -- Fixed an issue where Play/Pause events were not dispatched correctly during playback of a THEOlive source while Airplaying. -- Fixed an issue where THEOlive sources would occasionally pause unexpectedly. - -### tvOS - -#### โœจ Features - -- Added [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/ios/millicast/getting-started/) integration for real-time streaming. The integration is available on Cocoapods and SPM. - -## ๐Ÿš€ 8.9.0 (2025/01/15) - -### General - -### Web - -#### โœจ Features - -- Added 'native-picture-in-picture' to 'Presentation' API as an experimental feature. -- Added a flag `segmentRelativeVttTiming` to `DashPlaybackConfiguration` to indicate whether segmented WebVTT files' timestamps should be considered relative to the segment start time. - -#### โšก Improvements - -- Improved the behavior of THEOads tune-in when using an alternative ad source. -- Improved the performance of HESP and THEOlive streams. - -#### ๐Ÿ› Issues - -- Fixed an issue where the THEOads overlays were not always attached to the content when the video aspect ratio and the player aspect ratio do not match. -- Fixed an issue for THEOads where the content could be incorrectly paused after transitioning from ad to content. -- Fixed the returned `buffered` for THEOads near adbreaks. - -### Android - -#### โœจ Features - -- Added `ID3Cue` interface with a `getFrame()` method, which provides a type-safe API to read the ID3 frame of an ID3 metadata cue. -- Google DAI [Ad](https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/apis#ima.dai.api.Ad) data is now exposed under `THEOAd` and `THEOAdBreak`. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated `sessionId` and `userId` options in `THEOLiveConfig` in favor of `externalSessionId`. This is now in line with the web player. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where paused caching tasks were evicted and entered error state after an application restarted. - -## ๐Ÿš€ 8.8.3 (2025/01/07) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where `seekable` would incorrectly be empty for DASH live streams. - -## ๐Ÿš€ 8.8.2 (2025/01/06) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where accessing `THEOplayerGlobal.getSharedInstance` before creating a THEOplayer View would cause an application crash. - -## ๐Ÿš€ 8.8.1 (2025/01/03) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where accessing `THEOplayerGlobal.getSharedInstance` for the first time from a thread other than the main thread would cause an application crash. - -## ๐Ÿš€ 8.8.0 (2024/12/30) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the beginning of the seekable range in a DASH live stream was jumping back and forth by a few seconds. -- Fixed an issue where a seek to the start of the seekable range would result in a seek to live for DASH live streams. -- Fixed an issue on Web and Android on content protected DASH streams where the player was still appending segments from adaptation sets that the DRM server did not return a key for. - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would dispatch incorrect play/pause events when playing a THEOads stream. -- Fixed an issue where the player would run out of buffer occasionally when playing DASH live streams with slight inconsistencies in segment start times between manifest updates. - -### iOS - -#### โšก Improvements - -- Google IMA and DAI ads now dispatch `ADD_AD_BREAK`, `UPDATE_AD_BREAK` and `REMOVE_AD_BREAK` events. - -#### ๐Ÿ› Issues - -- Fixed an issue where an `AdBreak`'s `maxRemainingDuration` property was not updated in IMA and DAI ads. - -## ๐Ÿš€ 8.7.0 (2024/12/16) - -### Web - -#### โœจ Features - -- Added support for Dolby Vision (`dvav`, `dva1`, `dvhe` `dvh1`) and Dolby Digital Plus (`ec-3`) codecs in HLS when the platform supports it. - -#### โšก Improvements - -- Improved the behavior of THEOads on smart TVs. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would sometimes stall when trying to switch between an alternative THEOad source and the content. -- Added in the missing `activequalitychanged` event for Millicast media. -- Fixed an issue where the player would sometimes repeatedly request the same segment in a DASH live stream when the segment overlaps with a previous segment. -- Fixed an issue where playback using the Microsoft WebView2 control with Edge Chromium v130 would fail due to incorrect functionality of `SourceBuffer.changeType`. - -### Android - -#### ๐Ÿ’ฅ Breaking Changes - -- Fixed an issue where THEOplayer ProGuard rules would affect the importing application builds. - - Depending on your project, you may need to add one or more of the following `dontwarn` rules to your application's ProGuard rules: - ``` - -dontwarn androidx.mediarouter.** - -dontwarn com.google.ads.interactivemedia.v3.api.** - -dontwarn com.google.android.gms.cast.framework.** - -dontwarn com.google.android.gms.common.GoogleApiAvailability - -dontwarn com.google.android.gms.security.** - -dontwarn com.google.gson.** - -dontwarn kotlin.jvm.internal.SourceDebugExtension - ``` - -#### ๐Ÿ› Issues - -- Fixed a `NullPointerException` crash when seeking in a Google DAI stream with snap back when there are no scheduled ad breaks. -- Fixed an issue where in some edge cases the player would throw a `NullPointerException` while playing a Google IMA ad. - -#### ๐Ÿ‘Ž Deprecations - -- The `GoogleImaAd` interface will be moved from the `core` Maven package to the `integration-ads-ima` package in the next major version, and will be moved from `com.theoplayer.android.api.ads.GoogleImaAd` to `com.theoplayer.android.api.ads.ima.GoogleImaAd`. You can already switch to the new class name today for your Kotlin code, to facilitate the migration. - -### iOS - -#### โœจ Features - -- Added support for picture in picture presentation mode on THEOlive sources. - -#### ๐Ÿ› Issues - -- Fixed an issue where `THEOplayer.autoplay` was not being set correctly. -- Fixed an issue where when returning to the sender from chromecast would cause audio and text tracks to be selected incorrectly. -- Fixed an issue where fatal errors were emitted when retrieving videoHeight, videoWidth, videoRect or setting the currentTime or programDateTime while playing a THEOlive source. -- Fixed an issue where the duration of THEOlive sources was not set correctly. -- Fixed an issue where the pause event is not dispatched when entering background mode while an IMA ad is active. - -### tvOS - -#### ๐Ÿ› Issues - -- Fixed an issue where fatal errors were emitted when retrieving videoHeight, videoWidth, videoRect or setting the currentTime or programDateTime while playing a THEOlive source. -- Fixed an issue where the duration of THEOlive sources was not set correctly. - -## ๐Ÿš€ 8.6.3 (2024/12/12) - -### Web - -#### โšก Improvements - -- Improved the UI for HESP streams when returning back to a muted tab on Chromium-based browsers. -- Improved playback of THEOlive streams on Vizio devices. - -### tvOS - -#### โœจ Features - -- Added a THEOlive integration with a `TheoLiveSource` to play [THEOlive](https://theo.live) channels using a THEOplayer on tvOS. - -## ๐Ÿš€ 8.6.2 (2024/12/10) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue on Web and Android on content protected DASH streams where the player tries to access adaptation sets that the DRM server did not return a key for. - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue where using an empty string as the token with DRM integration `vudrm` would cause an error. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where `THEOplayer.autoplay` was not being set correctly. - -## ๐Ÿš€ 8.6.1 (2024/12/05) - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where legacy player licenses without the features property were rejected. - -## ๐Ÿš€ 8.6.0 (2024/12/04) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the minimum and maximum playback rate in the latency configuration for an HESP stream were incorrectly reset after a buffer stall. -- Fixed an issue where no DRM license requests were sent for a DASH stream for which adaptation set switching is enabled and the PSSH does not appear inside the initialization segment. This relates to both web and Android. - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed currentServerLiveTime and currentLatency from experimental HESP API in favor of the latency API. - -#### โœจ Features - -- Added ad events for alternative THEOads ad sources. -- Exposed `description` on `GoogleImaAd`. -- Added the `player.addTextTrack()` API to be able to create an external text track. This track is mutable and can be filled with cues, allowing 3rd parties to add subtitles to the player in real-time. -- Added support for passing a `latencyConfiguration` in HESP and THEOlive sources. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `adend` and `adbreakend` events were not dispatched correctly when a THEOads adbreak ended. -- Fixed an issue where the player did not fire seeking and seeked events when seeking using the seek bar in the native fullscreen UI on iOS Safari (when allowNativeFullscreen is set to true). -- Added the `useAdUiElementForSsai` flag to the `GoogleImaConfiguration` player config to enable use of an ad UI element for Google DAI to allow ads with extra UI to be displayed, which is required in the EU. Note that enabling this flag disables THEO's default clickthrough element which had improved keyboard accessibility over the DAI ad ui element. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated streamName for Millicast sources in favor of the src property. -- Deprecated integration `theolive` in favor of type `theolive` for THEOlive sources. - -### Android - -#### โœจ Features - -- Added support for CEAX08 subtitles for HESP and THEOlive streams. - -#### ๐Ÿ› Issues - -- Fixed an issue where the UI overlay was not registered as a "friendly" obstruction with Google IMA and Google DAI. -- Fixed an issue where creating a CachingTask would cause a crash. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated `MillicastSource.Credential` in favor of `src` and inlined properties `streamAccountId`, `apiUrl` and `subscriberToken` directly on `MillicastSource`. - -### iOS - -#### โœจ Features - -- Added a THEOlive integration with a `TheoLiveSource` to play [THEOlive](https://theo.live) channels using a THEOplayer on iOS. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player license provided in the plist was not read properly. -- Fixed an issue where DAI `AdBreak`s returned by the `AdsEventTypes.AD_BREAK_BEGIN` event would have an inaccurate `timeOffset`. -- Fixed an issue where on iOS cues were skipped during the cue activation process. - -## ๐Ÿš€ 8.5.1 (2024/11/29) - -### Android - -#### โšก Improvements - -- Added `RenderingTarget.SURFACE_CONTROL` to help managing the `Surface` lifecycle during entering/exiting fullscreen. - - Note: `RenderingTarget.SURFACE_CONTROL` is only available for API level 29 and above. - -## ๐Ÿš€ 8.5.0 (2024/11/19) - -### Web - -#### โœจ Features - -- Added support for Millicast audio-only streams. -- Added audio track events for Millicast audio tracks. -- Added support for chromecasting and airplaying THEOlive streams (with higher latency). - -#### โšก Improvements - -- Improved error reporting when an asset cannot be played because of lack of DRM support in the platform. -- Updated documentation to clearly state the incompatibility of VMAP ads with `timeOffset` and added in warnings for when it happens anyway. - -#### ๐Ÿ› Issues - -- Fixed an issue where the `ended` event would no longer fire when seeking to the end of a stream while the player is paused in Chrome. -- Fixed a memory leak for HESP streams. -- Fixed an issue where snapback on Google DAI streams would behave incorrectly when seeking forward or into an adbreak. -- Fixed an issue where Airplay failed to start playing. - -### Android - -#### โœจ Features - -- Added `MillicastSource.option` to set additional subscriber options for a [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/millicast/getting-started/) stream. -- Added support for CMCD in TheoLive. - -#### ๐Ÿ› Issues - -- Fixed an issue where attempting to load an MP4 or MP3 source that is not allowed by the player's license would crash the app instead of dispatching an `ErrorEvent`. -- Fixed an issue where switching video tracks in a Millicast stream would show frames from both the old and new video track. -- Fixed an issue where VMAP mid-roll ads were not being played. - -### iOS - -#### โšก Improvements - -- Removed extra play/pause events after preroll ads. - -#### ๐Ÿ› Issues - -- Fixed an issue on the cue activation algorithm for iOS, that was preventing cues from being activated (i.e 'entered'). - -## ๐Ÿš€ 8.4.2 (2024/11/14) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where the player was stuck on a black screen indefinitely after transitioning to or from full screen. - -## ๐Ÿš€ 8.4.1 (2024/11/12) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue on Android where the player would crash when destroying an instance with a cast integration. - -## ๐Ÿš€ 8.4.0 (2024/11/05) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where a multi-period DASH stream containing the same segment in two consecutive periods could cause the player to keep requesting the same segment. - -### Web - -#### โœจ Features - -- Added `MillicastSource.connectOptions` to set additional subscriber options for a [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/web/millicast/getting-started/) stream. - -#### โšก Improvements - -- Improve the native fullscreen UI on older Safari versions when playing live streams. - -#### ๐Ÿ› Issues - -- Fixed an issue where attempting to play VR content with WebXR on Meta Quest devices would cause a browser crash. - -### Android - -#### โœจ Features - -- Added the [THEOlive](https://theo.live) integration for enabling THEOlive playback as part of the standard THEOplayer SDK. - -#### โšก Improvements - -- `THEOplayerView.getCast()` is now non-null. When the Chromecast integration is not (yet) registered, this API returns default values but already allows attaching event listeners. - -#### ๐Ÿ› Issues - -- Fixed a crash that could occur during mp3/mp4 playback due to a `java.lang.IllegalStateException`. -- Fixed an issue where an `IOException` during mp3 playback could cause an application crash. - -## ๐Ÿš€ 8.3.0 (2024/10/22) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the player did not consistently request blocking playlist updates when playing a low-latency HLS stream. -- Fixed an issue where the player would switch to requesting full segments instead of partial segments after a quality switch when playing a low-latency HLS stream. - -### Web - -#### โœจ Features - -- Added [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/web/millicast/getting-started/) support for real-time streaming. - -#### โšก Improvements - -- Optimized logic for updating `TextTrack.activeCues` to not always need to run on every animation frame. - -#### ๐Ÿ› Issues - -- Fixed an issue where THEOads was not enabled by default in the `@theoplayer/theoads` package. -- Fixed an issue on Safari where ID3 cues were not correctly removed once they are no longer inside the player's live seekable range. -- Fixed an issue in Safari on iOS 18 where native metadata cues with type `com.apple.quicktime.HLS` were not being cleaned up properly and could leak memory. - -### Android - -#### โšก Improvements - -- Added `AdClickedEvent` to detect interactions with the "Learn More" button on Google IMA. - -#### ๐Ÿ› Issues - -- Fixed an issue where the ReadyState and the relevant events were not correctly dispatched while playing an MP3 source. -- Fixed an issue where tracks were not loaded by the time the `LOADEDMETADATA` event was triggered. -- Fixed missing API documentation for the Millicast integration. It is now available on [our documentation website](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/android/com/theoplayer/android/api/millicast/package-summary.html). -- Fixed an issue in the Millicast integration where the player would incorrectly try to re-subscribe to an already subscribed stream after returning the app from the background. - -### iOS - -#### โœจ Features - -- ID3 cue endTimes are now updated when receiving a new entry. - -#### โšก Improvements - -- Introduced a new Swift Package repository (SPM) to avoid slow startup times in Xcode when depending on THEOplayer using SPM. For more information please visit โ€œhttps://github.com/theoplayer/theoplayer-sdk-appleโ€. -- Outdated text track cues that fall out of seekable time ranges are now removed. -- Added `AdClickedEvent` to detect interactions with the "Learn More" button on Google IMA. - -#### ๐Ÿ› Issues - -- Fixed an issue where on iOS15+ devices playback would pause when returning from backgroundAudio playout when the player went through a view hierarchy change. - -### Chromecast - -#### ๐Ÿ› Issues - -- Fixed an issue where HLS streams were showing no video when casting to a Chromecast v2 receiver and only audio would be played. - -## ๐Ÿš€ 8.2.2 (2024/10/16) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an audio glitch that occurred when transitioning to background audio playback. -- Fixed an issue on Android where the player would sometimes crash when setting a new source after play-out of the old source had already started. - -## ๐Ÿš€ 8.2.1 (2024/10/14) - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue where THEOads was not enabled by default in the `@theoplayer/theoads` package. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where playback on iOS 15+ devices would pause when returning from a `backgroundAudio` playout after the player went through a view hierarchy change. - -## ๐Ÿš€ 8.2.0 (2024/10/10) - -### General - -#### โœจ Features - -- Added THEOads API to allow to changing the ad tag parameters via `player.ads.theoads.replaceAdTagParameters`. - -#### โšก Improvements - -- Prevent unnecessary first seek when starting playback at the beginning of a VoD source for DASH, to improve startup times on lower-end smart TVs. - -#### ๐Ÿ› Issues - -- Fixed an issue where the latency manager would not be automatically enabled when overriding the source with another source containing a `SourceLatencyConfiguration`. -- Fixed an issue where the player would sometimes skip some segments when playing certain MPEG-DASH live streams with slightly misaligned segments, which could result in excessive gap jumping and stalling. -- Fixed an issue where the player could stall indefinitely when playing an HLS stream with misaligned discontinuities on macOS Safari and other WebKit-based browsers. - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- In order to use THEOads, you now need to set [`PlayerConfiguration.ads.theoads`](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/web/interfaces/AdsConfiguration.html#theoads) to `true`. Users of the [@theoplayer/theoads](https://www.npmjs.com/package/@theoplayer/theoads) package can temporarily keep using THEOads without updating their player configuration. - -#### โœจ Features - -- Added support for CEA-608 and CEA-708 subtitles for HESP streams. -- Added support for THEOlive sources. -- Fixed an issue where the player could remain stuck retrying offline HLS media playlists even after a new source is set. - -#### ๐Ÿ› Issues - -- Fixed an issue where some HESP streams would not play on iOS \<17.1 devices. - -### Android - -#### โœจ Features - -- Added [Millicast](https://www.theoplayer.com/docs/theoplayer/how-to-guides/android/millicast/getting-started/) integration for real-time streaming. The integration is available on [our Maven repository](https://maven.theoplayer.com/) as `com.theoplayer.theoplayer-sdk-android:integration-millicast`. -- Added `TheoAdsIntegration.replaceAdTagParameters()` to allow changing ad tag parameters for THEOads dynamically. - -#### ๐Ÿ› Issues - -- Fixed an issue where an HTTP 3xx redirect from `http://` to `https://` was not followed. -- Fixed an issue where multiple CANPLAYTHROUGH events were triggered -- Fixed an issue where THEOplayer licenses containing `ip-range()` source domains were not handled correctly. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the player automatically resumed playing after coming back from tapping the Learn more button during a Google IMA ad. - -## ๐Ÿš€ 8.1.2 (2024/10/02) - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where playing locally stored mp3 files caused a crash. - -## ๐Ÿš€ 8.1.1 (2024/09/27) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would error when a media key changes from `usable` to `output-restricted` while other qualities are still playable. - -### Web - -#### โœจ Features - -- Added subtitle styling support for TTML. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where playing long MP3 files could cause audio stuttering. - -## ๐Ÿš€ 8.1.0 (2024/09/24) - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue with the TypeScript type definitions where `ServerSideAdInsertionConfiguration.integration` did not allow for custom server-side ad integrations. -- Fixed an issue where the THEOads player would show the subtitles from the content stream while playing ads. -- Fixed an issue where the player could skip a playable FairPlay DRM source if the same source description also contained a source which did not use FairPlay DRM. -- Fixed an issue where audio tracks would be ordered differently when playing natively on iOS Safari. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where `SourceChangeEvent` would be triggered late when `autoplay` is set to true. -- Fixed an issue where going in and out of fullscreen would cause the playback to seek back. -- Fixed an issue where audio and video were not in sync for a few frames. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where in DAI live streams the ad countdown was missing. -- Fixed an issue where passing multiple `GoogleImaAdDescription`s as pre-roll ads would only playout one. - -## ๐Ÿš€ 8.0.1 (2024/09/11) - -### Web - -#### โœจ Features - -- Exposed the `adsmanagerloaded` event on the `player.ads` API to access the Google IMA AdManager. - -## ๐Ÿš€ 8.0.0 (2024/09/09) -### Officially announcing THEOplayer 8.0 -Introducing a major version bump to THEOplayer 8.0. This version officially releases all the improvements and developments THEOplayer has achieved since version 7.0. - -THEOplayer 8.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. - -- THEOplayer 8.0 is the first official release with support for [THEOads](https://www.theoplayer.com/product/theoads), our new product for delivering seamless and novel ad experiences through Server Guided Ad Insertion. - -- The Custom Server Side Ad Insertion API allows custom SSAI integrations to control the player Ad API, and forms the basis for our new Yospace connectors for [Web](https://www.theoplayer.com/docs/theoplayer/connectors/web/yospace/), [Android](https://www.theoplayer.com/docs/theoplayer/connectors/android/yospace/) and [iOS](https://www.theoplayer.com/docs/theoplayer/connectors/ios/yospace/) as well as our upcoming Edgio Uplynk connectors. - -- The Latency Manager API allows fine-tuned control over live and low-latency playback for DASH, HLS and HESP, available on Web and Android. - -For more info on navigating our breaking changes, take a look at our migration guides for [Web](https://www.theoplayer.com/docs/theoplayer/v8/getting-started/sdks/web/migrating-to-theoplayer-8/), [Android](https://www.theoplayer.com/docs/theoplayer/v8/getting-started/sdks/android/migrating-to-theoplayer-8/) and [iOS](https://www.theoplayer.com/docs/theoplayer/v8/getting-started/sdks/ios/migrating-to-theoplayer-8/). - -### General - -#### โœจ Features - -- Custom server-side advertisement integrations are now stable. See the API documentation for [web](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/web/interfaces/Ads.html#registerServerSideIntegration.registerServerSideIntegration-1), [Android](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/android/com/theoplayer/android/api/ads/Ads.html#registerServerSideIntegration(java.lang.String,com.theoplayer.android.api.ads.ServerSideAdIntegrationFactory)) and [iOS](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/ios/Protocols/Ads.html). - -### Web - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed the Yospace pre-integration in favor of the new [Yospace web connector](https://www.theoplayer.com/docs/theoplayer/connectors/web/yospace/). -- Removed the Conviva pre-integration in favor of the new [Conviva web connector](https://www.theoplayer.com/docs/theoplayer/connectors/web/conviva/). -- Removed the empty `player.analytics` API. -- Renamed the default integration for client-side VAST and VMAP ads from `'theo'` to `'csai'`. Ad descriptions that don't specify an [integration](https://www.theoplayer.com/docs/theoplayer/v8/api-reference/web/interfaces/AdDescription.html#integration) or use the old name will continue to work, but will have their integration replaced with `'csai'` in the API. The new name was chosen to avoid confusion with our new THEOads solution for server-guided ad insertion. - -### Android - -#### ๐Ÿ’ฅ Breaking Changes - -- Removed deprecated UIConfiguration. -- Removed deprecated `AdIntegrationKind.DEFAULT`. -- Removed deprecated `HlsPlaybackConfiguration.isUseLegacy` flag. - -#### โšก Improvements - -- Make `CachingTaskList#getTaskById(String)` return `null` if no match is found. - -### iOS - -#### ๐Ÿ’ฅ Breaking Changes - -- Due to low number of usage of iOS 12, we decided to raise the minimum supported version of our iOS SDK to 13.0. This decision was based on metrics provided by Apple's iOS usage measures by devices that transacted on the App Store. For more info check `https://developer.apple.com/support/app-store/`. -- Removed deprecated `GoogleIMAAdsConfiguration` and `GoogleIMAConfigurationBuilder` APIs. Use `IMASettings` instead and pass it to `GoogleIMAIntegrationFactory.createIntegration`. For more info check https://www.theoplayer.com/docs/theoplayer/v8/getting-started/sdks/ios/migrating-to-theoplayer-8/ -- Removed deprecated `GoogleDAIAdsConfiguration` and `GoogleDAIAdsConfigurationBuilder` APIs. Use `IMASettings` instead and pass it to `GoogleIMAIntegrationFactory.createIntegration`. For more info check https://www.theoplayer.com/docs/theoplayer/v8/getting-started/sdks/ios/migrating-to-theoplayer-8/ -- Removed deprecated `AdsConfiguration` and `AdPreloadType` APIs. -- Removed deprecated `ScheduledAd` API. Change `Ads.scheduledAds` type from `ScheduledAd` to `Ad`. -- Removed deprecated `PiPConfiguration.init` API. Use `PiPConfigurationBuilder` instead. -- Removed deprecated `UIConfiguration` API. -- Removed deprecated `setPreload` and `setPlaybackRate` APIs. Use `preload` and `playbackRate` setters respectively. -- Removed deprecated `THEOplayerCastHelper` API. Use `THEOplayerGoogleCastIntegration.CastIntegrationHelper` instead. -- Changed `CompanionAd.width` and `CompanionAd.height` types from `Int?` to `Int`. -- Changed `Ad.adBreak` type from `AdBreak` to `AdBreak?`. Changed `Ad.companions` type from `[CompanionAd?]` to `[CompanionAd]`. -- Removed deprecated `THEOplayerConfiguration.init` API. Use `THEOplayerConfigurationBuilder` instead. -- Removed deprecated `ads`, `cast` and `ui` properties from `THEOplayerConfiguration` API. -- Removed obsoleted and deprecated `defaultKind`, `theo` and `freewheel` cases from `AdIntegrationKind` API. -- Bumped minimum supported GoogleCast xcframework version from 4.7.1 to 4.8.0. -- Removed unused `AdIntegration.theo` enum case in preparation for the new THEOads API. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecating all THEOplayer Objective-C API support. Existing APIs will still continue to work until next major release, but additional support for new APIs will discontinue. When it was introduced, the goal of the Objective-C APIs was to provide bindings to bridge our native SDK to React Native. Over time that became unneeded as Swift became capable of accomplishing the goal. Please contact us for support in case your codebase relies on the Objective-C APIs. - -### tvOS - -#### ๐Ÿ’ฅ Breaking Changes - -- Raising the tvOS minimum supported version of our tvOS SDK to 13.0 for consistency with iOS version. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecating all THEOplayer Objective-C API support. Existing APIs will still continue to work until next major release, but additional support for new APIs will discontinue. When it was introduced, the goal of the Objective-C APIs was to provide bindings to bridge our native SDK to React Native. Over time that became unneeded as Swift became capable of accomplishing the goal. Please contact us for support in case your codebase relies on the Objective-C APIs. - -## ๐Ÿš€ 7.12.0 (2024/09/05) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the player could stall indefinitely when playing or seeking in an HLS stream with misaligned discontinuities. - -### Web - -#### โœจ Features - -- Added `Ad.customData` and `AdBreak.customData`, which can be populated with integration-specific data by a [custom SSAI integration](https://www.theoplayer.com/docs/theoplayer/v7/api-reference/web/interfaces/Ads.html#registerServerSideIntegration). - -#### โšก Improvements - -- Do not report the HESP latency when paused or when recovery seeking as these values don't have semantic meaning. - -### Android - -#### โœจ Features - -- Added `headers` property to `TypedSource`. The player will add the headers to the HTTP requests for the given `TypedSource`, only for mp3 and mp4 sources. -- Added `Ad.customData` and `AdBreak.customData`, which can be populated with integration-specific data by a [custom SSAI integration](https://www.theoplayer.com/docs/theoplayer/v7/api-reference/android/com/theoplayer/android/api/ads/Ads.html#registerServerSideIntegration(java.lang.String,com.theoplayer.android.api.ads.ServerSideAdIntegrationFactory)). - -#### ๐Ÿ› Issues - -- Fixed an issue where `player.getDuration()` was negative while playing a live stream on Chromecast. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated unused `AdIntegrationKind.DEFAULT`. - -### iOS - -#### โœจ Features - -- Added `headers` property to `TypedSource`. The player will add the headers to the HTTP requests for the given `TypedSource`. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated obsoleted `defaultKind`, `theo` and `freewheel` cases from `AdIntegrationKind`. - -## ๐Ÿš€ 7.11.0 (2024/08/26) - -### General - -#### โšก Improvements - -- Added support for the `urn:mpeg:dash:adaptation-set-switching:2016` property inside DASH SupplementalProperty. - -### Web - -#### โœจ Features - -- Added support for FLAC audio in CMAF HLS streams. - -#### โšก Improvements - -- Set an empty WAI-ARIA `role` attribute on the Web Worker iframe to make sure it is ignored by assistive technologies, such as screen readers. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would unmute after source changes and seeks on Tizen 2.4. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where no `sourcechange` event would be dispatched when resetting the player's source after play-out of a non-streamable asset. -- Fixed an issue where the Metrics API reported incorrect values. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated unused `UIConfiguration`. -- Deprecated unused `THEOplayerConfig#getUi()`. -- Deprecated unused `THEOplayerConfig.Builder#ui(UIConfiguration)`. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the picture-in-picture window would disappear after an ad preroll ends. - -## ๐Ÿš€ 7.10.0 (2024/08/12) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the player would not do ABR for audio only HLS streams. -- Fixed an issue where the player would stall indefinitely on certain HLS streams with discontinuities. - -### Web - -#### ๐Ÿ› Issues - -- Fixed an issue with the positions top-left and top-right of picture-in-picture. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated the `'theo'` AdIntegrationKind and `THEOplayerAdDescription`. The functionality of the default client-side ad integration remains identical but is now renamed to AdIntegrationKind `'csai'` and the associated `CsaiAdDescription`. Ad descriptions that don't explicitly configure `integration` will for now still default to `'theo'` until THEOplayer 8.0, starting from which it will default to the new `'csai'`. - -### Android - -#### โšก Improvements - -- Added support for generic ad event types (defined in [`AdsEventTypes`](https://www.theoplayer.com/docs/theoplayer/v7/api-reference/android/com/theoplayer/android/api/event/ads/AdsEventTypes.html)) to the Google IMA, Google DAI and MediaTailor integrations. -- All events will now be dispatched on the main thread. - -#### ๐Ÿ› Issues - -- Fixed an issue where the player could sometimes crash when starting a Chromecast session. -- Fixed an issue where hiding the player view until the `loadeddata` event breaks the playback. - -### iOS - -#### โœจ Features - -- Added support for sideloaded WebVTT thumbnails as metadata text tracks. The player will expose the thumbnails as a `TextTrack` via the `theoplayer.textTracks` API. - -## ๐Ÿš€ 7.9.0 (2024/07/31) - -### General - -#### โœจ Features - -- Added support for media track enabling / disabling for HESP streams (Safari on iOS \<17.1 devices not included). - -#### ๐Ÿ› Issues - -- Fixed an issue where the player could crash when processing an MPEG-TS segment containing a PES header split across multiple MPEG-TS packets. - -### Web - -#### โšก Improvements - -- Extended the functionality of source abr configuration properties `preferredAudioCodecs` and `preferredVideoCodecs` to apply throughout playback rather than only at the beginning. - -#### ๐Ÿ› Issues - -- Fixed several issues that would cause the player to get stuck resetting after a source change on older Tizen versions. -- Fixed an issue where source abr property `preferredAudioCodecs` would not be properly applied in case of multiple audio tracks of the same language with different codecs. - -#### ๐Ÿ‘Ž Deprecations - -- Deprecated the Conviva pre-integration in favor of the new [Conviva web connector](https://www.theoplayer.com/docs/theoplayer/connectors/web/conviva/). -- Deprecated the Yospace pre-integration in favor of the new [Yospace web connector](https://www.theoplayer.com/docs/theoplayer/connectors/web/yospace/). - -### Android - -#### โœจ Features - -- Added support for streaming advertisements (DASH/HLS) with Google IMA. - - It can be set by combining - [AdsRenderingSettings.setMimeTypes(List\ mimeTypes)](https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsRenderingSettings.html#public-abstract-void-setmimetypes-liststring-mimetypes) - along with `GoogleImaIntegration.setAdsRenderingSettings(adsRenderingSettings: AdsRenderingSettings?)` - or `GoogleImaIntegration.requestAds(adsRequest: AdsRequest, adsRenderingSettings: AdsRenderingSettings?)` - - Note that this will limit the playback of the ads to the ones with the specified mimeTypes, which means some ads might be skipped. -- Added support for using the experimental custom `Surface` to play advertisements. -- Added support for managing low-latency live playback via `Player.getLatencyManager()` API. - -#### โšก Improvements - -- Added ability to create `THEOplayerView` from non-Activity `Context`. - -#### ๐Ÿ› Issues - -- Fixed an issue where Chromecast did not start playing if the source URL did not have a file extension. -- Fixed an issue where cast crashed if one of the values in the metadata was null. -- Fixed an issue where the player could sometimes crash after stopping a Chromecast session. - -### iOS - -#### ๐Ÿ› Issues - -- Fixed an issue where the seeking and seeked events would fire twice while casting to AirPlay. -- Fixed an issue where the main content would load before ad pre-rolls. -- Fixed an issue where sideloading subtitles would fail. - -## ๐Ÿš€ 7.8.0 (2024/07/15) - -### Web - -#### โœจ Features - -- Added `MultiViewPlayer.ui` to access the UI of a multiview player. - -#### ๐Ÿ› Issues - -- Fixed `MultiViewPlayer.destroy()` to not remove the original container element from the DOM. -- Updated `MultiViewPlayerLayout` in the TypeScript type definitions to be a string union instead of an enum. -- Fixed an issue on older browsers (such as Samsung Tizen 2.4) where the player failed to load when `Symbol.iterator` is not defined. -- Fixed an issue on Tizen where seeking backwards after the stream ended could cause the player to be stuck in a playback loop and not ending again. -- Fixed an issue where Google IMA midroll and postroll ads were not preloaded. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where audio played on the phone instead of the connected headset after stopping Chromecast. -- Fixed an issue where the play/pause button was not working in a PiP window when targeting API 34 (or Android 14). -- Fixed an issue where caching sources would cause a runtime crash. - -#### ๐Ÿ‘Ž Deprecations - -- [Jitpack.io](https://jitpack.io/#com.theoplayer/theoplayer-sdk-android) is now deprecated in favor of the [THEOplayer Maven repository](https://maven.theoplayer.com/#/releases/com/theoplayer/theoplayer-sdk-android). - Starting from 8.0 we will no longer publish new versions of the THEOplayer Android SDK or connectors to Jitpack. - -### iOS - -#### โœจ Features - -- Added `player.ads.registerServerSideIntegration()` API for registering custom server-side advertisement integrations. This API is currently experimental. - -## ๐Ÿš€ 7.7.1 (2024/07/09) - -### Web - -#### ๐Ÿ› Issues - -- Fixed a regression where DASH playback could stall indefinitely after an HTTP request timed out on older browsers without `fetch()`. - -### Android - -#### ๐Ÿ› Issues - -- Fixed an issue where playback was not restoring after a poor network connection. - -## ๐Ÿš€ 7.7.0 (2024/07/01) - -### General - -#### โœจ Features - -- Added the ability in HLS to disable the video track (or audio track) on any stream, in order to play audio-only (or video-only). - -#### ๐Ÿ› Issues - -- Fixed an issue where for LL-HLS a race condition could potentially throw the error 'Internal error: attempted to download an incomplete segment'. -- Fixed an issue where the player could sometimes stall while playing an HLS stream with rounded `#EXTINF` durations. - -### Web - -#### ๐Ÿ› Issues - -- Fixed a regression where the player would throw an "Invalid UTF-8 detected" error when loading an HLS stream on an older browser without `fetch()` support and when using a network response interceptor. - -### Android - -#### โœจ Features - -- Added support for caching MP4 videos. - -#### ๐Ÿ› Issues - -- Fixed an issue where audio and text tracks restored to default when starting or stopping casting. -- Fixed an issue where media tracks were not updated after changing source while casting to Chromecast -- Fixed an issue where player paused when going to a fullscreen view during an IMA ad. - -### iOS - -#### โœจ Features - -- Added ActiveQualityChangedEvent which is fired by a MediaTrack when its activeQualityBandwidth property value changes. - -## ๐Ÿš€ 7.6.1 (2024/06/26) - -### General - -#### ๐Ÿ› Issues - -- Fixed an issue where the player could sometimes stall while playing an HLS stream with rounded `#EXTINF` durations. - -## ๐Ÿš€ 7.6.0 (2024/06/18) - -### Web - -#### ๐Ÿ› Issues - -- Fixed a memory leak where an `