Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 7 additions & 6 deletions theoplayer/api-reference/roku.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,13 @@ See [Roku's caption support guide](https://developer.roku.com/docs/developer-pro

### Ad Descriptions

| Name | Type | Description |
| -------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sources | AdSource or string | Either an AdSource or the URL of the ad XML to load. |
| integration | string | The kind of ad integration this uses. Currently the only supported value is `csai`. |
| timeOffset | string or number | An optional value determining when to show the ad. It can either be the number of seconds representing the timecode in the video when the ad should play, or it can be `start` or `end` to play the ad either before or after the video. Additionally it could be a percent of the content's duration, like `25%`, or a timecode in the format `HH:MM:SS`. NOTE: This is for VAST ads only. Do not use this with VMAP ads. |
| replaceContent | boolean | An optional value for whether this ad tag should replace content when the ad plays. Valid only for midrolls. Defaults to false. |
| Name | Type | Description |
| --------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sources | AdSource or string | Either an AdSource or the URL of the ad XML to load. |
| integration | string | The kind of ad integration this uses. Supported values are `csai`, `google-dai`, `theoads`, and `mediakind`. |
| timeOffset | string or number | An optional value determining when to show the ad. It can either be the number of seconds representing the timecode in the video when the ad should play, or it can be `start` or `end` to play the ad either before or after the video. Additionally it could be a percent of the content's duration, like `25%`, or a timecode in the format `HH:MM:SS`. NOTE: This is for VAST ads only. Do not use this with VMAP ads. |
| replaceContent | boolean | An optional value for whether this ad tag should replace content when the ad plays. Valid only for midrolls. Defaults to false. |
| adTagParameters | roAssociativeArray | Optional. Map of ad tag parameters configurable for ad targeting. Used for SSAI ad configurations. |

NOTE: when scheduling ads, VAST ads cannot be scheduled in the middle of the time covered by a VMAP ad tag. For instance, if you have a VMAP preroll and postroll in a single ad tag, you could not schedule midrolls in between them. However, if you had separate VMAP preroll and postroll tags, you could place a VAST midroll tag in between the two.

Expand Down
67 changes: 67 additions & 0 deletions theoplayer/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,73 @@ These are the release notes for THEOplayer 11.0.0 and higher. For older versions
- [Version 5.x and 6.x](https://optiview.dolby.com/docs/theoplayer/v6/changelog/)
- [Version 2.x, 3.x and 4.x](https://optiview.dolby.com/docs/theoplayer/v4/changelog/)

## 🚀 11.12.0 (2026/09/22)

### Web

#### ✨ Features

- Added support for restricting Millicast playback to specific accounts through `millicast://<streamAccountId>` source domain entries and implicitly allowed OptiView delivery domains.

#### ⚡ Improvements

- The Widevine service certificate and the FairPlay certificate provided by OptiView Live channel discovery are now used when starting playback, saving the certificate request. An empty certificate from discovery no longer overrides one configured on the source.
- Improved the transition into an OptiView Ads double box ad break that directly follows another ad break, and out of one that ends right after it began.

#### 🐛 Issues

- Fixed an issue where Google DAI streams could fail to play or report server-side ad beacons when cast to Chromecast.
- Fixed ABR not switching down to a lower quality when a segment download timed out while a response interceptor was registered, which could cause playback to stall while retrying the same quality and segment indefinitely.
- Fixed an issue on iOS Safari where the native `ended` event of a Google IMA ad played in the shared video element was reported as the content's `ended` event.
- Fixed an issue where the `textTrackStyle` margins were ignored for CEA-608 captions.
- Fixed an issue where an endpoint in an OptiView Live stream that fails the player's license check could prevent the player from falling back to a different endpoint.
- Fixed `player.autoplay = true` when the page is in the background. The player now waits until the page is brought to the foreground before attempting autoplay.
- Fixed an issue where a "Cannot read properties from undefined" error was thrown when attempting to play an OptiView Real-time (Millicast) stream when this feature isn't enabled in the player's license. The player now correctly reports a `LICENSE_INVALID_SOURCE` error instead.
- Fixed an issue where Dolby Vision (HEVC) content did not play on Edge for Windows when `preferredKeySystems` was omitted.
- Fixed an issue where the player would fire an early `playing` event with `PlayingEvent.currentTime = Infinity` when seeking to live on a paused HLS livestream. The `playing` event now fires after the seek completes, with the resolved `currentTime`.
- Fixed an issue where an OptiView Ads double box ad break would get stuck when closely followed by an L-shape ad break.

#### 👎 Deprecations

- Deprecated `allowMixedContent` on the `PlayerConfiguration` API. Use `network.allowMixedContent` instead.

### Android

#### ✨ Features

- Added support for restricting Millicast playback to specific accounts through `millicast://<streamAccountId>` source domain entries and implicitly allowed OptiView delivery domains.

#### 🐛 Issues

- Fixed an issue where the CMCD-States payload could grow without bound when an OptiView Live channel was repeatedly falling back, causing CDN log parsing to fail. At most 20 states are now shipped per request (the oldest are dropped and the number of dropped states is reported), and reason and error strings are limited to 128 characters.
- Fixed an issue where TTML subtitle cues without their own begin attribute inside a timed `<div>` were not shown.
- Fixed an issue where ABR could select the lowest quality at startup of a DASH or HLS stream on a fast network or with a saved bandwidth estimate, when the initial request stayed open for more than 100 ms.

### iOS

#### ✨ Features

- Added support for restricting Millicast playback to specific accounts through `millicast://<streamAccountId>` source domain entries and implicitly allowed OptiView delivery domains.

#### 🐛 Issues

- Fixed an issue where Picture-in-Picture would exit after an OptiView Ads double-box ad break that was presented inside the Picture-in-Picture window.
- Fixed missing or duplicate play events when explicitly starting or resuming Google IMA advertisements, and incorrect paused state while a pre-roll is pending.
- Fixed an issue in OptiView Ads where ad audio and UI would show over the content during an `LSHAPE_CONTENT` ad break.
- Fixed an issue in OptiView Ads where an ad break starting within 5 seconds after a double-box ad break would end prematurely.
- Fixed a rare crash when destroying the player while an OptiView Ads ad break was shown in picture-in-picture.

### Roku

#### ✨ Features

- The MediaKind connector can now send the X-TV3-Forwarded header on license and beacon requests.
- CMCD states now report what triggered them: a customer API call, a player-internal decision or a media element event.

#### 🐛 Issues

- Fixed an issue with the MediaKind Connector config where `debug` was not actually optional. Also added support for the `cdns` property to be the `cdns` object from the MediaKind roll call response. Also defaulted `enableCSB` to true.

## 🚀 11.11.0 (2026/09/10)

### General
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ <h3>Method Detail</h3>
<li class="blockList">
<h4>getExternalSessionId</h4>
<pre class="methodSignature"> final <a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a> <a href=CMCDConfiguration.html#getExternalSessionId()>getExternalSessionId</a>()</pre>
<div class="block"><p>An external session ID that can be used to identify the current playback session.</p></div>
<div class="block"><p>An external session ID that can be used to identify the current playback session.</p><p>Values longer than 128 characters are truncated when reported.</p></div>

<dl>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ <h4>getSessionId</h4>
<li class="blockList">
<h4>getExternalSessionId</h4>
<pre class="methodSignature"> final <a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a> <a href=CMCDSourceConfiguration.html#getExternalSessionId()>getExternalSessionId</a>()</pre>
<div class="block"><p>An external session ID that can be used to identify the current playback session.</p><p>Overrides the player-level <a href=CMCDConfiguration.html#externalSessionId>CMCDConfiguration.externalSessionId</a> when non-null.</p></div>
<div class="block"><p>An external session ID that can be used to identify the current playback session.</p><p>Overrides the player-level <a href=CMCDConfiguration.html#externalSessionId>CMCDConfiguration.externalSessionId</a> when non-null. Values longer than 128 characters are truncated when reported.</p></div>

<dl>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,17 @@ <h2 title="Class MillicastSource" class="title">Class MillicastSource</h2>
<dt>All Implemented Interfaces:</dt>
<dd>

<code>com.theoplayer.android.internal.source.MillicastSourceInfo</code>


</dd>
</dl>

<hr>
<pre class="wrap-overflow">

public final class <span class="typeNameLabel"><a href=MillicastSource.html>MillicastSource</a></span>
extends <a href=../source/TypedSource.html>TypedSource</a>
extends <a href=../source/TypedSource.html>TypedSource</a> implements MillicastSourceInfo
</pre>
<div class="block"><p>A source representing a Dolby Millicast stream.</p></div>

Expand Down Expand Up @@ -366,7 +369,7 @@ <h3>Method Summary</h3>
</tr>

<tr id="i0" class="altColor">
<td class="colFirst"><code>final <a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a></code>
<td class="colFirst"><code><a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a></code>
</td>
<th class="colSecond" scope="row"><code><a href=MillicastSource.html#getStreamAccountId()>getStreamAccountId</a>() </code>
</th>
Expand Down Expand Up @@ -497,7 +500,7 @@ <h3>Method Detail</h3>
>
<li class="blockList">
<h4>getStreamAccountId</h4>
<pre class="methodSignature"> final <a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a> <a href=MillicastSource.html#getStreamAccountId()>getStreamAccountId</a>()</pre>
<pre class="methodSignature"> <a href=https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html>String</a> <a href=MillicastSource.html#getStreamAccountId()>getStreamAccountId</a>()</pre>
<div class="block"><p>The account identifier.</p></div>

<dl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Core/AVAssetResourceLoaderProxy.swift",
"line": 290,
"line": 304,
"symbol": "AVAssetResourceLoaderProxy",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
Expand Down Expand Up @@ -329,6 +329,13 @@
"symbol_kind": "source.lang.swift.decl.struct",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Core/Models/Error/Errors/LicenseErrorImpl.swift",
"line": 29,
"symbol": "LicenseErrorImpl",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Core/Models/Player/Configurations/NetworkConfiguration.swift",
"line": 30,
Expand Down Expand Up @@ -912,7 +919,7 @@
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/ContentPlayers/AVQueingContentPlayer.swift",
"line": 473,
"line": 475,
"symbol": "AVQueuingContentPlayer",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
Expand Down Expand Up @@ -961,63 +968,63 @@
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 916,
"line": 926,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 927,
"line": 937,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 937,
"line": 947,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 961,
"line": 971,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 968,
"line": 978,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 1006,
"line": 1016,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 1022,
"line": 1032,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 1028,
"line": 1038,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
},
{
"file": "/Users/distiller/project/ios/THEOplayer_SDK/Native/Models/Player/THEOplayerInternalNative.swift",
"line": 1046,
"line": 1056,
"symbol": "THEOplayerInternalNative",
"symbol_kind": "source.lang.swift.decl.extension",
"warning": "undocumented"
Expand Down
Loading
Loading