@dolby-optiview/ads-sdk-core 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OptiViewAds.d.ts +5 -0
- package/dist/OptiViewAds.js +1 -1
- package/dist/diagnostics/dispatchDiagnostic.d.ts +4 -0
- package/dist/diagnostics/dispatchDiagnostic.js +1 -0
- package/dist/generated/diagnosticCodes.d.ts +104 -4
- package/dist/generated/diagnosticCodes.js +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.js +1 -1
- package/dist/interfaces/PlayerAdapter.d.ts +27 -0
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +1 -1
- package/dist/services/AdBreakSequencer.d.ts +67 -3
- package/dist/services/AdBreakSequencer.js +1 -1
- package/dist/services/AdPlayerController.d.ts +9 -4
- package/dist/services/AdPlayerController.js +1 -1
- package/dist/services/BookmarkStart.d.ts +12 -0
- package/dist/services/BookmarkStart.js +1 -0
- package/dist/services/BreakScheduler.d.ts +8 -35
- package/dist/services/BreakScheduler.js +1 -1
- package/dist/services/BreakSchedulerTypes.d.ts +7 -1
- package/dist/services/BreakWarningTracker.d.ts +6 -0
- package/dist/services/BreakWarningTracker.js +1 -0
- package/dist/services/ContentEndTracker.d.ts +17 -0
- package/dist/services/ContentEndTracker.js +1 -0
- package/dist/services/ExternalPlaybackGate.d.ts +2 -2
- package/dist/services/ManifestService.d.ts +1 -1
- package/dist/services/ManifestService.js +1 -1
- package/dist/services/PauseAdController.d.ts +9 -5
- package/dist/services/PauseAdController.js +1 -1
- package/dist/services/PlaybackCrossing.d.ts +4 -0
- package/dist/services/PlaybackCrossing.js +1 -0
- package/dist/services/RewindRearm.js +1 -1
- package/dist/services/SchedulerSnapback.d.ts +1 -0
- package/dist/services/SchedulerSnapback.js +1 -1
- package/dist/services/SlateClock.d.ts +22 -0
- package/dist/services/SlateClock.js +1 -0
- package/dist/services/SnapbackGuard.d.ts +36 -2
- package/dist/services/SnapbackGuard.js +1 -1
- package/dist/services/VastAdManager.d.ts +2 -0
- package/dist/services/VastAdManager.js +1 -1
- package/dist/services/adPlayer/AdPlayerCallbacks.d.ts +9 -1
- package/dist/services/adPlayer/AdPlayerEvents.d.ts +21 -1
- package/dist/services/adPlayer/AdPlayerEvents.js +1 -1
- package/dist/services/adPlayer/AdPlayerState.d.ts +13 -0
- package/dist/services/adPlayer/AdPlayerState.js +1 -1
- package/dist/services/adPlayer/AdPreloader.d.ts +8 -1
- package/dist/services/adPlayer/AdPreloader.js +1 -1
- package/dist/services/adPlayer/AdStage.js +1 -1
- package/dist/services/adPlayer/AssetPlayback.d.ts +1 -0
- package/dist/services/adPlayer/AssetPlayback.js +1 -1
- package/dist/services/adPlayer/BreakSequenceDriver.d.ts +7 -1
- package/dist/services/adPlayer/BreakSequenceDriver.js +1 -1
- package/dist/services/adPlayer/ContentResumeCoordinator.d.ts +6 -0
- package/dist/services/adPlayer/ContentResumeCoordinator.js +1 -1
- package/dist/services/adPlayer/PauseAdPresenter.d.ts +10 -9
- package/dist/services/adPlayer/PauseAdPresenter.js +1 -1
- package/dist/services/adPlayer/PauseAdTracking.d.ts +13 -0
- package/dist/services/adPlayer/PauseAdTracking.js +1 -0
- package/dist/services/adPlayer/SharedElementBreakPlayer.d.ts +31 -2
- package/dist/services/adPlayer/SharedElementBreakPlayer.js +1 -1
- package/dist/services/adPlayer/SlateCoordinator.d.ts +58 -0
- package/dist/services/adPlayer/SlateCoordinator.js +1 -0
- package/dist/services/adPlayer/SlatePlayback.d.ts +89 -0
- package/dist/services/adPlayer/SlatePlayback.js +1 -0
- package/dist/services/adPlayer/VariantSelector.d.ts +10 -1
- package/dist/services/adPlayer/VariantSelector.js +1 -1
- package/dist/services/adPlayer/connectPauseAd.js +1 -1
- package/dist/services/adPlayer/presentation/PresentationLayout.d.ts +5 -2
- package/dist/services/adPlayer/presentation/PresentationLayout.js +1 -1
- package/dist/services/breakTiming.d.ts +1 -0
- package/dist/services/breakTiming.js +1 -1
- package/dist/services/parseBreakManifest.d.ts +2 -1
- package/dist/services/parseBreakManifest.js +1 -1
- package/dist/services/parseVastPause.d.ts +18 -0
- package/dist/services/parseVastPause.js +1 -0
- package/dist/services/resolveLshapeAnchor.d.ts +25 -0
- package/dist/services/resolveLshapeAnchor.js +1 -0
- package/dist/services/resolveSlate.d.ts +25 -0
- package/dist/services/resolveSlate.js +1 -0
- package/dist/services/resolveSlateFill.d.ts +39 -0
- package/dist/services/resolveSlateFill.js +1 -0
- package/dist/services/ssbSwitchSignals.d.ts +3 -0
- package/dist/services/ssbSwitchSignals.js +1 -1
- package/dist/session/AdBreakStatusTracker.d.ts +22 -2
- package/dist/session/AdBreakStatusTracker.js +1 -1
- package/dist/session/BreakLifecycle.js +1 -1
- package/dist/session/ContentPlaybackStart.d.ts +23 -0
- package/dist/session/ContentPlaybackStart.js +1 -0
- package/dist/session/DiscoveredManifestUrl.d.ts +44 -0
- package/dist/session/DiscoveredManifestUrl.js +1 -0
- package/dist/session/ScheduledBreaksTracker.d.ts +22 -0
- package/dist/session/ScheduledBreaksTracker.js +1 -0
- package/dist/session/SessionStarter.d.ts +3 -9
- package/dist/session/SessionStarter.js +1 -1
- package/dist/session/SessionStarterDeps.d.ts +3 -0
- package/dist/session/SessionStarterHelpers.d.ts +22 -1
- package/dist/session/SessionStarterHelpers.js +1 -1
- package/dist/session/SessionState.d.ts +16 -0
- package/dist/session/SessionState.js +1 -1
- package/dist/session/SsbSwitch.js +1 -1
- package/dist/session/buildScheduledBreaks.d.ts +9 -0
- package/dist/session/buildScheduledBreaks.js +1 -0
- package/dist/session/contentSnapback.d.ts +2 -2
- package/dist/session/contentSnapback.js +1 -1
- package/dist/session/scheduledBreaksSession.d.ts +6 -0
- package/dist/session/scheduledBreaksSession.js +1 -0
- package/dist/types/BreakManifest.d.ts +39 -1
- package/dist/types/BreakManifest.js +1 -1
- package/dist/types/Events.d.ts +13 -4
- package/dist/types/OptiViewAdsConfig.d.ts +15 -2
- package/dist/types/ScheduledBreak.d.ts +17 -0
- package/dist/types/ScheduledBreak.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BreakEvent as t,Timebase as e,getBreakEvent as i}from"../types/BreakManifest";import{breakPlanEmptyReason as s}from"../services/AdBreakSequencer";export function buildScheduledBreaks(r,n={}){if(!r)return[];const o=[];for(const a of r.breaks){const d=i(a);if(null!==d&&d!==t.START&&d!==t.END)continue;const p=n.canPlay??(t=>null===s(t,"overlay"));if(n.excluded?.has(a.id)||!p(a))continue;const l=d===t.START?"pre":d===t.END?"post":"mid";let u="pre"===l?0:null,c=null;if("mid"===l)if(r.timebase===e.WALLCLOCK&&"string"==typeof a.start){const t=new Date(a.start);Number.isFinite(t.getTime())&&(c=t.toISOString())}else"number"==typeof a.start&&(u=r.timebase===e.MEDIATIME?a.start:n.mapPts?.(a.start)??null);o.push({id:a.id,position:l,startSec:u,startDate:c,durationSec:a.duration,played:n.played?.has(a.id)??!1})}const a={pre:0,mid:1,post:2},d=t=>t.startSec??(Date.parse(t.startDate??"")||0);return o.sort((t,e)=>a[t.position]-a[e.position]||("mid"===t.position?d(t)-d(e):0)||(t.id<e.id?-1:t.id>e.id?1:0))}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { PlayerAdapter } from '../interfaces/PlayerAdapter';
|
|
2
|
-
import { type Break } from '../types/BreakManifest';
|
|
2
|
+
import { type Break, type BreakFormat } from '../types/BreakManifest';
|
|
3
3
|
import type { SessionState } from './SessionState';
|
|
4
4
|
import type { BreakScheduler } from '../services/BreakScheduler';
|
|
5
5
|
/** VOD snapback is unavailable on TV browsers, including React Native web TV shells. */
|
|
6
|
-
export declare function configureVodSnapback(scheduler: BreakScheduler, player: PlayerAdapter, canPlay: (brk: Break) => boolean): void;
|
|
6
|
+
export declare function configureVodSnapback(scheduler: BreakScheduler, player: PlayerAdapter, canPlay: (brk: Break) => boolean, selectFormat?: (brk: Break) => BreakFormat | undefined): void;
|
|
7
7
|
export interface SnapbackDeps {
|
|
8
8
|
player: PlayerAdapter;
|
|
9
9
|
state: Pick<SessionState, 'snapbackSeekInFlight'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DeviceType as e}from"../types/BreakManifest";import{detectDeviceProfile as t}from"../services/detectDeviceType";export function configureVodSnapback(a,n,r){a.setSnapbackOnSeek(t().deviceType!==e.TV,r),a.setOnSnapback(e=>n.seek(e.target))}export function createSnapbackHandler(e){return()=>{if(e.state.snapbackSeekInFlight)return void(e.state.snapbackSeekInFlight=!1);e.onViewerSeek(),e.onSeeked?.();const t=e.activeBreak();if(!t?.controls?.snapback)return;const a="number"==typeof t.start?t.start:e.player.currentTime;Math.abs(e.player.currentTime-a)<=.5||(e.log("Snapback: seek detected during locked break, snapping back to break start"),e.state.snapbackSeekInFlight=!0,e.player.seek(a))}}
|
|
1
|
+
import{DeviceType as e}from"../types/BreakManifest";import{detectDeviceProfile as t}from"../services/detectDeviceType";export function configureVodSnapback(a,n,r,c){a.setSnapbackOnSeek(t().deviceType!==e.TV,r,c),a.setOnSnapback(e=>n.seek(e.target))}export function createSnapbackHandler(e){return()=>{if(e.state.snapbackSeekInFlight)return void(e.state.snapbackSeekInFlight=!1);e.onViewerSeek(),e.onSeeked?.();const t=e.activeBreak();if(!t?.controls?.snapback)return;const a="number"==typeof t.start?t.start:e.player.currentTime;Math.abs(e.player.currentTime-a)<=.5||(e.log("Snapback: seek detected during locked break, snapping back to break start"),e.state.snapbackSeekInFlight=!0,e.player.seek(a))}}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AdPlayerController } from '../services/AdPlayerController';
|
|
2
|
+
import type { MetadataCueTracker } from '../services/MetadataCueTracker';
|
|
3
|
+
import type { OptiViewAdsEventMap, OptiViewAdsEventType } from '../types/Events';
|
|
4
|
+
import { ScheduledBreaksTracker } from './ScheduledBreaksTracker';
|
|
5
|
+
export declare function createScheduledBreaksTracker(controller: () => AdPlayerController | undefined, cues: () => MetadataCueTracker | null, emit: (event: 'scheduledbreakschange', data: OptiViewAdsEventMap['scheduledbreakschange']) => void): ScheduledBreaksTracker;
|
|
6
|
+
export declare function noteScheduledBreakEvent(tracker: ScheduledBreaksTracker, event: OptiViewAdsEventMap[OptiViewAdsEventType]): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScheduledBreaksTracker as e}from"./ScheduledBreaksTracker";export function createScheduledBreaksTracker(a,r,d){return new e(e=>d("scheduledbreakschange",{type:"scheduledbreakschange",timestamp:Date.now(),breaks:e}),{canPlay:e=>null===a()?.breakNothingToPlayReason(e),mapPts:e=>r()?.mediaTimeForPts(e)??null})}export function noteScheduledBreakEvent(e,a){"adbreakbegin"===a.type&&e.markPlayed(a.break.id),"adbreakskipped"===a.type&&"overlap"===a.reason&&e.exclude(a.break.id)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Break Manifest types, per https://github.com/Dolby-OptiView/optiview-ads-manifest-spec/blob/v1.
|
|
1
|
+
/** Break Manifest types, per https://github.com/Dolby-OptiView/optiview-ads-manifest-spec/blob/v1.12.0/spec.md. */
|
|
2
2
|
/** Which 'time' reference break start times use. @category Break Manifests & Ad Formats */
|
|
3
3
|
export declare enum Timebase {
|
|
4
4
|
/** An absolute ISO-8601 timestamp */
|
|
@@ -111,9 +111,26 @@ export interface BreakManifest {
|
|
|
111
111
|
vendorConfiguration?: VendorConfiguration[];
|
|
112
112
|
/** Event-specific configuration windows on a wallclock live stream. */
|
|
113
113
|
events?: ChannelEvent[];
|
|
114
|
+
/** Media shown during the part of a break no ad covers (spec 1.12.0); absent when the channel has no slate. */
|
|
115
|
+
slate?: Slate;
|
|
114
116
|
/** The available breaks */
|
|
115
117
|
breaks: Break[];
|
|
116
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Media that replaces the ad during the part of a break no ad covers, until the break ends
|
|
121
|
+
* (manifest spec 1.12.0). Video loops from its start; an image stays visible.
|
|
122
|
+
* @category Break Manifests & Ad Formats
|
|
123
|
+
*/
|
|
124
|
+
export interface Slate {
|
|
125
|
+
/**
|
|
126
|
+
* Seconds (>= 0) of the break that must remain for the slate to start; `0` starts it for any
|
|
127
|
+
* remaining time.
|
|
128
|
+
* @default 5
|
|
129
|
+
*/
|
|
130
|
+
minDuration?: number;
|
|
131
|
+
/** Static assets without `duration`; the SDK plays the first, also when it cannot play it. */
|
|
132
|
+
assets: StaticAsset[];
|
|
133
|
+
}
|
|
117
134
|
/**
|
|
118
135
|
* An event window on a wallclock live stream and the session configuration in effect while it
|
|
119
136
|
* runs. Crossing its start or end emits `adchannelchange` with reason `event-boundary`.
|
|
@@ -297,15 +314,36 @@ export interface DoubleBreakVariant extends BaseBreakVariant {
|
|
|
297
314
|
/** Paired ad + companion assets. */
|
|
298
315
|
assets: AssetWithCompanion[];
|
|
299
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* The corner of the picture area the L-shape video box is anchored to (manifest spec 1.11.0).
|
|
319
|
+
* The box is 65% of the picture, inset 5% from the two edges of its corner.
|
|
320
|
+
* @category Break Manifests & Ad Formats
|
|
321
|
+
*/
|
|
322
|
+
export declare enum LshapeAnchor {
|
|
323
|
+
TOP_LEFT = "top_left",
|
|
324
|
+
TOP_RIGHT = "top_right",
|
|
325
|
+
BOTTOM_LEFT = "bottom_left",
|
|
326
|
+
BOTTOM_RIGHT = "bottom_right"
|
|
327
|
+
}
|
|
300
328
|
/** L-shape (ad) variant — content shrinks to pip, ad fills main area, companion fills the backdrop. Content pauses. @category Break Manifests & Ad Formats */
|
|
301
329
|
export interface LshapeAdBreakVariant extends BaseBreakVariant {
|
|
302
330
|
format: BreakFormat.LSHAPE_AD;
|
|
331
|
+
/**
|
|
332
|
+
* The corner the video box is anchored to. An unrecognised value renders `top_left`.
|
|
333
|
+
* @default LshapeAnchor.TOP_LEFT
|
|
334
|
+
*/
|
|
335
|
+
anchor?: LshapeAnchor;
|
|
303
336
|
/** Paired ad + companion assets. */
|
|
304
337
|
assets: AssetWithCompanion[];
|
|
305
338
|
}
|
|
306
339
|
/** L-shape (content) variant — content shrinks to pip and keeps playing, ad fills the main area. @category Break Manifests & Ad Formats */
|
|
307
340
|
export interface LshapeContentBreakVariant extends BaseBreakVariant {
|
|
308
341
|
format: BreakFormat.LSHAPE_CONTENT;
|
|
342
|
+
/**
|
|
343
|
+
* The corner the video box is anchored to. An unrecognised value renders `top_left`.
|
|
344
|
+
* @default LshapeAnchor.TOP_LEFT
|
|
345
|
+
*/
|
|
346
|
+
anchor?: LshapeAnchor;
|
|
309
347
|
/** Ad assets (no companion). */
|
|
310
348
|
assets: Asset[];
|
|
311
349
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export var Timebase;!function(e){e.WALLCLOCK="wallclock",e.PTS="pts",e.MEDIATIME="mediatime"}(Timebase||(Timebase={}));export function isGamVendorConfiguration(e){return"gam"===e.type}export var DeliveryMode;!function(e){e.SGAI="sgai",e.SSAI="ssai"}(DeliveryMode||(DeliveryMode={}));export var BreakEvent;!function(e){e.START="start",e.PAUSE="pause",e.END="end"}(BreakEvent||(BreakEvent={}));export var BreakFormat;!function(e){e.SINGLE="single",e.DOUBLE="double",e.LSHAPE_AD="lshape_ad",e.LSHAPE_CONTENT="lshape_content",e.OVERLAY="overlay"}(BreakFormat||(BreakFormat={}));export var DeviceType;!function(e){e.CONSOLE="console",e.DESKTOP="desktop",e.MOBILE="mobile",e.TABLET="tablet",e.TV="tv"}(DeviceType||(DeviceType={}));export var Platform;!function(e){e.WEB="web",e.ANDROID="android",e.IOS="ios",e.TVOS="tvos",e.ROKU="roku"}(Platform||(Platform={}));export var Os;!function(e){e.ANDROID="android",e.CHROMEOS="chromeos",e.IOS="ios",e.IPADOS="ipados",e.LINUX="linux",e.MACOS="macos",e.ROKUOS="rokuos",e.TIZEN="tizen",e.TVOS="tvos",e.VIZIO="vizio",e.WEBOS="webos",e.WINDOWS="windows",e.XBOX="xbox"}(Os||(Os={}));export var AssetType;!function(e){e.STATIC="static",e.VAST="vast",e.VENDOR="vendor"}(AssetType||(AssetType={}));export var MediaType;!function(e){e.VIDEO="video",e.IMAGE="image"}(MediaType||(MediaType={}));export var Vendor;!function(e){e.GAM="gam"}(Vendor||(Vendor={}));export function isEventTrigger(e){return"object"==typeof e&&null!==e&&"event"===e.type}export function getBreakEvent(e){return"pre"===e.position?BreakEvent.START:isEventTrigger(e.start)?e.start.event:null}export function isPauseBreak(e){return getBreakEvent(e)===BreakEvent.PAUSE}export function getPreRollDelay(e){return getBreakEvent(e)!==BreakEvent.START?null:"pre"===e.position?e.delay??0:isEventTrigger(e.start)?e.start.delay??0:0}export function isPostRollBreak(e){return getBreakEvent(e)===BreakEvent.END}export function getPostRollDelay(e){return isEventTrigger(e.start)&&e.start.event===BreakEvent.END?e.start.delay??0:null}export function isStaticAsset(e){return e.type===AssetType.STATIC}export function isVastAsset(e){return e.type===AssetType.VAST}export function isVendorAsset(e){return e.type===AssetType.VENDOR}
|
|
1
|
+
export var Timebase;!function(e){e.WALLCLOCK="wallclock",e.PTS="pts",e.MEDIATIME="mediatime"}(Timebase||(Timebase={}));export function isGamVendorConfiguration(e){return"gam"===e.type}export var DeliveryMode;!function(e){e.SGAI="sgai",e.SSAI="ssai"}(DeliveryMode||(DeliveryMode={}));export var BreakEvent;!function(e){e.START="start",e.PAUSE="pause",e.END="end"}(BreakEvent||(BreakEvent={}));export var BreakFormat;!function(e){e.SINGLE="single",e.DOUBLE="double",e.LSHAPE_AD="lshape_ad",e.LSHAPE_CONTENT="lshape_content",e.OVERLAY="overlay"}(BreakFormat||(BreakFormat={}));export var DeviceType;!function(e){e.CONSOLE="console",e.DESKTOP="desktop",e.MOBILE="mobile",e.TABLET="tablet",e.TV="tv"}(DeviceType||(DeviceType={}));export var Platform;!function(e){e.WEB="web",e.ANDROID="android",e.IOS="ios",e.TVOS="tvos",e.ROKU="roku"}(Platform||(Platform={}));export var Os;!function(e){e.ANDROID="android",e.CHROMEOS="chromeos",e.IOS="ios",e.IPADOS="ipados",e.LINUX="linux",e.MACOS="macos",e.ROKUOS="rokuos",e.TIZEN="tizen",e.TVOS="tvos",e.VIZIO="vizio",e.WEBOS="webos",e.WINDOWS="windows",e.XBOX="xbox"}(Os||(Os={}));export var LshapeAnchor;!function(e){e.TOP_LEFT="top_left",e.TOP_RIGHT="top_right",e.BOTTOM_LEFT="bottom_left",e.BOTTOM_RIGHT="bottom_right"}(LshapeAnchor||(LshapeAnchor={}));export var AssetType;!function(e){e.STATIC="static",e.VAST="vast",e.VENDOR="vendor"}(AssetType||(AssetType={}));export var MediaType;!function(e){e.VIDEO="video",e.IMAGE="image"}(MediaType||(MediaType={}));export var Vendor;!function(e){e.GAM="gam"}(Vendor||(Vendor={}));export function isEventTrigger(e){return"object"==typeof e&&null!==e&&"event"===e.type}export function getBreakEvent(e){return"pre"===e.position?BreakEvent.START:isEventTrigger(e.start)?e.start.event:null}export function isPauseBreak(e){return getBreakEvent(e)===BreakEvent.PAUSE}export function getPreRollDelay(e){return getBreakEvent(e)!==BreakEvent.START?null:"pre"===e.position?e.delay??0:isEventTrigger(e.start)?e.start.delay??0:0}export function isPostRollBreak(e){return getBreakEvent(e)===BreakEvent.END}export function getPostRollDelay(e){return isEventTrigger(e.start)&&e.start.event===BreakEvent.END?e.start.delay??0:null}export function isStaticAsset(e){return e.type===AssetType.STATIC}export function isVastAsset(e){return e.type===AssetType.VAST}export function isVendorAsset(e){return e.type===AssetType.VENDOR}
|
package/dist/types/Events.d.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { Break, Asset, BreakFormat } from './BreakManifest';
|
|
2
2
|
import type { SessionDeliveryMode } from './OptiViewAdsConfig';
|
|
3
|
+
import type { ScheduledBreak } from './ScheduledBreak';
|
|
4
|
+
/** Viewer-specific schedule changed by value. @category Events */
|
|
5
|
+
export interface ScheduledBreaksChangeEvent extends OptiViewAdsEvent {
|
|
6
|
+
type: 'scheduledbreakschange';
|
|
7
|
+
/** Independent snapshot of the current session schedule. */
|
|
8
|
+
breaks: ScheduledBreak[];
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* Lifecycle phase reported by {@link AdBreakStatus}.
|
|
5
12
|
* - `idle`: no break is upcoming or active.
|
|
6
13
|
* - `upcoming`: a break is scheduled in the future (including pre-break warnings).
|
|
7
14
|
* - `active`: a break is currently playing.
|
|
15
|
+
* - `complete`: an active break ended, including cuts/errors; emitted once before `idle` and `adbreakend`.
|
|
8
16
|
* @category Events */
|
|
9
17
|
export type AdBreakPhase = 'idle' | 'upcoming' | 'active' | 'complete';
|
|
10
18
|
/** Why a scheduled ad break was refused before it began (`adbreakskipped` event). @category Events */
|
|
@@ -17,7 +25,7 @@ export interface AdBreakSkippedEvent extends OptiViewAdsEvent {
|
|
|
17
25
|
}
|
|
18
26
|
/** Playback-gated snapshot of an ad break for UI countdowns (`adbreakstatus` event, `sdk.getAdBreakStatus()`). @category Events */
|
|
19
27
|
export interface AdBreakStatus {
|
|
20
|
-
/** Current lifecycle phase
|
|
28
|
+
/** Current lifecycle phase. `complete` is transient; polling after cleanup returns `idle`. */
|
|
21
29
|
phase: AdBreakPhase;
|
|
22
30
|
/** The break this status describes; `null` when `phase` is `idle`. */
|
|
23
31
|
break: Break | null;
|
|
@@ -25,13 +33,13 @@ export interface AdBreakStatus {
|
|
|
25
33
|
format?: BreakFormat | undefined;
|
|
26
34
|
/** Seconds until the break starts; for a pre-break warning, the countdown value when it fired. */
|
|
27
35
|
secondsUntilBreak?: number | undefined;
|
|
28
|
-
/** Estimated seconds left in the active break; `undefined` when not yet derivable (e.g. a backdrop break with no per-ad `timeupdate`). */
|
|
36
|
+
/** Estimated seconds left in the active break; zero on `complete`, not a measure of ads watched. `undefined` when not yet derivable (e.g. a backdrop break with no per-ad `timeupdate`). */
|
|
29
37
|
breakRemainingSec?: number | undefined;
|
|
30
38
|
/** 0-based index of the ad currently playing within the break. */
|
|
31
39
|
adIndex?: number | undefined;
|
|
32
40
|
/** Total number of ads in the break, when known. */
|
|
33
41
|
totalAds?: number | undefined;
|
|
34
|
-
/** Number of ads remaining including the currently playing one; after an ad ends, the ads still to come. */
|
|
42
|
+
/** Number of ads remaining including the currently playing one; after an ad ends, the ads still to come. Zero on `complete`, including cuts/errors. */
|
|
35
43
|
adsRemaining?: number | undefined;
|
|
36
44
|
/** Whether the countdown is advancing (ad rendered, playback progressing). `false` while buffering or before a held pre-roll's first frame. */
|
|
37
45
|
ticking: boolean;
|
|
@@ -47,7 +55,7 @@ export interface AdBreakStatus {
|
|
|
47
55
|
deliveryMode?: SessionDeliveryMode | undefined;
|
|
48
56
|
}
|
|
49
57
|
/** Event types emitted by the OptiViewAds SDK. @category Events */
|
|
50
|
-
export type OptiViewAdsEventType = 'adbreakbegin' | 'adbreakend' | 'adbreakskipped' | 'adbegin' | 'adend' | 'aderror' | 'adfirstquartile' | 'admidpoint' | 'adthirdquartile' | 'adtimeupdate' | 'adbreakstatus' | 'adclick' | 'waiting' | 'playing' | 'volumechange' | 'adchannelchange' | 'externalvendorconfigurationchange';
|
|
58
|
+
export type OptiViewAdsEventType = 'scheduledbreakschange' | 'adbreakbegin' | 'adbreakend' | 'adbreakskipped' | 'adbegin' | 'adend' | 'aderror' | 'adfirstquartile' | 'admidpoint' | 'adthirdquartile' | 'adtimeupdate' | 'adbreakstatus' | 'adclick' | 'waiting' | 'playing' | 'volumechange' | 'adchannelchange' | 'externalvendorconfigurationchange';
|
|
51
59
|
/** Which player a playback event originated from. @category Events */
|
|
52
60
|
export type PlaybackSource = 'ad' | 'content';
|
|
53
61
|
/** Base event interface. @category Events */
|
|
@@ -249,6 +257,7 @@ export interface ExternalVendorConfigurationChangeEvent extends OptiViewAdsEvent
|
|
|
249
257
|
}
|
|
250
258
|
/** Union type of all SDK events. @category Events */
|
|
251
259
|
export type OptiViewAdsEventMap = {
|
|
260
|
+
scheduledbreakschange: ScheduledBreaksChangeEvent;
|
|
252
261
|
adbreakbegin: AdBreakBeginEvent;
|
|
253
262
|
adbreakend: AdBreakEndEvent;
|
|
254
263
|
adbreakskipped: AdBreakSkippedEvent;
|
|
@@ -357,6 +357,13 @@ export interface OptiViewAdsConfig {
|
|
|
357
357
|
* @default false
|
|
358
358
|
*/
|
|
359
359
|
continueContentDuringBreak?: boolean;
|
|
360
|
+
/**
|
|
361
|
+
* Let `startSession()` run without `manifestUrl` by using the ads manifest URL the content
|
|
362
|
+
* player discovers (THEOplayer with a THEOlive source on web and Android). Off by default:
|
|
363
|
+
* `startSession()` then requires `manifestUrl`, and adapters do not observe discovery.
|
|
364
|
+
* @default false
|
|
365
|
+
*/
|
|
366
|
+
manifestUrlDiscovery?: boolean;
|
|
360
367
|
/**
|
|
361
368
|
* AirPlay (external playback) guard, active only when the manifest carries a server-side
|
|
362
369
|
* beaconing (`ssb`) stream and the content adapter can gate external playback.
|
|
@@ -408,8 +415,14 @@ export interface SsaiConfig {
|
|
|
408
415
|
}
|
|
409
416
|
/** Per-session configuration passed to startSession(); changes per piece of content. @category SDK & Sessions */
|
|
410
417
|
export interface SessionConfig {
|
|
411
|
-
/**
|
|
412
|
-
|
|
418
|
+
/**
|
|
419
|
+
* Full break-manifest URL. The SDK fetches exactly this URL and never rewrites it (proxied,
|
|
420
|
+
* signed or opaque endpoints all work). When omitted, the SDK uses the ads manifest URL the
|
|
421
|
+
* content player discovered (see `PlayerAdapter.discoveredAdsManifestUrl`); the session then
|
|
422
|
+
* also auto-restarts when the player reports a different discovered URL, and ends when the
|
|
423
|
+
* player reports there is none.
|
|
424
|
+
*/
|
|
425
|
+
manifestUrl?: string;
|
|
413
426
|
/**
|
|
414
427
|
* Ad insertion type for this content — how breaks relate to the content
|
|
415
428
|
* timeline (DAR vs DAI). `replacement` replaces a content window; `insertion`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Placement of a scheduled break on the content timeline. @category Playback & UI */
|
|
2
|
+
export type ScheduledBreakPosition = 'pre' | 'mid' | 'post';
|
|
3
|
+
/** Viewer-specific opportunity for scrubber markers. @category Playback & UI */
|
|
4
|
+
export interface ScheduledBreak {
|
|
5
|
+
/** Manifest break identifier. */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Placement relative to content playback. */
|
|
8
|
+
position: ScheduledBreakPosition;
|
|
9
|
+
/** Content seconds; zero for pre-roll, null for post-roll, live or unresolved PTS. */
|
|
10
|
+
startSec: number | null;
|
|
11
|
+
/** ISO 8601 start for wallclock timeline breaks; otherwise null. */
|
|
12
|
+
startDate: string | null;
|
|
13
|
+
/** Manifest break duration in seconds, not the remaining playback duration. */
|
|
14
|
+
durationSec: number;
|
|
15
|
+
/** True once this session emitted adbreakbegin for this identifier. */
|
|
16
|
+
played: boolean;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|