Skip to main content

AdsBroadpeak Library

Broadpeak SmartLib integration. The fl-ads-broadpeak library integrates with Broadpeak to offer Server Side Ad Insertion (SSAI) capability for both VOD and Live on iOS and Android.


Setup

Adding dependencies to the project

  1. Add the Broadpeak repository for SmartLib in root build.gradle:

    maven { url 'https://delivery-platform.broadpeak.tv/android/repository/all' }
  2. Add the following Broadpeak dependency in the application module build.gradle:

    implementation "tv.broadpeak.smartlib:smartlib-media3:06.00.02.845a8c7"

Note: Use the Broadpeak and Google PAL library version shipped with the QuickPlay libraries.


Create Broadpeak session initialization data

The initializationData is created by passing parameters to BroadpeakInitializationData.

import {
BroadpeakCDN,
AnalyticsHost,
BroadpeakInitializationData,
} from '@quickplay/rn-qp-nxg-player';

const broadpeakCDN: BroadpeakCDN = {
type: '<cdn type>',
domainHostNames: ['<broadpeak cdn hostname>'], // required when type is 'Custom'
};

const analyticsHostNames: AnalyticsHost = {
type: '<analytics host type>',
hostNames: ['<analytics server url>'], // required when type is 'Custom'
};

const config: BroadpeakInitializationData = {
broadpeakDomainHostNames: broadpeakCDN,
analyticsHostNames: analyticsHostNames,
uuid: '<unique user or account identifier>',
deviceType: '<device type>',
userAgent: '<user agent string>',
gdprPreference: <gdpr preference>, // 1 = GDPR_DELETE | 2 = GDPR_ANONYMIZED | 3 = GDPR_ENCRYPTED | 4 = GDPR_CLEAR
sessionKeepAliveFrequencyMs: <keep alive frequency in ms>,
loggerLevel: <logger level>, // -1 = LOG_OFF | 0 = LOG_BASIC | 1 = LOG_VERBOSE
allowStorage: <allow storage>,
};
PropertyTypeMandatoryDescription
broadpeakDomainHostNamesBroadpeakCDNYesThe domainHostNames list used to identify Broadpeak sessions (for example, "cdn.broadpeak.com"). type: 'All' means all sessions use a Broadpeak CDN. type: 'None' means no URLs are on a Broadpeak CDN. type: 'Custom' means only the listed hostnames are Broadpeak CDN.
analyticsHostNamesAnalyticsHostNoAnalytics server hostnames (for example, "https://server-host"). type: 'None' disables analytics reporting.
uuidstringNoA unique user or account identifier used by Broadpeak Analytics.
deviceTypestringNoOverrides the default device type detected by SmartLib (for example, "phone", "tablet", "tv").
userAgentstringNoThe user agent string used when firing Broadpeak analytics and ad tracking beacons.
gdprPreferenceBroadpeakGDPRPreferenceNoGDPR preference for Broadpeak Analytics. GDPR_DELETE means report is empty. GDPR_ENCRYPTED means decryptable on request. GDPR_ANONYMIZED means no decryption possible. GDPR_CLEAR means no encryption (default).
sessionKeepAliveFrequencyMsnumberNoOverrides the default SmartLib keep-alive frequency (default: 5000 ms). Valid range: 5000-10000 ms.
loggerLevelBroadpeakLoggerLevelOrdinalNoLogger verbosity. LOG_BASIC is basic logging, LOG_VERBOSE is verbose logging, and LOG_OFF disables logging.
allowStoragebooleanNoWhether SmartLib can persist data to local storage (for example, for session continuity).

Per-session configuration (BroadpeakSessionConfig)

BroadpeakSessionConfig is passed per-playback session inside PlayerConfig (via broadpeakSessionConfig). It is optional in PlayerConfig, but required for Broadpeak SSAI playback because initializationUrl is needed to create the Broadpeak session.

import { BroadpeakSessionConfig } from '@quickplay/rn-qp-nxg-player';

const broadpeakSessionConfig: BroadpeakSessionConfig = {
initializationUrl: '<session initialization url>',
pipSession: <pip session enabled>,
customParams: {
'<key>': '<value>',
},
adParams: {
'<key>': '<value>',
},
};
PropertyTypeMandatoryDescription
initializationUrlstringYesBroadpeak session initialization URL.
pipSessionbooleanNoSet to true if the session needs to support Picture-in-Picture.
customParams{ [key: string]: string }NoCustom key-value pairs sent to Broadpeak Analytics.
adParams{ [key: string]: string }NoCustom key-value pairs forwarded to Broadpeak ad requests.

