Repository navigation
OptiView Ads SDK 1.2.1 - #936
theoplayer-bot[bot] wants to merge 4 commits into
Conversation
|
|
Automated review (Devin pr-review: Claude Fable, Gemini Argon, GPT Astra) of e09a621 documentation#936 — OptiView Ads SDK 1.2.1 Verdict: REQUEST CHANGES (light — one small commit on this branch; the generated drop itself is sound) Blockers / Should-fix (confirmed)
Nits
Requirements (no Jira ticket; derived from
Rejected reviewer claims: 0 — every finding was confirmed against the PR head and the SDK v1.2.1 sources; Astra's cross-fade finding was extended to iOS during verification. |
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
MaartenRimaux
left a comment
There was a problem hiding this comment.
Automated review (Devin pr-review: Claude Fable, Gemini Argon, GPT Astra) of e8980bb
documentation#936 — OptiView Ads SDK 1.2.1 Verdict: REQUEST CHANGES (light — two small edits on this branch; the generated drop and the new Roku guide are sound)
Re-review after the e09a621 review: on top of the bot's 1.2.1 regeneration of ads/static/ads/v2/api-reference/ (second bot commit 4b15be9 is an iOS-only DocC re-run — 400/400 sampled JSON files identical after key sorting), commits ccad219/e8980bb add the Roku bullet on ads/api/index.mdx#L41, the sidebar links, the two platform-list updates and a new roku.mdx guide. The guide checks out against dolby-ads-sdk v1.2.1 (roku/npm/README.md, roku/api/OptiViewAds.json, roku/sdk/components/OptiViewAds.xml, scripts/lib/roku-npm-package.mjs) and the THEOplayer getVideoNode claim against theoplayer-next/roku/src/components/THEOplayer/THEOplayer.xml:37; all 10 authored deep links into the reference resolve at HEAD; CI build + lint are green. What remains is the authored-docs consistency the earlier review asked for (four "Roku cannot" sentences untouched) and one copy-paste defect in the new snippet.
Blockers / Should-fix (confirmed — each posted as an inline comment)
- [SHOULD-FIX] Four other authored pages still say Roku cannot run SGAI / a client-side SDK — anchored on roku.mdx:10; the stale text is at google/dai.mdx:14, google/index.mdx:13, google/index.mdx:59, workflow-integration.md:44 (Fable, Gemini, Astra)
- [SHOULD-FIX] Integration snippet uses
m.video, which is never assigned — roku.mdx:55-57 vs L77-L78; copied as-is the firstreadyresult throws oninvalid(Fable, Gemini, Astra)
Nits
- [NIT] Prerequisites: network code is organization-level, not "on the channel"; PDT/format/rendition limits are SGAI-only per the reference's capabilities — roku.mdx:16-17 (Astra; network-code part found during verification)
- [NIT] SDK overview generalisations (adapter,
container,customAssetKey) no longer hold for Roku — optiview-ads-sdk/index.mdx:14 (Fable, Astra) - [NIT] Platform-guide lists in two other pages still omit Roku — player-integration/index.mdx:12; missing in workflow-integration.md:36 and getting-started/index.mdx:85 (Fable, Gemini)
Carried over from the e09a621 review (confirmed still present at HEAD, upstream dolby-ads-sdk — not re-posted inline): web/React Native references show Os, OsVersionRange, Platform, ExternalVendorConfiguration, LiveStartPushbackConfig as unlinked text with no page (web/interfaces/Targeting.html#L37-L43); Android/iOS TransitionConfig / TransitionType.FADE still describe the 300 ms cross-fade removed in 1.2.0 (android …/-transition-config/index.html#L96); AdBreakSkippedEvent summarised as "Base event interface."; Dokka --root--.html links. Fix upstream, then regenerate. (3/3)
Requirements (no Jira ticket; derived)
- Reference reflects SDK 1.2.1 on web/android/ios/react-native/roku, nothing leaked — met (content caveats: carried-over upstream items)
- Authored deep links into the reference resolve — met (10/10)
- New Roku platform reachable from the authored docs — met (API page, sidebar, SDK overview, player-integration overview)
roku.mdxfactually correct against the SDK and in sibling structure — met, with items 2 and the prerequisites nit- Build + spellcheck — met (CI green at e8980bb;
ropmadded to the dictionary;brightscriptis a registered Prism language) - Other Roku-mentioning pages consistent with the guide — missing (item 1, nit 3)
Rejected reviewer claims: 0 — every finding was confirmed against the PR head, the SDK v1.2.1 sources and the THEOplayer Roku SDK; severities were re-graded (the m.video snippet to SHOULD-FIX, the overview and prerequisite points to NIT).
Reviewers: Fable REQUEST CHANGES (light) · Gemini REQUEST CHANGES · Astra REQUEST CHANGES
|
|
||
| On Roku, the OptiView Ads SDK is a SceneGraph component, `OptiViewAds`, for clear live HLS streams. Instead of a player adapter, it works with one `Video` node that your channel owns and never changes that node's source at an ad boundary: | ||
|
|
||
| - **Client-side stitching (SGAI):** the component replaces content segments with the Google Ad Manager pod at the break times in the channel's [Break Manifest](../../concepts/break-manifest.mdx). The player plays one continuous stream. |
There was a problem hiding this comment.
[SHOULD-FIX] Four other authored pages still say Roku cannot run SGAI / a client-side SDK
This bullet documents client-side Google Ad Manager pod stitching (SGAI) on Roku, and the SDK 1.2.1 changelog makes the Roku SDK non-experimental — but four sentences elsewhere in ads/ still tell readers the opposite, and none of those files is in this PR:
ads/integrations/google/dai.mdx:14— "Use Google DAI for platforms that cannot run the server-guided Google Pod Serving flow — such as Roku and older connected TV devices."ads/integrations/google/index.mdx:13— "Use this for platforms that cannot run the server-guided flow, such as Roku and older connected TV devices."ads/integrations/google/index.mdx:59— "Server-side insertion for platforms without server-guided support, such as Roku and older CTV devices."ads/how-to-guides/workflow-integration.md:44— "For platforms where a client-side SDK is not an option — such as Roku or older connected TV devices — OptiView Ads also supports server-side ad insertion (SSAI) through Google DAI."
Scenario: a Roku developer reading the Google integration or workflow guide is steered to Google DAI only, then lands on this page, which says the SDK stitches GAM pods client-side on Roku. This was flagged on e09a621 too; commits ccad219/e8980bb fixed the API-reference page, the sidebar and two platform lists, but not these sentences.
Fix: drop Roku from the "cannot" examples in all four sentences (e.g. "such as older connected TV devices without an OptiView Ads SDK"); optionally add that on Roku the SDK itself follows the Break Manifest's delivery rule and plays the Google DAI stream when SSAI is selected, as line 11 here already says.
| m.ads = CreateObject("roSGNode", "OptiViewAds") | ||
| m.top.AppendChild(m.ads) | ||
| m.ads.videoNode = m.top.FindNode("video") |
There was a problem hiding this comment.
[SHOULD-FIX] Integration snippet uses m.video, which is never assigned
The OnAdsOperation handler below (lines 77–78) does m.video.content = content / m.video.control = "play", but this setup snippet only binds m.ads.videoNode = m.top.FindNode("video") and never assigns m.video. Copied as-is into a component with <Video id="video" />, m.video is invalid and the first status = "ready" result throws Dot Operator attempted with invalid BrightScript Component or interface reference instead of starting playback. The SDK's own test app keeps the node in a variable and binds that (roku/test-app/components/SdkTestTheo.brs:41,51 at dolby-ads-sdk v1.2.1).
| m.ads = CreateObject("roSGNode", "OptiViewAds") | |
| m.top.AppendChild(m.ads) | |
| m.ads.videoNode = m.top.FindNode("video") | |
| m.video = m.top.FindNode("video") | |
| m.ads = CreateObject("roSGNode", "OptiViewAds") | |
| m.top.AppendChild(m.ads) | |
| m.ads.videoNode = m.video |
| 2. For [Google Pod Serving](../../integrations/google/pod-serving.mdx), configure the Google Ad Manager `networkCode` and `customAssetKey` on the channel. The Roku SDK reads them from the Break Manifest. | ||
| 3. The content must be clear (not DRM-protected) live HLS with `EXT-X-PROGRAM-DATE-TIME` tags, in MPEG-TS or CMAF, with up to eight renditions. |
There was a problem hiding this comment.
[NIT] Prerequisites: network code is organization-level; PDT/format/rendition limits are SGAI-only
Two precision issues in the prerequisites:
- Line 16 says to configure the
networkCode"on the channel". Perads/integrations/google/index.mdx:19-23the network code is organization-level (set up by the account team); only the custom asset key is configured on the channel (pod-serving.mdx:52-54), after which the Break Manifest carries both — which is what the Roku SDK reads (roku/sdk/source/OptiViewAds/ManifestPolicy.brs:9at v1.2.1). - Line 17 states the
EXT-X-PROGRAM-DATE-TIME/ MPEG-TS-or-CMAF / eight-rendition requirements unconditionally, but they are stitching (SGAI) requirements: the generated Roku reference's capabilities saysourceProgramDateTimeRequired— "SGAI needs EXT-X-PROGRAM-DATE-TIME on the content" andmaxRenditions: 8— "Maximum number of renditions stitched together" (roku/index.html:226,234); when the first manifest selects SSAI the SDK discards pending stitching failures and plays the Google DAI stream (SessionSsai.brs:122-137at v1.2.1). The clear-content (no DRM) requirement is unqualified in the capabilities, so it stays general.
| 2. For [Google Pod Serving](../../integrations/google/pod-serving.mdx), configure the Google Ad Manager `networkCode` and `customAssetKey` on the channel. The Roku SDK reads them from the Break Manifest. | |
| 3. The content must be clear (not DRM-protected) live HLS with `EXT-X-PROGRAM-DATE-TIME` tags, in MPEG-TS or CMAF, with up to eight renditions. | |
| 2. For [Google Pod Serving](../../integrations/google/pod-serving.mdx), enable it on the channel by configuring the channel's `customAssetKey`. The Roku SDK reads the Google Ad Manager `networkCode` and `customAssetKey` from the Break Manifest. | |
| 3. The content must be clear (not DRM-protected) live HLS. For client-side stitching (SGAI) it also needs `EXT-X-PROGRAM-DATE-TIME` tags, MPEG-TS or CMAF segments, and at most eight renditions. |
| - **Ad tracking and analytics:** the SDK reports the ad impressions and tracking events for the ads it plays. | ||
|
|
||
| The SDK is available for [Web](./web.mdx), [Android](./android.mdx), [iOS](./ios.mdx), and [React Native](./react-native.mdx). | ||
| The SDK is available for [Web](./web.mdx), [Android](./android.mdx), [iOS](./ios.mdx), [React Native](./react-native.mdx), and [Roku](./roku.mdx). |
There was a problem hiding this comment.
[NIT] SDK overview generalisations (adapter, container, customAssetKey) no longer hold for Roku
With Roku added to this list, the rest of the page still speaks for every platform: line 11 "renders the scheduled ads, including the different break layouts, on top of your content player" (on Roku the ads replace content in-stream and there are no layouts), line 18 "All player interaction goes through a small player adapter interface … ready-made adapters for popular players on each platform" (Roku binds a Video node; roku.mdx:8 says "Instead of a player adapter"), lines 31–32 player / container Required, and line 44 customAssetKey in the session configuration (Roku's startSession takes contentUrl / manifestUrl and reads the key from the manifest — roku/api/OptiViewAds.json startConfig at v1.2.1). A one-sentence qualifier here keeps the page accurate without rewriting it:
| The SDK is available for [Web](./web.mdx), [Android](./android.mdx), [iOS](./ios.mdx), [React Native](./react-native.mdx), and [Roku](./roku.mdx). | |
| The SDK is available for [Web](./web.mdx), [Android](./android.mdx), [iOS](./ios.mdx), [React Native](./react-native.mdx), and [Roku](./roku.mdx). The adapter and configuration model below applies to Web, Android, iOS, and React Native; on Roku the SDK is a SceneGraph component that binds your `Video` node directly and reads the Google configuration from the Break Manifest — see the [Roku page](./roku.mdx). |
| ## OptiView Ads SDK (recommended) | ||
|
|
||
| The [OptiView Ads SDK](./optiview-ads-sdk/index.mdx) lets you **bring your own player**. It handles the Break Manifest logic and ad tracking/analytics for you, while your application keeps full control over content playback. It is available for Web, Android, iOS, and React Native, with ready-made adapters for popular players. | ||
| The [OptiView Ads SDK](./optiview-ads-sdk/index.mdx) lets you **bring your own player**. It handles the Break Manifest logic and ad tracking/analytics for you, while your application keeps full control over content playback. It is available for Web, Android, iOS, React Native, and Roku, with ready-made adapters for popular players. |
There was a problem hiding this comment.
[NIT] Platform-guide lists in two other pages still omit Roku
The same list update is still missing in ads/how-to-guides/workflow-integration.md:36 ("see the platform guides for Web, Android, iOS, and React Native") and ads/getting-started/index.mdx:85 ("Follow the platform guide for Web, Android, iOS, or React Native"), so the new Roku guide is not discoverable from the getting-started or workflow entry points.
Fix: add [Roku](../player-integration/optiview-ads-sdk/roku.mdx) to the workflow guide's list (relative .mdx links, like its neighbours) and [Roku](/ads/player-integration/optiview-ads-sdk/roku) to the getting-started list (absolute paths, like its neighbours).
This PR contains the Web API reference for OptiView Ads SDK version 1.2.1.