Commit 6a269bae by ibaker Committed by Ian Baker

Redefine the SSAI URI format with an "ssai" scheme instead of "imadai"

This allows us to remove the IMA naming from DefaultMediaSourceFactory's
SSAI integration.

#minor-release

PiperOrigin-RevId: 426346456
parent 9add60e7
...@@ -246,7 +246,7 @@ import java.util.Map; ...@@ -246,7 +246,7 @@ import java.util.Map;
} }
} }
private static final String SCHEME = "imadai"; private static final String IMA_AUTHORITY = "dai.google.com";
private static final String ADS_ID = "adsId"; private static final String ADS_ID = "adsId";
private static final String ASSET_KEY = "assetKey"; private static final String ASSET_KEY = "assetKey";
private static final String API_KEY = "apiKey"; private static final String API_KEY = "apiKey";
...@@ -341,7 +341,8 @@ import java.util.Map; ...@@ -341,7 +341,8 @@ import java.util.Map;
/** Returns a corresponding {@link Uri}. */ /** Returns a corresponding {@link Uri}. */
public Uri toUri() { public Uri toUri() {
Uri.Builder dataUriBuilder = new Uri.Builder(); Uri.Builder dataUriBuilder = new Uri.Builder();
dataUriBuilder.scheme(SCHEME); dataUriBuilder.scheme(C.SSAI_SCHEME);
dataUriBuilder.authority(IMA_AUTHORITY);
dataUriBuilder.appendQueryParameter(ADS_ID, adsId); dataUriBuilder.appendQueryParameter(ADS_ID, adsId);
if (loadVideoTimeoutMs != DEFAULT_LOAD_VIDEO_TIMEOUT_MS) { if (loadVideoTimeoutMs != DEFAULT_LOAD_VIDEO_TIMEOUT_MS) {
dataUriBuilder.appendQueryParameter( dataUriBuilder.appendQueryParameter(
...@@ -433,8 +434,8 @@ import java.util.Map; ...@@ -433,8 +434,8 @@ import java.util.Map;
public static ServerSideAdInsertionStreamRequest fromUri(Uri uri) { public static ServerSideAdInsertionStreamRequest fromUri(Uri uri) {
ServerSideAdInsertionStreamRequest.Builder request = ServerSideAdInsertionStreamRequest.Builder request =
new ServerSideAdInsertionStreamRequest.Builder(); new ServerSideAdInsertionStreamRequest.Builder();
if (!SCHEME.equals(uri.getScheme())) { if (!C.SSAI_SCHEME.equals(uri.getScheme()) || !IMA_AUTHORITY.equals(uri.getAuthority())) {
throw new IllegalArgumentException("Invalid scheme."); throw new IllegalArgumentException("Invalid URI scheme or authority.");
} }
request.setAdsId(checkNotNull(uri.getQueryParameter(ADS_ID))); request.setAdsId(checkNotNull(uri.getQueryParameter(ADS_ID)));
request.setAssetKey(uri.getQueryParameter(ASSET_KEY)); request.setAssetKey(uri.getQueryParameter(ASSET_KEY));
......
...@@ -29,6 +29,7 @@ import android.media.AudioManager; ...@@ -29,6 +29,7 @@ import android.media.AudioManager;
import android.media.MediaCodec; import android.media.MediaCodec;
import android.media.MediaCrypto; import android.media.MediaCrypto;
import android.media.MediaFormat; import android.media.MediaFormat;
import android.net.Uri;
import android.view.Surface; import android.view.Surface;
import androidx.annotation.IntDef; import androidx.annotation.IntDef;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
...@@ -125,6 +126,9 @@ public final class C { ...@@ -125,6 +126,9 @@ public final class C {
/** The name of the sans-serif font family. */ /** The name of the sans-serif font family. */
public static final String SANS_SERIF_NAME = "sans-serif"; public static final String SANS_SERIF_NAME = "sans-serif";
/** The {@link Uri#getScheme() URI scheme} used for content with server side ad insertion. */
public static final String SSAI_SCHEME = "ssai";
/** /**
* Types of crypto implementation. May be one of {@link #CRYPTO_TYPE_NONE}, {@link * Types of crypto implementation. May be one of {@link #CRYPTO_TYPE_NONE}, {@link
* #CRYPTO_TYPE_UNSUPPORTED} or {@link #CRYPTO_TYPE_FRAMEWORK}. May also be an app-defined value * #CRYPTO_TYPE_UNSUPPORTED} or {@link #CRYPTO_TYPE_FRAMEWORK}. May also be an app-defined value
......
...@@ -20,6 +20,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; ...@@ -20,6 +20,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import android.content.Context; import android.content.Context;
import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
...@@ -104,7 +105,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -104,7 +105,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 MediaSource.Factory imaServerSideAdInsertionMediaSourceFactory; @Nullable private MediaSource.Factory serverSideAdInsertionMediaSourceFactory;
@Nullable private AdsLoader.Provider adsLoaderProvider; @Nullable private AdsLoader.Provider adsLoaderProvider;
@Nullable private AdViewProvider adViewProvider; @Nullable private AdViewProvider adViewProvider;
@Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy; @Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy;
...@@ -206,21 +207,18 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -206,21 +207,18 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
} }
/** /**
* Sets the {@link MediaSource.Factory} used to handle {@link MediaItem} instances containing <a * Sets the {@link MediaSource.Factory} used to handle {@link MediaItem} instances containing a
* href="https://support.google.com/admanager/answer/6147120">IMA Dynamic Ad Insertion URIs</a>. * {@link Uri} identified as resolving to content with server side ad insertion (SSAI).
* *
* <p>In most cases this will be an {@code ImaServerSideAdInsertionMediaSource.Factory} from the * <p>SSAI URIs are those with a {@link Uri#getScheme() scheme} of {@link C#SSAI_SCHEME}.
* IMA extension.
* *
* <p>IMA DAI URIs are those with a scheme of {@code "imadai"}. * @param serverSideAdInsertionMediaSourceFactory The {@link MediaSource.Factory} for SSAI
*
* @param imaServerSideAdInsertionMediaSourceFactory The {@link MediaSource.Factory} for IMA DAI
* content, or {@code null} to remove a previously set {@link MediaSource.Factory}. * content, or {@code null} to remove a previously set {@link MediaSource.Factory}.
* @return This factory, for convenience. * @return This factory, for convenience.
*/ */
public DefaultMediaSourceFactory setImaServerSideAdInsertionMediaSourceFactory( public DefaultMediaSourceFactory setServerSideAdInsertionMediaSourceFactory(
@Nullable MediaSource.Factory imaServerSideAdInsertionMediaSourceFactory) { @Nullable MediaSource.Factory serverSideAdInsertionMediaSourceFactory) {
this.imaServerSideAdInsertionMediaSourceFactory = imaServerSideAdInsertionMediaSourceFactory; this.serverSideAdInsertionMediaSourceFactory = serverSideAdInsertionMediaSourceFactory;
return this; return this;
} }
...@@ -308,8 +306,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -308,8 +306,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
public MediaSource createMediaSource(MediaItem mediaItem) { public MediaSource createMediaSource(MediaItem mediaItem) {
Assertions.checkNotNull(mediaItem.localConfiguration); Assertions.checkNotNull(mediaItem.localConfiguration);
@Nullable String scheme = mediaItem.localConfiguration.uri.getScheme(); @Nullable String scheme = mediaItem.localConfiguration.uri.getScheme();
if (scheme != null && scheme.equals("imadai")) { if (scheme != null && scheme.equals(C.SSAI_SCHEME)) {
return checkNotNull(imaServerSideAdInsertionMediaSourceFactory).createMediaSource(mediaItem); return checkNotNull(serverSideAdInsertionMediaSourceFactory).createMediaSource(mediaItem);
} }
@C.ContentType @C.ContentType
int type = int type =
......
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