/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @externs
*/
/**
* @typedef {{
* loadTimes: !Array.<number>,
* averageLoadTime: number,
* started: number,
* playedCompletely: number,
* skipped: number,
* errors: number
* }}
*
* @description
* Contains statistics and information about the current state of the player.
*
* @property {number} loadTimes
* The set of amounts of time it took to get the final manifest.
* @property {number} averageLoadTime
* The average time it took to get the final manifest.
* @property {number} started
* The number of ads started.
* @property {number} playedCompletely
* The number of ads played completely.
* @property {number} skipped
* The number of ads skipped.
* @property {number} errors
* The number of ads with errors.
* @exportDoc
*/
shaka.extern.AdsStats;
/**
* @typedef {{
* start: number,
* end: ?number
* }}
*
* @description
* Contains the times of a range of an Ad.
*
* @property {number} start
* The start time of the range, in milliseconds.
* @property {number} end
* The end time of the range, in milliseconds.
* @exportDoc
*/
shaka.extern.AdCuePoint;
/**
* @typedef {{
* id: ?string,
* startTime: number,
* endTime: ?number,
* uri: string,
* mimeType: ?string,
* isSkippable: boolean,
* skipOffset: ?number,
* skipFor: ?number,
* canJump: boolean,
* resumeOffset: ?number,
* playoutLimit: ?number,
* once: boolean,
* pre: boolean,
* post: boolean,
* timelineRange: boolean
* }}
*
* @description
* Contains the ad interstitial info.
*
* @property {?string} id
* The id of the interstitial.
* @property {number} startTime
* The start time of the interstitial.
* @property {?number} endTime
* The end time of the interstitial.
* @property {string} uri
* The uri of the interstitial, can be any type that
* ShakaPlayer supports (either in MSE or src=)
* @property {?string} mimeType
* The mimeType of the interstitial if known.
* @property {boolean} isSkippable
* Indicate if the interstitial is skippable.
* @property {?number} skipOffset
* Time value that identifies when skip controls are made available to the
* end user.
* @property {?number} skipFor
* The amount of time in seconds a skip button should be displayed for.
* Note that this value should be >= 0.
* @property {boolean} canJump
* Indicate if the interstitial is jumpable.
* @property {?number} resumeOffset
* Indicates where the primary playback will resume after the interstitial
* plays. It is expressed as a time lag from when interstitial playback was
* scheduled on the primary player's timeline. For live ad replacement it
* must be null.
* @property {?number} playoutLimit
* Indicate a limit for the playout time of the entire interstitial.
* @property {boolean} once
* Indicates that the interstitial should only be played once.
* @property {boolean} pre
* Indicates that an action is to be triggered before playback of the
* primary asset begins, regardless of where playback begins in the primary
* asset.
* @property {boolean} post
* Indicates that an action is to be triggered after the primary asset has
* been played to its end without error.
* @property {boolean} timelineRange
* Indicates whether the interstitial should be presented in a timeline UI
* as a single point or as a range.
*/
shaka.extern.AdInterstitial;
/**
* An object that's responsible for all the ad-related logic
* in the player.
*
* @interface
* @exportDoc
*/
shaka.extern.IAdManager = class extends EventTarget {
/**
* @param {string} locale
*/
setLocale(locale) {}
/**
* Called by the Player to provide an updated configuration any time it
* changes.
* Must be called at least once before init*().
*
* @param {shaka.extern.AdsConfiguration} config
*/
configure(config) {}
release() {}
onAssetUnload() {}
/**
* @param {?HTMLElement} adContainer
* @param {!shaka.Player} basePlayer
* @param {!HTMLMediaElement} baseVideo
*/
initInterstitial(adContainer, basePlayer, baseVideo) {}
/**
* @param {!HTMLElement} adContainer
* @param {!HTMLMediaElement} video
* @param {?google.ima.AdsRenderingSettings} adsRenderingSettings
*/
initClientSide(adContainer, video, adsRenderingSettings) {}
/**
* @param {!google.ima.AdsRequest} imaRequest
*/
requestClientSideAds(imaRequest) {}
/**
* @param {!google.ima.AdsRenderingSettings} adsRenderingSettings
*/
updateClientSideAdsRenderingSettings(adsRenderingSettings) {}
/**
* @param {!HTMLElement} adContainer
* @param {!shaka.net.NetworkingEngine} networkingEngine
* @param {!HTMLMediaElement} video
*/
initMediaTailor(adContainer, networkingEngine, video) {}
/**
* @param {string} url
* @param {Object} adsParams
* @param {string=} backupUrl
* @return {!Promise.<string>}
*/
requestMediaTailorStream(url, adsParams, backupUrl) {}
/**
* @param {string} url
*/
addMediaTailorTrackingUrl(url) {}
/**
* @param {!HTMLElement} adContainer
* @param {!HTMLMediaElement} video
*/
initServerSide(adContainer, video) {}
/**
* @param {!google.ima.dai.api.StreamRequest} imaRequest
* @param {string=} backupUrl
* @return {!Promise.<string>}
*/
requestServerSideStream(imaRequest, backupUrl) {}
/**
* @param {Object} adTagParameters
*/
replaceServerSideAdTagParameters(adTagParameters) {}
/**
* @return {!Array.<!shaka.extern.AdCuePoint>}
*/
getServerSideCuePoints() {}
/**
* @return {!Array.<!shaka.extern.AdCuePoint>}
*/
getCuePoints() {}
/**
* Get statistics for the current playback session. If the player is not
* playing content, this will return an empty stats object.
*/
getStats() {}
/**
* @param {shaka.extern.TimelineRegionInfo} region
*/
onDashTimedMetadata(region) {}
/**
* Fired when the manifest is updated.
*
* @param {boolean} isLive
*/
onManifestUpdated(isLive) {}
/**
* @param {shaka.extern.ID3Metadata} metadata
* @param {number} timestampOffset
*/
onHlsTimedMetadata(metadata, timestampOffset) {}
/**
* @param {shaka.extern.MetadataFrame} value
*/
onCueMetadataChange(value) {}
/**
* @param {!shaka.Player} basePlayer
* @param {!HTMLMediaElement} baseVideo
* @param {shaka.extern.HLSInterstitial} interstitial
*/
onHLSInterstitialMetadata(basePlayer, baseVideo, interstitial) {}
/**
* @param {!shaka.Player} basePlayer
* @param {!HTMLMediaElement} baseVideo
* @param {shaka.extern.TimelineRegionInfo} region
*/
onDASHInterstitialMetadata(basePlayer, baseVideo, region) {}
/**
* @param {shaka.extern.AdInterstitial} interstitial
*/
addCustomInterstitial(interstitial) {}
/**
* @param {string} url
* @return {!Promise}
*/
addAdUrlInterstitial(url) {}
};
/**
* A factory for creating the ad manager.
*
* @typedef {function():!shaka.extern.IAdManager}
* @exportDoc
*/
shaka.extern.IAdManager.Factory;
/**
* Interface for Ad objects.
*
* @extends {shaka.util.IReleasable}
* @interface
* @exportDoc
*/
shaka.extern.IAd = class {
/**
* @return {boolean}
*/
needsSkipUI() {}
/**
* @return {boolean}
*/
isClientRendering() {}
/**
* @return {boolean}
*/
isUsingAnotherMediaElement() {}
/**
* @return {number}
*/
getDuration() {}
/**
* Gets the minimum suggested duration. Defaults to being equivalent to
* getDuration() for server-side ads.
* @see http://bit.ly/3q3U6hI
* @return {number}
*/
getMinSuggestedDuration() {}
/**
* @return {number}
*/
getRemainingTime() {}
/**
* @return {number}
*/
getTimeUntilSkippable() {}
/**
* @return {boolean}
*/
isPaused() {}
/**
* @return {boolean}
*/
isSkippable() {}
/**
* @return {boolean}
*/
canSkipNow() {}
skip() {}
play() {}
pause() {}
/**
* @return {number}
*/
getVolume() {}
/**
* @param {number} volume
*/
setVolume(volume) {}
/**
* @return {boolean}
*/
isMuted() {}
/**
* @param {boolean} muted
*/
setMuted(muted) {}
/**
* @return {boolean}
*/
isLinear() {}
/**
* @param {number} width
* @param {number} height
*/
resize(width, height) {}
/**
* @return {number}
*/
getSequenceLength() {}
/**
* @return {number}
*/
getPositionInSequence() {}
/**
* @return {string}
*/
getTitle() {}
/**
* @return {string}
*/
getDescription() {}
/**
* @return {number}
*/
getVastMediaBitrate() {}
/**
* @return {number}
*/
getVastMediaHeight() {}
/**
* @return {number}
*/
getVastMediaWidth() {}
/**
* @return {string}
*/
getAdId() {}
/**
* @return {string}
*/
getCreativeAdId() {}
/**
* @return {string}
*/
getAdvertiserName() {}
/**
* @return {?string}
*/
getMediaUrl() {}
/**
* @return {number}
*/
getTimeOffset() {}
/**
* @return {number}
*/
getPodIndex() {}
};