Initialize Broadpeak SmartLib instance

This must be done once, when the app starts (for example, in your root component or app entry point):

await broadpeakSessionManager.initWithConfig(config);

Check if Broadpeak SmartLib is initialized

const configured: boolean = await broadpeakSessionManager.isConfigured();

Release Broadpeak SmartLib instance

Call this when the app is closing (Android only; not implemented on iOS):

await broadpeakSessionManager.dispose();

Note: initWithConfig() must be paired with dispose() on Android. On iOS, dispose() is a no-op.


Create ad player

const playerConfig: PlayerConfig = {
contentType: '<content type>',
isSSAIEnabled: true, // mandatory for Broadpeak
ssaiAdProvider: 'broadpeak', // mandatory for Broadpeak
mediaURL: '<content url>',
mediaType: '<media type>', // required for live content
palConfiguration: {
// required when using Broadpeak SSAI with Google PAL
descriptionURL: '<content or page url>',
omidPartnerName: '<omid partner name>',
omidPartnerVersion: '<omid partner version>',
omidVersion: '<omid version>',
playerType: '<player type>',
playerVersion: '<player version>',
ppid: '<publisher provided id>',
videoPlayerHeight: 720,
videoPlayerWidth: 1280,
},
broadpeakSessionConfig: {
initializationUrl: '<session initialization url>',
pipSession: <pip session enabled>,
customParams: { '<key>': '<value>' },
},
};

const broadpeakAdPlayer = await createPlayer(playerConfig);

// Attach player listeners before calling play.
broadpeakAdPlayer.play();
PropertyTypeMandatoryDescription
mediaURLstringYesThe playback URL.
contentTypeConsumptionTypeValueYes'VOD' or 'LIVE'.
isSSAIEnabledbooleanYesMust be true for SSAI/Broadpeak playback.
ssaiAdProviderssaiAdProviderYesMust be 'broadpeak'.
mediaTypeMediaTypeYes'HLS' or 'DASH'.
broadpeakSessionConfigBroadpeakSessionConfigYesPer-session Broadpeak config. initializationUrl is required.
palConfigurationPALConfigurationNoPer-session PAL config. Required when using Broadpeak SSAI with Google PAL.
adPlaybackPolicyAdPlaybackPolicyNoDefines ad playback policy for VOD content.

Example integration

The following example shows a complete integration using the Broadpeak APIs: checking isConfigured(), initializing SmartLib via initWithConfig(), creating a Broadpeak SSAI player with broadpeakSessionConfig, and releasing SmartLib via dispose() on teardown.

import {
broadpeakSessionManager,
createPlayer,
BroadpeakCDN,
AnalyticsHost,
BroadpeakInitializationData,
PlayerConfig,
} from '@quickplay/rn-qp-nxg-player';

// 1. Check isConfigured() — returns the isInitialized flag value.
// Only call initWithConfig() when SmartLib is not yet initialized.
const configured = await broadpeakSessionManager.isConfigured();

if (!configured) {
const broadpeakCDN: BroadpeakCDN = {
type: 'Custom',
domainHostNames: ['ucdn.mediaquest.com.ph'],
};

const analyticsHostNames: AnalyticsHost = {
type: 'None',
};

const config: BroadpeakInitializationData = {
broadpeakDomainHostNames: broadpeakCDN,
analyticsHostNames,
uuid: '',
deviceType: '',
userAgent: '',
gdprPreference: 2, // GDPR_ANONYMIZED
sessionKeepAliveFrequencyMs: 5000,
loggerLevel: 0, // LOG_BASIC
allowStorage: true,
};

// 2. initWithConfig() — sets isInitialized to true; isConfigured() returns true after this.
await broadpeakSessionManager.initWithConfig(config);
}

// 3. createPlayer() — requires isInitialized = true (isConfigured() must return true).
const playerConfig: PlayerConfig = {
contentType: 'LIVE',
isSSAIEnabled: true,
ssaiAdProvider: 'broadpeak',
mediaURL:
'https://ucdn.mediaquest.com.ph/bpk-tv/ssai_test/default/index.m3u8',
mediaType: 'HLS',
broadpeakSessionConfig: {
initializationUrl: 'https://example.com/broadpeak/session/init',
pipSession: true,
customParams: { key1: 'value1' },
adParams: { adKey: 'adValue' },
},
};

const player = await createPlayer(playerConfig);

// Add required player listeners before playback.
player.play();

// Optional: when closing the app on Android.
await broadpeakSessionManager.dispose();