Skip to main content

Settings

What's settings?​

DIVA requires a 'settings' parameter during initialization.
This 'settings' parameter contains a series of configurations that will be applied to all video assets played by the player.

When using Deltatre Video Production and the DIVA BO Adapter, this 'settings' parameter will be included in a settings.json file along with other initialization parameters.

In the case of third-party integration, the 'settings' parameter is simply one of the initialization parameters.

DIVA BO settings​

(skip if not using DIVA BO)
settings is the JSON file that sets cross-platform behaviors.

Thesettings JSON file can be videoId-parametric (v.id) β€” this makes a single JSON file usable for sets of videos. E.g., within the videoData section, the videoDataPath value contains (v.id) to link the videoId-specific videoData file:

"videoDataPath": "https://example.com/fe/video/videodata/v2/{v.id}"

Unlike configuration (see Video player instantiation input), settings can change runtime.

settings

Settings sections​

Video player​

β”œβ”€ settings​

└─ general​

propertytypedefaultdescription
culturestring"{fe.cultureCode}"The culture code of the player
audioSelectionMethodstring"title"The method to find the audio track into the manifest
backgroundDurationThresholdnumbernullDefines the time interval in milliseconds the app must be in the background before requiring a player restart upon reactivation. Suggested value to be equal to heartbeat session expiration time or 60000) iOS logo
closedCaptionSelectionMethodstring"lang"The method to find the closed caption track into the manifest
backgroundImagestring""Path of the image to load as background of the player when autoplay is false
isCommentaryBadgeVisibleboolean"true"If true the badge positioned over the commentary button and contaning the unseen commentary items is visible
isCommentaryFilteredByChapterboolean"false"If true the user will see in the commentary area only the content present in the current chapter
isMiddleTimelineEventsLineEnabledboolean"false"If true put the icon without team information in the middle line when in match mode
isMultiViewModeSwitchEnabledboolean"false"If true user can switch from pipview to sidebyside multiview and viceversa
isVideoThumbnailPreviewEnabledboolean"false"If true the video thumbnail preview is enabled
isEndOfPlayEnabledboolean"false"If true the end of play feature is enabled
jumpLargeGapsboolean"false"If true it lets Diva to jump large gaps in Dash streams
liveBackOffnumber"0"Back off setting of the Diva player, sets the delay in milliseconds from the real live position
pipModeboolean"false"Whether to enable the Native PiP feature or not
relevantCommentaryStartsVisibleboolean"true"Starting value for the active state
resolveManifestUrlboolean"false"If true, the video URL is passed to the path resolver
smallGapLimitnumber"0.5"The limit (in seconds) for a gap in the media to be considered "small"
timeToDisableAutoplaynumber"5400000"Time to disable the autoplay at the end of the milliseconds set with no interactions (autoplay at End of Play)
trackVideoDataManifestboolean"true"If true, videoSource in external API will be the videodata one
videoAnalyticsEventFrequencynumber"120000"Frequency of sending D3_VIDEO_PLAYBACK_INFO_EVENT event
json sample
"settings": {
"general":{
"culture": "{fe.cultureCode}",
"audioSelectionMethod": "title",
"backgroundDurationThreshold": 6000,
"closedCaptionSelectionMethod": "lang",
"backgroundImage": "",
"isCommentaryBadgeVisible": true,
"isCommentaryFilteredByChapter": false,
"isMiddleTimelineEventsLineEnabled": false,
"isMultiViewModeSwitchEnabled": false,
"isVideoThumbnailPreviewEnabled": false,
"isEndOfPlayEnabled": false,
"jumpLargeGaps": false,
"liveBackOff": 1000,
"pipMode": true,
"relevantCommentaryStartsVisible": false,
"resolveManifestUrl": false,
"smallGapLimit": 5,
"timeToDisableAutoplay": 5400000,
"trackVideoDataManifest": false,
"videoAnalyticsEventFrequency": 30000
}
}

