Commit 8f88127b by olly Committed by Ian Baker

Prepare for adding ServerSideInsertedAdsMediaSource for IMA

PiperOrigin-RevId: 407274072
parent 3a5bf735
...@@ -894,7 +894,8 @@ public final class DownloadHelper { ...@@ -894,7 +894,8 @@ public final class DownloadHelper {
MediaItem mediaItem, MediaItem mediaItem,
DataSource.Factory dataSourceFactory, DataSource.Factory dataSourceFactory,
@Nullable DrmSessionManager drmSessionManager) { @Nullable DrmSessionManager drmSessionManager) {
return new DefaultMediaSourceFactory(dataSourceFactory, ExtractorsFactory.EMPTY) return new DefaultMediaSourceFactory(
dataSourceFactory, ExtractorsFactory.EMPTY, /* serverSideDaiMediaSourceFactory= */ null)
.setDrmSessionManager(drmSessionManager) .setDrmSessionManager(drmSessionManager)
.createMediaSource(mediaItem); .createMediaSource(mediaItem);
} }
......
...@@ -27,6 +27,7 @@ import androidx.media3.common.Format; ...@@ -27,6 +27,7 @@ import androidx.media3.common.Format;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.StreamKey; import androidx.media3.common.StreamKey;
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
...@@ -121,6 +122,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -121,6 +122,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
private final DataSource.Factory dataSourceFactory; private final DataSource.Factory dataSourceFactory;
private final DelegateFactoryLoader delegateFactoryLoader; private final DelegateFactoryLoader delegateFactoryLoader;
@Nullable private final MediaSourceFactory serverSideDaiMediaSourceFactory;
@Nullable private AdsLoaderProvider adsLoaderProvider; @Nullable private AdsLoaderProvider adsLoaderProvider;
@Nullable private AdViewProvider adViewProvider; @Nullable private AdViewProvider adViewProvider;
@Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy; @Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy;
...@@ -148,7 +150,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -148,7 +150,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
* its container. * its container.
*/ */
public DefaultMediaSourceFactory(Context context, ExtractorsFactory extractorsFactory) { public DefaultMediaSourceFactory(Context context, ExtractorsFactory extractorsFactory) {
this(new DefaultDataSource.Factory(context), extractorsFactory); this(
new DefaultDataSource.Factory(context),
extractorsFactory,
/* serverSideDaiMediaSourceFactory= */ null);
} }
/** /**
...@@ -158,7 +163,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -158,7 +163,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
* for requesting media data. * for requesting media data.
*/ */
public DefaultMediaSourceFactory(DataSource.Factory dataSourceFactory) { public DefaultMediaSourceFactory(DataSource.Factory dataSourceFactory) {
this(dataSourceFactory, new DefaultExtractorsFactory()); this(
dataSourceFactory,
new DefaultExtractorsFactory(),
/* serverSideDaiMediaSourceFactory= */ null);
} }
/** /**
...@@ -168,10 +176,17 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -168,10 +176,17 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
* for requesting media data. * for requesting media data.
* @param extractorsFactory An {@link ExtractorsFactory} used to extract progressive media from * @param extractorsFactory An {@link ExtractorsFactory} used to extract progressive media from
* its container. * its container.
* @param serverSideDaiMediaSourceFactory A {@link MediaSourceFactory} for creating server side
* inserted ad media sources.
*/ */
public DefaultMediaSourceFactory( public DefaultMediaSourceFactory(
DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { DataSource.Factory dataSourceFactory,
ExtractorsFactory extractorsFactory,
@Nullable MediaSourceFactory serverSideDaiMediaSourceFactory) {
this.dataSourceFactory = dataSourceFactory; this.dataSourceFactory = dataSourceFactory;
// Temporary until factory registration is agreed upon.
this.serverSideDaiMediaSourceFactory = serverSideDaiMediaSourceFactory;
delegateFactoryLoader = new DelegateFactoryLoader(dataSourceFactory, extractorsFactory); delegateFactoryLoader = new DelegateFactoryLoader(dataSourceFactory, extractorsFactory);
liveTargetOffsetMs = C.TIME_UNSET; liveTargetOffsetMs = C.TIME_UNSET;
liveMinOffsetMs = C.TIME_UNSET; liveMinOffsetMs = C.TIME_UNSET;
...@@ -335,7 +350,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -335,7 +350,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
@Override @Override
public MediaSource createMediaSource(MediaItem mediaItem) { public MediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.localConfiguration); Assertions.checkNotNull(mediaItem.localConfiguration);
@Nullable String scheme = mediaItem.localConfiguration.uri.getScheme();
if (scheme != null && scheme.equals("imadai")) {
return checkNotNull(serverSideDaiMediaSourceFactory).createMediaSource(mediaItem);
}
@C.ContentType @C.ContentType
int type = int type =
Util.inferContentTypeForUriAndMimeType( Util.inferContentTypeForUriAndMimeType(
......
...@@ -41,6 +41,7 @@ import com.google.ads.interactivemedia.v3.api.ImaSdkSettings; ...@@ -41,6 +41,7 @@ import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
import com.google.ads.interactivemedia.v3.api.UiElement; import com.google.ads.interactivemedia.v3.api.UiElement;
import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer; import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer;
import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate; import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate;
import com.google.common.collect.ImmutableList;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
...@@ -134,6 +135,35 @@ import java.util.Set; ...@@ -134,6 +135,35 @@ import java.util.Set;
} }
} }
/** Stores configuration for DAI ad playback. */
static final class DaiConfiguration {
public final AdErrorEvent.AdErrorListener applicationAdErrorListener;
public final boolean debugModeEnabled;
@Nullable public final List<CompanionAdSlot> companionAdSlots;
@Nullable public final AdEvent.AdEventListener applicationAdEventListener;
@Nullable public final VideoAdPlayer.VideoAdPlayerCallback applicationVideoAdPlayerCallback;
@Nullable public final ImaSdkSettings imaSdkSettings;
public DaiConfiguration(
AdErrorEvent.AdErrorListener applicationAdErrorListener,
@Nullable List<CompanionAdSlot> companionAdSlots,
@Nullable AdEvent.AdEventListener applicationAdEventListener,
@Nullable VideoAdPlayer.VideoAdPlayerCallback applicationVideoAdPlayerCallback,
@Nullable ImaSdkSettings imaSdkSettings,
boolean debugModeEnabled) {
this.applicationAdErrorListener = applicationAdErrorListener;
this.companionAdSlots =
companionAdSlots != null ? ImmutableList.copyOf(companionAdSlots) : null;
this.applicationAdEventListener = applicationAdEventListener;
this.applicationVideoAdPlayerCallback = applicationVideoAdPlayerCallback;
this.imaSdkSettings = imaSdkSettings;
this.debugModeEnabled = debugModeEnabled;
}
}
public static final int TIMEOUT_UNSET = -1; public static final int TIMEOUT_UNSET = -1;
public static final int BITRATE_UNSET = -1; public static final int BITRATE_UNSET = -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment