Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ dependencies {

implementation "com.theoplayer.theoplayer-sdk-android:core:$sdkVersion"
implementation "com.theoplayer.theoplayer-sdk-android:integration-ads-ima:$sdkVersion"
implementation "com.theoplayer.theoplayer-sdk-android:integration-ads-dai:$sdkVersion"
implementation libs.theoplayer.android.ui

implementation project(":connectors:analytics:conviva")
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/com/theoplayer/android/connector/Sources.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@ package com.theoplayer.android.connector

import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.SaverScope
import com.theoplayer.android.api.source.GoogleDaiTypedSource
import com.theoplayer.android.api.source.SourceDescription
import com.theoplayer.android.api.source.SourceType
import com.theoplayer.android.api.source.TypedSource
import com.theoplayer.android.api.source.addescription.GoogleImaAdDescription
import com.theoplayer.android.api.source.metadata.MetadataDescription
import com.theoplayer.android.api.source.ssai.dai.GoogleDaiVodConfiguration
import com.theoplayer.android.api.theolive.TheoLiveSource
import com.theoplayer.android.connector.uplynk.UplynkAssetType
import com.theoplayer.android.connector.uplynk.UplynkPingConfiguration
import com.theoplayer.android.connector.uplynk.UplynkSsaiDescription
import com.theoplayer.android.connector.yospace.YospaceSsaiDescription
import com.theoplayer.android.connector.yospace.YospaceStreamType
import java.util.Collections

data class Source(
val name: String,
Expand Down Expand Up @@ -41,6 +44,24 @@ val sources: List<Source> by lazy {
"program" to "BigBuckBunny with Google IMA ads"
)
),
Source(
name = "BigBuckBunny with Google DAI ads",
sourceDescription = SourceDescription.Builder(
GoogleDaiTypedSource.Builder(
GoogleDaiVodConfiguration.Builder(
"null",
"2474148",
"bbb-clear"
).apply {
adTagParameters(Collections.singletonMap("npa", "1"))
streamActivityMonitorID("test-stream-activity-monitor-id")
}.build()
)
.type(SourceType.DASH)
.build()
)
.build()
),
Source(
name = "THEOlive demo",
sourceDescription = SourceDescription.Builder(TheoLiveSource(src = "9lwkudxeyjwwm132pukwwhhtk"))
Expand Down
1 change: 1 addition & 0 deletions connectors/analytics/conviva/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ android {
dependencies {
compileOnly "com.theoplayer.theoplayer-sdk-android:core:$sdkVersion"
compileOnly "com.theoplayer.theoplayer-sdk-android:integration-ads-ima:$sdkVersion"
compileOnly "com.theoplayer.theoplayer-sdk-android:integration-ads-theoads:$sdkVersion"
compileOnly libs.conviva

implementation libs.androidx.lifecycle.process
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.theoplayer.android.connector.analytics.conviva.utils.calculateEncodin
import com.theoplayer.android.connector.analytics.conviva.utils.calculateStreamType
import com.theoplayer.android.connector.analytics.conviva.utils.collectPlaybackConfigMetadata
import com.theoplayer.android.connector.analytics.conviva.utils.collectPlayerInfo
import com.theoplayer.android.connector.analytics.conviva.utils.collectAdDescriptionMetadata

private const val TAG = "ConvivaHandler"

Expand Down Expand Up @@ -488,6 +489,7 @@ class ConvivaHandler(
put(ConvivaSdkConstants.ASSET_NAME, contentAssetName)
put(ConvivaSdkConstants.PLAYER_NAME, playerName)
putAll(collectPlaybackConfigMetadata(player))
putAll(collectAdDescriptionMetadata(player))

// Do not override the `isLive` value if already set by the consumer, as the value
// is read-only for a given session.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import com.theoplayer.android.api.ads.Ad
import com.theoplayer.android.api.ads.AdBreak
import com.theoplayer.android.api.ads.LinearAd
import com.theoplayer.android.api.ads.ima.GoogleImaAd
import com.theoplayer.android.api.ads.theoads.TheoAdDescription
import com.theoplayer.android.api.event.ads.AdIntegrationKind
import com.theoplayer.android.api.player.Player
import com.theoplayer.android.api.source.SourceType
import com.theoplayer.android.api.source.TypedSource
import com.theoplayer.android.api.source.ssai.GoogleDaiConfiguration
import com.theoplayer.android.api.timerange.TimeRanges
import com.theoplayer.android.connector.analytics.conviva.ConvivaConfiguration
import com.theoplayer.android.connector.analytics.conviva.ConvivaMetadata
Expand Down Expand Up @@ -119,6 +121,24 @@ fun collectPlaybackConfigMetadata(player: Player): ConvivaMetadata = buildMap {
}
}

fun collectAdDescriptionMetadata(player: Player): Map<String, String> {
return mutableMapOf<String, String>().apply {
player.source?.let { src ->
// Extract streamActivityMonitorId from either THEOads or Google DAI configuration
val streamActivityMonitorId = try {
src.ads.firstNotNullOfOrNull { (it as? TheoAdDescription)?.streamActivityMonitorId }
} catch (_: NoClassDefFoundError) {
// THEOads is not integrated, ignore missing class.
null
} ?: (src.sources.firstOrNull()?.ssai as? GoogleDaiConfiguration)?.streamActivityMonitorID

streamActivityMonitorId?.let {
put("streamActivityMonitorId", it)
}
}
}
}

private fun validStringOrNA(str: String?): String {
return if (str.isNullOrEmpty()) "NA" else str
}
Expand Down
Loading