└─ colours​

default color: #CF030B

propertytypedefaultdescription
alertHighlightFgstring#CF030B(html5 only)
base2string#CF030BApplies
chatButtonBackgroundColor
controlbarProgressBarBg
if not specified
base3string#CF030BApplies
alertHighlightFg
highlightsTopBarBg
overlayHighlightFg
overlayHighlightFgLight
settingBtnBg
chatButtonBackgroundColorstringbase2
chromecastProgressBarBgstringcontrolbarProgressBarBgBackground of the Timeline progress bar on Chromecast Receiver App
controlbarProgressBarBgstringbase2Background of the Timeline progress bar
highlightsTopBarBgstringbase3(html5 only)
overlayHighlightFgstringbase3Highlighted elements in Diva overlays (tablet)
overlayHighlightFgLightstringbase3Highlighted elements in Diva overlays (mobile)
settingBtnBgstring#CF030B(html5 only)
json sample
"settings": {
"colours": {
"base2": "#EEE60C",
"base3": "#EEE60C",
"overlayHighlightFg": "#EEE60C",
"overlayHighlightFgLight": "#EEE60C",
"chatButtonBackgroundColor": "#EEE60C",
"controlbarProgressBarBg": "#EEE60C",
"chromecastProgressBarBg": "#EEE60C",
"alertHighlightFg": "#EEE60C",
"highlightsTopBarBg": "#EEE60C",
"settingBtnBg": "#EEE60C",
}
}

└─ videoCast​

propertytypedefaultdescription
castBackgroundstring""Url of the background image used in case of wrong or missing videoMetadata thumbnail image during the video cast. It passes through the path resolver. If missing, empty or wrong, no background image is used.
chromecastAppIDstring""It is the identifier of the Receiver App. The functionality is disabled if empty or invalid. NOTE: The appID must be exactly in the capitalisation provided by the Google console (typically, in uppercase).
isAirplayEnabledboolean"true"Enable the Airplay feature on Diva iOS and related icon. From 4.7.1 version if this is set to false and the user try to cast using the notification center the playback will stop with diva_airplay_forbidden_error
json sample
"settings": {
"videoCast":{
"castBackground": "https://example.com/fe/images/chromecastbg.png",
"chromecastAppID": "<app ID>",
"isAirplayEnabled": true
}
}

└─ shakaConfigOverrides​

These parameters are tailored to improve playback performance and enhance the reliability of Streaming Performance Indicators (SPI) by managing buffering, network resources, and data efficiency.
Check the Shaka Player configuration for more details.

propertytypedefaultdescription
shakaConfigOverridesobjectShaka Player configuration

└─ applePlayerConfiguration​

iOS only.
These parameters are tailored to improve playback performance and enhance the reliability of Streaming Performance Indicators (SPI) by managing buffering, network resources, and data efficiency.
Check the AVPlayer configuration for more details.

propertytypedefaultdescription
automaticallyWaitsToMinimizeStallingbooleannilA Boolean value that indicates whether the player should automatically delay playback in order to minimize stalling.
canUseNetworkResourcesForLiveStreamingWhilePausedbooleannilA Boolean value that indicates whether the player item can use network resources to keep the playback state up to date while paused.
preferredForwardBufferDurationAfterPlaynumbernilThe duration the player should buffer media from the network ahead of the playhead to guard against playback disruption. Applied right after playback is started.
preferredForwardBufferDurationAtStartnumbernilThe duration the player should buffer media from the network ahead of the playhead to guard against playback disruption. Applied right after player initialization.
preferredMaximumResolutionForExpensiveNetworksobjectnilAn upper limit on the resolution of video to download when connecting over expensive networks. Available starting iOS 15.
preferredPeakBitRatenumbernilThe desired limit, in bits per second, of network bandwidth consumption for this item.
preferredPeakBitRateForExpensiveNetworksnumbernilA limit of network bandwidth consumption by the item when connecting over expensive networks. Available starting iOS 15.
startsOnFirstEligibleVariantbooleannilA Boolean value that indicates whether playback starts with the first eligible variant that appears in the stream’s main playlist. Available starting iOS 14.
json sample
    "settings": {
"ApplePlayerConfiguration": {
"preferredMaximumResolutionForExpensiveNetworks":{
"width":30,
"height":20
},
"preferredPeakBitRate":10000,
"canUseNetworkResourcesForLiveStreamingWhilePaused":true,
"preferredForwardBufferDurationAtStart":20000,
"preferredForwardBufferDurationAfterPlay":30000,
"preferredPeakBitRateForExpensiveNetworks":200000,
"startsOnFirstEligibleVariant":true,
"automaticallyWaitsToMinimizeStalling":true
}
}

