diff --git a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java index 0e04bb4903..d77b50fc0c 100644 --- a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java @@ -379,6 +379,7 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou @Override public void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) { + mainHandler.post(() -> assertSingleInstanceInPlaylist(checkNotNull(player))); super.prepareSourceInternal(mediaTransferListener); if (loader == null) { Loader loader = new Loader("ImaServerSideAdInsertionMediaSource"); @@ -1152,4 +1153,20 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou overlayInfo.reasonDetail != null ? overlayInfo.reasonDetail : "Unknown reason")); } } + + private static void assertSingleInstanceInPlaylist(Player player) { + int counter = 0; + for (int i = 0; i < player.getMediaItemCount(); i++) { + MediaItem mediaItem = player.getMediaItemAt(i); + if (mediaItem.localConfiguration != null + && C.SSAI_SCHEME.equals(mediaItem.localConfiguration.uri.getScheme()) + && ImaServerSideAdInsertionUriBuilder.IMA_AUTHORITY.equals( + mediaItem.localConfiguration.uri.getAuthority())) { + if (++counter > 1) { + throw new IllegalStateException( + "Multiple IMA server side ad insertion sources not supported."); + } + } + } + } } diff --git a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionUriBuilder.java b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionUriBuilder.java index c9cf63973e..6e00303d58 100644 --- a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionUriBuilder.java +++ b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionUriBuilder.java @@ -43,7 +43,7 @@ public final class ImaServerSideAdInsertionUriBuilder { /** The default timeout for loading the video URI, in milliseconds. */ public static final int DEFAULT_LOAD_VIDEO_TIMEOUT_MS = 10_000; - private static final String IMA_AUTHORITY = "dai.google.com"; + /* package */ static final String IMA_AUTHORITY = "dai.google.com"; private static final String ADS_ID = "adsId"; private static final String ASSET_KEY = "assetKey"; private static final String API_KEY = "apiKey";