mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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
This commit is contained in:
parent
e2d4bd15cd
commit
dc6bf507c7
@ -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 {
|
|||||||
/** The name of the sans-serif font family. */
|
/** The name of the sans-serif font family. */
|
||||||
@UnstableApi public static final String SANS_SERIF_NAME = "sans-serif";
|
@UnstableApi public static final String SANS_SERIF_NAME = "sans-serif";
|
||||||
|
|
||||||
|
/** The {@link Uri#getScheme() URI scheme} used for content with server side ad insertion. */
|
||||||
|
@UnstableApi 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 androidx.media3.common.util.Assertions.checkStateNotNull;
|
|||||||
import static androidx.media3.common.util.Util.castNonNull;
|
import static androidx.media3.common.util.Util.castNonNull;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.AdViewProvider;
|
import androidx.media3.common.AdViewProvider;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
@ -106,7 +107,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;
|
||||||
@ -212,22 +213,19 @@ 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.
|
||||||
*/
|
*/
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public DefaultMediaSourceFactory setImaServerSideAdInsertionMediaSourceFactory(
|
public DefaultMediaSourceFactory setServerSideAdInsertionMediaSourceFactory(
|
||||||
@Nullable MediaSource.Factory imaServerSideAdInsertionMediaSourceFactory) {
|
@Nullable MediaSource.Factory serverSideAdInsertionMediaSourceFactory) {
|
||||||
this.imaServerSideAdInsertionMediaSourceFactory = imaServerSideAdInsertionMediaSourceFactory;
|
this.serverSideAdInsertionMediaSourceFactory = serverSideAdInsertionMediaSourceFactory;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,8 +322,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 =
|
||||||
|
@ -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;
|
|||||||
/** 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;
|
|||||||
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));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user