└─ AndroidPlayerConfiguration​

These parameters are tailored to improve playback performance and enhance the reliability of Streaming Performance Indicators (SPI) by managing buffering, network resources, and data efficiency.
Check the Exoplayer configuration for more details.

propertytypedefaultdescription
behindWindowJumptoliveboolean"false"The playback position may fall behind the live window so Diva player can jump to live position
blacklistedCodecsarray[]List of codecs to be blacklisted
retainBackBufferFromKeyframeboolean"false"Returns whether media should be retained from the keyframe before the current playback position minus getBackBufferDurationUs, rather than any sample before or at that position
prioritizeTimeOverSizeThresholdsboolean"false"Whether the load control prioritizes buffer time constraints over buffer size constraints.
bufferForPlaybackMsnumber0The duration of media that must be buffered for playback to start or resume following a user action such as a seek, in milliseconds.
minBufferMsnumber0The minimum duration of media that the player will attempt to ensure is buffered at all times, in milliseconds
maxBufferMsnumber0The maximum duration of media that the player will attempt to buffer, in milliseconds.
bufferForPlaybackAfterRebufferMsnumber0The default duration of media that must be buffered for playback to resume after a rebuffer, in milliseconds. A rebuffer is defined to be caused by buffer depletion rather than a user action.
targetBufferBytesnumber0The target buffer size in bytes
backBufferDurationMsnumber0The back buffer duration in milliseconds.
liveMinSpeednumber0The minimum playback speed the player can use to fall back when trying to reach the target live offset.
liveMaxSpeednumber0The maximum playback speed the player can use to catch up when trying to reach the target live offset.
liveMinOffsetMsnumber0The minimum allowed live offset. Even when adjusting the offset to current network conditions, the player will not attempt to get below this offset during playback.
liveMaxOffsetMsnumber0The maximum allowed live offset. Even when adjusting the offset to current network conditions, the player will not attempt to get above this offset during playback.
liveTargetOffsetMsnumber0The target live offset. The player will attempt to get close to this live offset during playback if possible.
fallbackMinPlaybackSpeednumber0The minimum playback speed that can be used for adjustment if neither the media nor the app-provided MediaItem define limits
proportionalControlFactornumber0Controls how smooth the speed adjustment is. A high value makes adjustments more sudden and reactive, but also more likely to be audible. A smaller value results in a smoother transition between speeds, at the cost of being slower.
targetLiveOffsetIncrementOnRebufferMsnumber0This value is added to the target live offset whenever a rebuffer occurs, in order to proceed more cautiously. This feature can be disabled by setting the value to 0.
minPossibleLiveOffsetSmoothingFactornumber0An exponential smoothing factor that is used to track the minimum possible live offset based on the currently buffered media. A value very close to 1 means that the estimation is more cautious and may take longer to adjust to improved network conditions, whereas a lower value means the estimation will adjust faster at a higher risk of running into rebuffers.
json sample
    "settings": {
"AndroidPlayerConfiguration":
{
"behindWindowJumptolive": true,
"retainBackBufferFromKeyframe": true,
"prioritizeTimeOverSizeThresholds": true,
"bufferForPlaybackMs": 2500,
"minBufferMs": 2500,
"maxBufferMs": 20000,
"bufferForPlaybackAfterRebufferMs": 2500,
"targetBufferBytes": 67108864,
"backBufferDurationMs": 4000,
"liveMinSpeed": 0.9,
"liveMaxSpeed": 4.1,
"liveMinOffsetMs": 10000,
"liveMaxOffsetMs": 30000,
"liveTargetOffsetMs": 20000,
"fallbackMinPlaybackSpeed": 0,
"proportionalControlFactor": 0,
"targetLiveOffsetIncrementOnRebufferMs": 0,
"minPossibleLiveOffsetSmoothingFactor": 0,
"blacklistedCodecs": [
"c2.android.avc.decoder",
"OMX.MTK.VIDEO.DECODER.AVC.secure",
"OMX.MTK.VIDEO.DECODER.AVC"
],
}
}

β”œβ”€ mediaAnalytics​

propertytypedefaultdescription
convivaobjectConviva analytics configuration
youboraobjectYoubora analytics configuration
openMeasurementobjectOpen Measurement analytics configuration
json sample
"settings": {
"mediaAnalytics": {
"conviva": {
"enabled": false,
"customerKey": "<conviva-customer-key>",
"playerName": "Diva",
"cdnName": "<CDN name>",
"touchstoneUrl": "https://touchstone.conviva.com/example/"
},
"youbora": {
"enabled": true,
"playerName": "Diva",
"cdnName": "<CDN name>",
"accountCode": "<account code>"
},
"openMeasurement": {
"enabled": true,
"partnerName": "<partner name>"
}
}
}

β”œβ”€ translations​

propertytypedefaultdescription
vocabularySourcestring""Dictionary path
json sample
"settings": {
"translations": {
"vocabularySource": "https://example.com/diva5/dictionaries/{fe.cultureCode}.json"
}
}

Video playback​

β”œβ”€ videoData​

propertytypedefaultdescription
retriesnumber4Number of the retries of the videodata call before sending an error
videoDataPathstring""URL of the videoData
videoDataPollingIntervalnumber20000Milliseconds interval between two videoData pollings
videoPlatformsPriorityobject
type
sourceName
drmtype
Ordered by priority, array of the DRM platforms used to stream the video DRM-protected
json sample
"settings": {
"videoData": {
"retries": 4,
"videoDataPath": "https://example.com/fe/video/videodata/v2/{v.id}",
"videoDataPollingInterval": 20000,
"videoPlatformsPriority": {
"default": [
{
"type": "DASH",
"sourceName": "Desktop-DASH",
"drmtype": "widevine"
},
{
"type": "HLS",
"sourceName": "Desktop-V4",
"drmtype": "fairplay"
}
],
"chromecast": [
{
"type": "DASH",
"sourceName": "Chromecast-DASH",
"drmtype": "widevine"
}
]
}
}
}

β”œβ”€ entitlementCheck​

propertytypedefaultdescription
dataobjectKey/value object payload sent to the entitlement service
entitlementUrlstring""URL of the entitlement check that gets the authorization token
fairPlayCertificateUrlstring""
heartbeatPollingIntervalnumber180000Time interval between two entitlement checks
heartbeatSeekIntervalnumber10000Time interval beyond which a seek triggers a new entitlement check
heartbeatUrlstring""URL of the entitlement check
otherstring""Legacy and deprecated version of data that contained a string of pipe-separated values to be sent to the entitlement service
queryParamsarray of strings["VideoSourceName", "VideoId", "VideoKind"]Array of query parameters used when calling the entitlement service URL
retriesnumber4Number of the retries of the Entitlement call before sending an error
versionstring""If valued, the entitlement payload use data, otherwise other β€” Note: other is a legacy and deprecated field: use data
json sample
"settings": {
"entitlementCheck": {
"entitlementUrl": "https://example.com/api/playback/tokenize",
"heartbeatUrl": "https://example.com/api/playback/heartbeat",
"heartbeatPollingInterval": 180000,
"heartbeatSeekInterval": 10000,
"other": "{Run.SessionID}|{p.platform}",
"fairPlayCertificateUrl": "https://example.com/diva5/certificates/fairplay.cer",
"queryParams": ["VideoSourceName", "VideoId", "VideoKind"],
"data": {
"sessionId": "{Run.SessionID}",
"platform": "webTV custom/Amidala",
"idfa": "{Run.idfa}",
},
"other": "{Run.SessionID}|lamiaplatform|{idfa}",
"version": "1"
}
}

β”œβ”€ ssai​

propertytypedefaultdescription
typestring""Diva uses this information to handle the appropriate ad provider. At the moment possible values are 'mediatailor' or 'harmonic'
intervalnumberDiva uses the interval defined to poll the ads metadata at the specified interval
thresholdnumberDiva uses it to detect when a beacon event should be triggered in milliseconds
liveEdgeThresholdnumberLive edge in millisecond will be detected if the current position is >= live video duration - live edge threshold
lookAheadnumberThe look ahead time interval used when the playback position is on the live edge
enableGooglePALbooleantrueWhether to enable Google PAL SDK or not
json sample
"settings": {
"ssai": {
"type": "<ssai type>",
"interval": 2000,
"threshold": 1000,
"liveEdgeThreshold": 45000,
"lookAhead": 5000,
"enableGooglePAL": true,
}
}

Data source​

β”œβ”€ settings​

└─ pushEngine​

propertytypedefaultdescription
configUrlstring""Path of the pushengine config file. If empty the PshEngine is disabled
dataPanelsCollectionNamestring"OverlayLiteData"the name of the sync data panels Collection
dataPanelsScopeNamestring"{v.EventID}.{d.Culture}"the scope of the data panels Collection. It passes through the path resolver.
dataPanelsCollectionEnabledboolean"true"Enable / disable the data panels Collection
eCommerceCollectionNamestring"eCommerce"the name of the eCommerce Collection
eCommerceScopeNamestring"{v.EventID}.{d.Culture}"the scope of the eCommerce Collection. It passes through the path resolver.
eCommerceCollectionEnabledboolean"true"Enable / disable the eCommerce Collection
editorialCollectionNamestring"Editorial"the name of the Editorial Collection
editorialScopeNamestring"{v.EventID}.{d.Culture}"the scope of the editorial Collection. It passes through the path resolver.
editorialCollectionEnabledboolean"true"Enable / disable the editorial Collection
isFragmentsEnabledboolean"true"(html5 only) it defines if the player will progressively download pushengine fragments or just download a new full collection after each sentinel change.
playByPlayCollectionNamestring"PlayByPlay"the name of the PbP Collection
playByPlayScopeNamestring"{v.EventID}.{d.Culture}"the scope of the PbP Collection. It passes through the path resolver.
playByPlayCollectionEnabledboolean"true"Enable / disable the PbP Collection
json sample
"settings": {
"pushEngine": {
"configUrl": "https://example.com/fe/config/pushengine/pushengineConfig.json",
"dataPanelsCollectionName": "OverlayLiteData",
"dataPanelsScopeName": "{v.EventID}.{d.Culture}",
"dataPanelsCollectionEnabled": true,
"eCommerceCollectionName": "eCommerce",
"eCommerceScopeName": "{v.EventID}.{d.Culture}",
"eCommerceCollectionEnabled": true,
"editorialCollectionName": "Editorial",
"editorialScopeName": "{v.EventID}.{d.Culture}",
"editorialCollectionEnabled": true,
"isFragmentsEnabled": true,
"playByPlayCollectionName": "PlayByPlay",
"playByPlayScopeName": "{v.EventID}.{d.Culture}",
"playByPlayCollectionEnabled": true
}
}

└─ syncDataPanels​

propertytypedefaultdescription
dataFolderUrlstring""Url of the data folder (the Overlay XML description). {V.EventId} tag is refered to the event id of the match and {d.Culture} tag is the data culture
defaultTemplatestring""
defaultTrackstring"menu"name of the menu track
maxLoadTimenumber0(html5 only) length of time (in milliseconds) an overlay has to send ready message before loading error is handled. A value of 0 disables the requirement for this message to be sent
otherParamsstring"?templateName={p.currentTemplate}"(html5 only) A query string or params to pass to overlays
renderingFolderUrlstring""Url of the rendering folder (the Overlay XML clickable areas, HTML and PNG). {ResourceURI} tag is refered to the relative path inside overlaData (like html, png and clickcable xml)
templateForTracksIdstring""(html5 only) string map of [menuId]:[templatetype] for each defined menu template. 'menuId' has to match the attribute 'id' of one of the element in the menu html. If id is missing or empty it uses 'trackingId'. If even trackingId is missing or empy it uses 'title'. Otherwise it uses the default value.
trustedOriginsstring""A string or comma separated URIs to trust messages recieved via postMessage API. By default it's the DIVA's origin
json sample
"settings": {
"syncDataPanels": {
"dataFolderUrl": "https://example.com/fe/data/overlayData/{v.EventID}/{d.Culture}",
"defaultTemplate": "default",
"defaultTrack": "menu",
"maxLoadTime": 0,
"otherParams": "?templateName={p.currentTemplate}",
"renderingFolderUrl": "https://example.com/fe/data/overlayData/{v.EventID}/{d.Culture}/{ResourceURI}",
"templateForTracksId": "menu:menu",
"trustedOrigins": "https://example.com"
}
}

└─ customPlayByPlay​

propertytypedescription
keystringWith suffix _Mini: Url of icons in the timeline. With suffix _Big: Url of icons used in the commentary overlay and in the event thumbnails (when tapping on the timeline)
valuestringUrl of the icon
json sample
"settings": {
"customPlayByPlay": [
{
"key": "basketball_ejection_Mini",
"value": "https://example.com/fe/overlayassets/icons/basketball/{p.density}/basketball_ejection_mini.png"
}
]
}

β”œβ”€ highlights​

propertytypeSample Valuesdescription
startModestringshortAndroid logo iOS logo
possible values:
none
short
medium
long
live
shortFilterarray of array[{friendlyName: 'FirstPeriodStart', event: 'period'},"goal", "penalty"]Event types for Short Highlights. Works only on VOD streams.
mediumFilterarray of array["goal", "penalty"]Event types for Medium Highlights. Works only on VOD streams.
longFilterarray of array["goal", "penalty"]Event types for Long Highlights. Works only on VOD streams.
liveFilterarray of array["goal", "penalty"]Event types for Live Highlights. Works only on LIVE streams.
defaultEventDurationnumber10000default event duration in milliseconds
customEventDurationkey/value"{
"GOAL": 10000,
"SUBSTITUTION": 30000
}"
Event types with duration in milliseconds
json sample
    "settings": {
"highlights": {
"startMode": "short",
"shortFilter": [
{friendlyName: 'FirstPeriodStart', event: 'period'},
"goal" //case-insensitive
],
"mediumFilter": [
"goal",
"redcard",
"yellowcard"
],
"longFilter": [
"*"
],
"liveFilter": [
"goal",
"penalty"
],
"defaultEventDuration" : 10000, // 10 seconds in millis (it overrides 15 seconds default)
"customEventDuration ": {
"GOAL": 30000, // 30 seconds in millis
"SUBSTITUTION": 15000 // 15 seconds in millis
}
}
}

Settings sample​

{
"settings": {
"general": {
"culture": "{fe.cultureCode}",
"audioSelectionMethod": "title",
"backgroundDurationThreshold": 60000,
"closedCaptionSelectionMethod": "lang",
"backgroundImage": "",
"isCommentaryBadgeVisible": true,
"isCommentaryFilteredByChapter": false,
"isMiddleTimelineEventsLineEnabled": false,
"isMultiViewModeSwitchEnabled": false,
"isVideoThumbnailPreviewEnabled": false,
"isEndOfPlayEnabled": false,
"jumpLargeGaps": false,
"liveBackOff": 1000,
"pipMode": true,
"relevantCommentaryStartsVisible": false,
"resolveManifestUrl": false,
"smallGapLimit": 5,
"trackVideoDataManifest": false,
"videoAnalyticsEventFrequency": 30000
},
"videoCast": {
"castBackground": "https://example.com/fe/images/chromecastbg.png",
"chromecastAppID": "<app ID>",
"isAirplayEnabled": true
},
"pushEngine": {
"configUrl": "https://example.com/fe/config/pushengine/pushengineConfig.json",
"isFragmentsEnabled": true,
"playByPlayCollectionName": "PlayByPlay",
"playByPlayScopeName": "{v.EventID}.{d.Culture}",
"dataPanelsCollectionName": "OverlayLiteData",
"dataPanelsScopeName": "{v.EventID}.{d.Culture}",
"eCommerceCollectionName": "<ecommerce collection name>"
},
"syncDataPanels": {
"dataFolderUrl": "https://example.com/fe/provider/overlays/DivaData/OverlayLiteData/{v.EventId}.{d.Culture}/{OverlayID}.xml",
"renderingFolderUrl": "https://example.com/fe/provider/overlays/DivaData/RenderingLiteData{n:ResourceURI}",
"templateForTracksId": "lineups:sideBySide;teamstats:fullVideo",
"trustedOrigins": "https://example.com",
"defaultTrack": "menu"
},
"customPlayByPlay": [
{
"key": "basketball_ejection_Mini",
"value": "https://example.com/fe/overlayassets/icons/basketball/{p.density}/basketball_ejection_mini.png"
}
]
},
"translations": {
"vocabularySource": "https://example.com/diva5/dictionaries/{fe.cultureCode}.json"
},
"videoData": {
"videoDataPath": "https://example.com/fe/video/videodata/v2/{v.id}",
"videoDataPollingInterval": 20000,
"videoPlatformsPriority": {
"default": [
{
"type": "DASH",
"sourceName": "Desktop-DASH",
"drmtype": "widevine"
},
{
"type": "HLS",
"sourceName": "Desktop-V4",
"drmtype": "fairplay"
}
],
"chromecast": [
{
"type": "DASH",
"sourceName": "Chromecast-DASH",
"drmtype": "widevine"
}
]
}
},
"entitlementCheck": {
"entitlementUrl": "https://example.com/api/playback/tokenize",
"heartbeatUrl": "https://example.com/api/playback/heartbeat",
"heartbeatPollingInterval": 180000,
"heartbeatSeekInterval": 10000,
"other": "{Run.SessionID}|{p.platform}",
"fairPlayCertificateUrl": "https://example.com/diva5/certificates/fairplay.cer",
"queryParams": ["VideoSourceName", "VideoId", "VideoKind"],
},
"mediaAnalytics": {
"conviva": {
"enabled": false,
"customerKey": "<conviva-customer-key>",
"playerName": "Diva",
"cdnName": "<CDN name>",
"touchstoneUrl": "https://touchstone.conviva.com/example/"
},
"youbora": {
"enabled": true,
"playerName": "Diva",
"cdnName": "<CDN name>",
"accountCode": "<account code>"
},
"openMeasurement": {
"enabled": true,
"partnerName": "<partner name>"
}
},
"ssai": {
"type": "<ssai type>",
"interval": 2000,
"threshold": 1000,
"liveEdgeThreshold": 45000,
"lookAhead": 5000,
"enableGooglePAL": true,
}
}