Simplify DefaultMediaSourceFactory ad configuration

- Use a setter, which is consistent with how other optional
  components are passed.
- Remove nesting where a provider provides another provider.
  Since AdSupportProvider then only provides one thing, it
  can be renamed to AdsLoaderProvider, which more clearly
  expresses what it provides.

PiperOrigin-RevId: 330396334
This commit is contained in:
olly 2020-09-07 18:17:21 +01:00 committed by Oliver Woodman
parent 442aa78196
commit 04f67e4adc
15 changed files with 142 additions and 181 deletions

View File

@ -50,6 +50,7 @@ public final class DemoUtil {
private static final String DOWNLOAD_TRACKER_ACTION_FILE = "tracked_actions"; private static final String DOWNLOAD_TRACKER_ACTION_FILE = "tracked_actions";
private static final String DOWNLOAD_CONTENT_DIRECTORY = "downloads"; private static final String DOWNLOAD_CONTENT_DIRECTORY = "downloads";
private static @MonotonicNonNull String userAgent;
private static DataSource.@MonotonicNonNull Factory dataSourceFactory; private static DataSource.@MonotonicNonNull Factory dataSourceFactory;
private static HttpDataSource.@MonotonicNonNull Factory httpDataSourceFactory; private static HttpDataSource.@MonotonicNonNull Factory httpDataSourceFactory;
private static @MonotonicNonNull DatabaseProvider databaseProvider; private static @MonotonicNonNull DatabaseProvider databaseProvider;
@ -77,17 +78,23 @@ public final class DemoUtil {
.setExtensionRendererMode(extensionRendererMode); .setExtensionRendererMode(extensionRendererMode);
} }
public static synchronized String getUserAgent(Context context) {
if (userAgent == null) {
userAgent = Util.getUserAgent(context, "ExoPlayerDemo");
}
return userAgent;
}
public static synchronized HttpDataSource.Factory getHttpDataSourceFactory(Context context) { public static synchronized HttpDataSource.Factory getHttpDataSourceFactory(Context context) {
if (httpDataSourceFactory == null) { if (httpDataSourceFactory == null) {
context = context.getApplicationContext(); context = context.getApplicationContext();
CronetEngineWrapper cronetEngineWrapper = new CronetEngineWrapper(context); CronetEngineWrapper cronetEngineWrapper = new CronetEngineWrapper(context);
String userAgent = Util.getUserAgent(context, "ExoPlayerDemo");
httpDataSourceFactory = httpDataSourceFactory =
new CronetDataSourceFactory( new CronetDataSourceFactory(
cronetEngineWrapper, cronetEngineWrapper,
Executors.newSingleThreadExecutor(), Executors.newSingleThreadExecutor(),
/* transferListener= */ null, /* transferListener= */ null,
userAgent); getUserAgent(context));
} }
return httpDataSourceFactory; return httpDataSourceFactory;
} }

View File

@ -47,6 +47,7 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryExcep
import com.google.android.exoplayer2.offline.DownloadRequest; import com.google.android.exoplayer2.offline.DownloadRequest;
import com.google.android.exoplayer2.source.BehindLiveWindowException; import com.google.android.exoplayer2.source.BehindLiveWindowException;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory; import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.source.ads.AdsLoader; import com.google.android.exoplayer2.source.ads.AdsLoader;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
@ -285,16 +286,18 @@ public class PlayerActivity extends AppCompatActivity
intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false); intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false);
RenderersFactory renderersFactory = RenderersFactory renderersFactory =
DemoUtil.buildRenderersFactory(/* context= */ this, preferExtensionDecoders); DemoUtil.buildRenderersFactory(/* context= */ this, preferExtensionDecoders);
MediaSourceFactory mediaSourceFactory =
new DefaultMediaSourceFactory(dataSourceFactory)
.setDrmUserAgent(DemoUtil.getUserAgent(this))
.setAdsLoaderProvider(this::getAdsLoader)
.setAdViewProvider(playerView);
trackSelector = new DefaultTrackSelector(/* context= */ this); trackSelector = new DefaultTrackSelector(/* context= */ this);
trackSelector.setParameters(trackSelectorParameters); trackSelector.setParameters(trackSelectorParameters);
lastSeenTrackGroupArray = null; lastSeenTrackGroupArray = null;
player = player =
new SimpleExoPlayer.Builder(/* context= */ this, renderersFactory) new SimpleExoPlayer.Builder(/* context= */ this, renderersFactory)
.setMediaSourceFactory( .setMediaSourceFactory(mediaSourceFactory)
DefaultMediaSourceFactory.newInstance(
/* context= */ this, dataSourceFactory, new AdSupportProvider()))
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.build(); .build();
player.addListener(new PlayerEventListener()); player.addListener(new PlayerEventListener());
@ -361,6 +364,24 @@ public class PlayerActivity extends AppCompatActivity
return mediaItems; return mediaItems;
} }
private AdsLoader getAdsLoader(Uri adTagUri) {
if (mediaItems.size() > 1) {
showToast(R.string.unsupported_ads_in_playlist);
releaseAdsLoader();
return null;
}
if (!adTagUri.equals(loadedAdTagUri)) {
releaseAdsLoader();
loadedAdTagUri = adTagUri;
}
// The ads loader is reused for multiple playbacks, so that ad playback can resume.
if (adsLoader == null) {
adsLoader = new ImaAdsLoader(/* context= */ PlayerActivity.this, adTagUri);
}
adsLoader.setPlayer(player);
return adsLoader;
}
protected void releasePlayer() { protected void releasePlayer() {
if (player != null) { if (player != null) {
updateTrackSelectorParameters(); updateTrackSelectorParameters();
@ -517,33 +538,6 @@ public class PlayerActivity extends AppCompatActivity
} }
} }
private class AdSupportProvider implements DefaultMediaSourceFactory.AdSupportProvider {
@Override
public AdsLoader getAdsLoader(Uri adTagUri) {
if (mediaItems.size() > 1) {
showToast(R.string.unsupported_ads_in_playlist);
releaseAdsLoader();
return null;
}
if (!adTagUri.equals(loadedAdTagUri)) {
releaseAdsLoader();
loadedAdTagUri = adTagUri;
}
// The ads loader is reused for multiple playbacks, so that ad playback can resume.
if (adsLoader == null) {
adsLoader = new ImaAdsLoader(/* context= */ PlayerActivity.this, adTagUri);
}
adsLoader.setPlayer(player);
return adsLoader;
}
@Override
public AdsLoader.AdViewProvider getAdViewProvider() {
return checkNotNull(playerView);
}
}
private static List<MediaItem> createMediaItems(Intent intent, DownloadTracker downloadTracker) { private static List<MediaItem> createMediaItems(Intent intent, DownloadTracker downloadTracker) {
List<MediaItem> mediaItems = new ArrayList<>(); List<MediaItem> mediaItems = new ArrayList<>();
for (MediaItem item : IntentUtil.createMediaItemsFromIntent(intent)) { for (MediaItem item : IntentUtil.createMediaItemsFromIntent(intent)) {

View File

@ -53,7 +53,6 @@ import com.google.android.exoplayer2.offline.DownloadService;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DataSourceInputStream; import com.google.android.exoplayer2.upstream.DataSourceInputStream;
import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.DataSpec;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@ -276,9 +275,7 @@ public class SampleChooserActivity extends AppCompatActivity
protected List<PlaylistGroup> doInBackground(String... uris) { protected List<PlaylistGroup> doInBackground(String... uris) {
List<PlaylistGroup> result = new ArrayList<>(); List<PlaylistGroup> result = new ArrayList<>();
Context context = getApplicationContext(); Context context = getApplicationContext();
String userAgent = Util.getUserAgent(context, "ExoPlayerDemo"); DataSource dataSource = DemoUtil.getDataSourceFactory(context).createDataSource();
DataSource dataSource =
new DefaultDataSource(context, userAgent, /* allowCrossProtocolRedirects= */ false);
for (String uri : uris) { for (String uri : uris) {
DataSpec dataSpec = new DataSpec(Uri.parse(uri)); DataSpec dataSpec = new DataSpec(Uri.parse(uri));
InputStream inputStream = new DataSourceInputStream(dataSource, dataSpec); InputStream inputStream = new DataSourceInputStream(dataSource, dataSpec);

View File

@ -243,8 +243,7 @@ public final class ImaPlaybackTest {
new DefaultDataSourceFactory( new DefaultDataSourceFactory(
context, Util.getUserAgent(context, ImaPlaybackTest.class.getSimpleName())); context, Util.getUserAgent(context, ImaPlaybackTest.class.getSimpleName()));
MediaSource contentMediaSource = MediaSource contentMediaSource =
DefaultMediaSourceFactory.newInstance(context) new DefaultMediaSourceFactory(context).createMediaSource(MediaItem.fromUri(contentUri));
.createMediaSource(MediaItem.fromUri(contentUri));
return new AdsMediaSource( return new AdsMediaSource(
contentMediaSource, contentMediaSource,
dataSourceFactory, dataSourceFactory,

View File

@ -80,7 +80,7 @@ import org.junit.rules.ExternalResource;
exoPlayer = exoPlayer =
new SimpleExoPlayer.Builder(context) new SimpleExoPlayer.Builder(context)
.setLooper(Looper.myLooper()) .setLooper(Looper.myLooper())
.setMediaSourceFactory(new DefaultMediaSourceFactory(dataSourceFactory, null)) .setMediaSourceFactory(new DefaultMediaSourceFactory(dataSourceFactory))
.build(); .build();
sessionPlayerConnector = new SessionPlayerConnector(exoPlayer); sessionPlayerConnector = new SessionPlayerConnector(exoPlayer);
}); });

View File

@ -182,7 +182,7 @@ public interface ExoPlayer extends Player {
this( this(
renderers, renderers,
new DefaultTrackSelector(context), new DefaultTrackSelector(context),
DefaultMediaSourceFactory.newInstance(context), new DefaultMediaSourceFactory(context),
new DefaultLoadControl(), new DefaultLoadControl(),
DefaultBandwidthMeter.getSingletonInstance(context)); DefaultBandwidthMeter.getSingletonInstance(context));
} }

View File

@ -194,7 +194,7 @@ public final class ExoPlayerFactory {
context, context,
renderersFactory, renderersFactory,
trackSelector, trackSelector,
DefaultMediaSourceFactory.newInstance(context), new DefaultMediaSourceFactory(context),
loadControl, loadControl,
bandwidthMeter, bandwidthMeter,
analyticsCollector, analyticsCollector,
@ -250,7 +250,7 @@ public final class ExoPlayerFactory {
return new ExoPlayerImpl( return new ExoPlayerImpl(
renderers, renderers,
trackSelector, trackSelector,
DefaultMediaSourceFactory.newInstance(context), new DefaultMediaSourceFactory(context),
loadControl, loadControl,
bandwidthMeter, bandwidthMeter,
/* analyticsCollector= */ null, /* analyticsCollector= */ null,

View File

@ -43,8 +43,8 @@ public final class MetadataRetriever {
/** /**
* Retrieves the {@link TrackGroupArray} corresponding to a {@link MediaItem}. * Retrieves the {@link TrackGroupArray} corresponding to a {@link MediaItem}.
* *
* <p>This is equivalent to using {@code * <p>This is equivalent to using {@code retrieveMetadata(new DefaultMediaSourceFactory(context),
* retrieveMetadata(DefaultMediaSourceFactory.newInstance(context), mediaItem)}. * mediaItem)}.
* *
* @param context The {@link Context}. * @param context The {@link Context}.
* @param mediaItem The {@link MediaItem} whose metadata should be retrieved. * @param mediaItem The {@link MediaItem} whose metadata should be retrieved.
@ -52,7 +52,7 @@ public final class MetadataRetriever {
*/ */
public static ListenableFuture<TrackGroupArray> retrieveMetadata( public static ListenableFuture<TrackGroupArray> retrieveMetadata(
Context context, MediaItem mediaItem) { Context context, MediaItem mediaItem) {
return retrieveMetadata(DefaultMediaSourceFactory.newInstance(context), mediaItem); return retrieveMetadata(new DefaultMediaSourceFactory(context), mediaItem);
} }
/** /**

View File

@ -163,7 +163,7 @@ public class SimpleExoPlayer extends BasePlayer
context, context,
renderersFactory, renderersFactory,
new DefaultTrackSelector(context), new DefaultTrackSelector(context),
DefaultMediaSourceFactory.newInstance(context), new DefaultMediaSourceFactory(context),
new DefaultLoadControl(), new DefaultLoadControl(),
DefaultBandwidthMeter.getSingletonInstance(context), DefaultBandwidthMeter.getSingletonInstance(context),
new AnalyticsCollector(Clock.DEFAULT)); new AnalyticsCollector(Clock.DEFAULT));

View File

@ -889,7 +889,7 @@ public final class DownloadHelper {
MediaItem mediaItem, MediaItem mediaItem,
DataSource.Factory dataSourceFactory, DataSource.Factory dataSourceFactory,
@Nullable DrmSessionManager drmSessionManager) { @Nullable DrmSessionManager drmSessionManager) {
return new DefaultMediaSourceFactory(dataSourceFactory, /* adSupportProvider= */ null) return new DefaultMediaSourceFactory(dataSourceFactory)
.setDrmSessionManager(drmSessionManager) .setDrmSessionManager(drmSessionManager)
.createMediaSource(mediaItem); .createMediaSource(mediaItem);
} }

View File

@ -25,6 +25,7 @@ import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.offline.StreamKey; import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.ads.AdsLoader; import com.google.android.exoplayer2.source.ads.AdsLoader;
import com.google.android.exoplayer2.source.ads.AdsLoader.AdViewProvider;
import com.google.android.exoplayer2.source.ads.AdsMediaSource; import com.google.android.exoplayer2.source.ads.AdsMediaSource;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
@ -68,101 +69,62 @@ import java.util.List;
* the stream. * the stream.
* </ul> * </ul>
* *
* <h3>Ad support for media items with ad tag uri</h3> * <h3>Ad support for media items with ad tag URIs</h3>
* *
* <p>For a media item with an ad tag uri, an {@link AdSupportProvider} needs to be passed to {@link * <p>To support media items with {@link MediaItem.PlaybackProperties#adTagUri ad tag URIs}, {@link
* #newInstance(Context, DataSource.Factory, AdSupportProvider)}. * #setAdsLoaderProvider} and {@link #setAdViewProvider} need to be called to configure the factory
* with the required providers.
*/ */
public final class DefaultMediaSourceFactory implements MediaSourceFactory { public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/** /**
* Provides {@link AdsLoader ads loaders} and an {@link AdsLoader.AdViewProvider} to created * Provides {@link AdsLoader} instances for media items that have {@link
* {@link AdsMediaSource AdsMediaSources}. * MediaItem.PlaybackProperties#adTagUri ad tag URIs}.
*/ */
public interface AdSupportProvider { public interface AdsLoaderProvider {
/** /**
* Returns an {@link AdsLoader} for the given {@link Uri ad tag uri} or null if no ads loader is * Returns an {@link AdsLoader} for the given {@link MediaItem.PlaybackProperties#adTagUri ad
* available for the given ad tag uri. * tag URI}, or null if no ads loader is available for the given ad tag URI.
* *
* <p>This method is called for each media item for which a media source is created. * <p>This method is called each time a {@link MediaSource} is created from a {@link MediaItem}
* that defines an {@link MediaItem.PlaybackProperties#adTagUri ad tag URI}.
*/ */
@Nullable @Nullable
AdsLoader getAdsLoader(Uri adTagUri); AdsLoader getAdsLoader(Uri adTagUri);
/**
* Returns an {@link AdsLoader.AdViewProvider} which is used to create {@link AdsMediaSource
* AdsMediaSources}.
*/
AdsLoader.AdViewProvider getAdViewProvider();
}
/**
* Creates a new instance with the given {@link Context}.
*
* <p>This is functionally equivalent with calling {@code #newInstance(Context,
* DefaultDataSourceFactory)}.
*
* @param context The {@link Context}.
* @return A new instance of {@link DefaultMediaSourceFactory}.
*/
public static DefaultMediaSourceFactory newInstance(Context context) {
return newInstance(
context,
new DefaultDataSourceFactory(
context, Util.getUserAgent(context, ExoPlayerLibraryInfo.VERSION_SLASHY)));
}
/**
* Creates a new instance with the given {@link Context} and {@link DataSource.Factory}.
*
* @param context The {@link Context}.
* @param dataSourceFactory A {@link DataSource.Factory} to be used to create media sources.
* @return A new instance of {@link DefaultMediaSourceFactory}.
*/
public static DefaultMediaSourceFactory newInstance(
Context context, DataSource.Factory dataSourceFactory) {
return new DefaultMediaSourceFactory(dataSourceFactory, /* adSupportProvider= */ null)
.setDrmUserAgent(Util.getUserAgent(context, ExoPlayerLibraryInfo.VERSION_SLASHY));
}
/**
* Creates a new instance with the given {@link Context} and {@link DataSource.Factory}.
*
* @param context The {@link Context}.
* @param dataSourceFactory A {@link DataSource.Factory} to be used to create media sources.
* @param adSupportProvider A {@link AdSupportProvider} to be used to create ad media sources.
* @return A new instance of {@link DefaultMediaSourceFactory}.
*/
public static DefaultMediaSourceFactory newInstance(
Context context, DataSource.Factory dataSourceFactory, AdSupportProvider adSupportProvider) {
return new DefaultMediaSourceFactory(dataSourceFactory, adSupportProvider)
.setDrmUserAgent(Util.getUserAgent(context, ExoPlayerLibraryInfo.VERSION_SLASHY));
} }
private static final String TAG = "DefaultMediaSourceFactory"; private static final String TAG = "DefaultMediaSourceFactory";
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final MediaSourceDrmHelper mediaSourceDrmHelper;
private final DataSource.Factory dataSourceFactory; private final DataSource.Factory dataSourceFactory;
@Nullable private final AdSupportProvider adSupportProvider;
private final SparseArray<MediaSourceFactory> mediaSourceFactories; private final SparseArray<MediaSourceFactory> mediaSourceFactories;
@C.ContentType private final int[] supportedTypes; @C.ContentType private final int[] supportedTypes;
@Nullable private AdsLoaderProvider adsLoaderProvider;
@Nullable private AdViewProvider adViewProvider;
@Nullable private DrmSessionManager drmSessionManager; @Nullable private DrmSessionManager drmSessionManager;
@Nullable private List<StreamKey> streamKeys; @Nullable private List<StreamKey> streamKeys;
/** /**
* Creates a new instance with the {@link DataSource.Factory} for downloading media and an {@link * Creates a new instance.
* AdSupportProvider} to create {@link AdsMediaSource AdsMediaSources}.
* *
* @param dataSourceFactory A {@link DataSource.Factory} to be used to create media sources. * @param context Any context.
* @param adSupportProvider An {@link AdSupportProvider} to get ads loaders and ad view providers
* to be used to create {@link AdsMediaSource AdsMediaSources}.
*/ */
public DefaultMediaSourceFactory( public DefaultMediaSourceFactory(Context context) {
DataSource.Factory dataSourceFactory, @Nullable AdSupportProvider adSupportProvider) { this(
new DefaultDataSourceFactory(
context, Util.getUserAgent(context, ExoPlayerLibraryInfo.VERSION_SLASHY)));
}
/**
* Creates a new instance.
*
* @param dataSourceFactory A {@link DataSource.Factory} to create {@link DataSource} instances
* for requesting media data.
*/
public DefaultMediaSourceFactory(DataSource.Factory dataSourceFactory) {
this.dataSourceFactory = dataSourceFactory; this.dataSourceFactory = dataSourceFactory;
this.adSupportProvider = adSupportProvider;
mediaSourceDrmHelper = new MediaSourceDrmHelper(); mediaSourceDrmHelper = new MediaSourceDrmHelper();
mediaSourceFactories = loadDelegates(dataSourceFactory); mediaSourceFactories = loadDelegates(dataSourceFactory);
supportedTypes = new int[mediaSourceFactories.size()]; supportedTypes = new int[mediaSourceFactories.size()];
@ -171,6 +133,30 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
} }
} }
/**
* Sets the {@link AdsLoaderProvider} that provides {@link AdsLoader} instances for media items
* that have {@link MediaItem.PlaybackProperties#adTagUri ad tag URIs}.
*
* @param adsLoaderProvider A provider for {@link AdsLoader} instances.
* @return This factory, for convenience.
*/
public DefaultMediaSourceFactory setAdsLoaderProvider(
@Nullable AdsLoaderProvider adsLoaderProvider) {
this.adsLoaderProvider = adsLoaderProvider;
return this;
}
/**
* Sets the {@link AdViewProvider} that provides information about views for the ad playback UI.
*
* @param adViewProvider A provider for {@link AdsLoader} instances.
* @return This factory, for convenience.
*/
public DefaultMediaSourceFactory setAdViewProvider(@Nullable AdViewProvider adViewProvider) {
this.adViewProvider = adViewProvider;
return this;
}
@Override @Override
public DefaultMediaSourceFactory setDrmHttpDataSourceFactory( public DefaultMediaSourceFactory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
@ -279,24 +265,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
if (mediaItem.playbackProperties.adTagUri == null) { if (mediaItem.playbackProperties.adTagUri == null) {
return mediaSource; return mediaSource;
} }
if (adSupportProvider == null) { AdsLoaderProvider adsLoaderProvider = this.adsLoaderProvider;
AdViewProvider adViewProvider = this.adViewProvider;
if (adsLoaderProvider == null || adViewProvider == null) {
Log.w( Log.w(
TAG, TAG,
"Playing media without ads. Pass an AdsSupportProvider to the constructor for supporting" "Playing media without ads. Configure ad support by calling setAdsLoaderProvider and"
+ " media items with an ad tag uri."); + " setAdViewProvider.");
return mediaSource; return mediaSource;
} }
@Nullable @Nullable
AdsLoader adsLoader = adSupportProvider.getAdsLoader(mediaItem.playbackProperties.adTagUri); AdsLoader adsLoader = adsLoaderProvider.getAdsLoader(mediaItem.playbackProperties.adTagUri);
if (adsLoader == null) { if (adsLoader == null) {
Log.w(TAG, "Playing media without ads. No AdsLoader for provided adTagUri"); Log.w(TAG, "Playing media without ads. No AdsLoader for provided adTagUri");
return mediaSource; return mediaSource;
} }
return new AdsMediaSource( return new AdsMediaSource(
mediaSource, mediaSource, /* adMediaSourceFactory= */ this, adsLoader, adViewProvider);
/* adMediaSourceFactory= */ this,
adsLoader,
adSupportProvider.getAdViewProvider());
} }
private static SparseArray<MediaSourceFactory> loadDelegates( private static SparseArray<MediaSourceFactory> loadDelegates(

View File

@ -20,14 +20,12 @@ import static org.mockito.Mockito.mock;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.source.ads.AdsLoader; import com.google.android.exoplayer2.source.ads.AdsLoader;
import com.google.android.exoplayer2.source.ads.AdsMediaSource; import com.google.android.exoplayer2.source.ads.AdsMediaSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
@ -45,7 +43,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_fromMediaItem_returnsSameMediaItemInstance() { public void createMediaSource_fromMediaItem_returnsSameMediaItemInstance() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -56,7 +54,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withoutMimeType_progressiveSource() { public void createMediaSource_withoutMimeType_progressiveSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -69,7 +67,7 @@ public final class DefaultMediaSourceFactoryTest {
public void createMediaSource_withTag_tagInSource_deprecated() { public void createMediaSource_withTag_tagInSource_deprecated() {
Object tag = new Object(); Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).setTag(tag).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).setTag(tag).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -80,7 +78,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withPath_progressiveSource() { public void createMediaSource_withPath_progressiveSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mp3").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mp3").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -91,7 +89,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withNull_usesNonNullDefaults() { public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build();
MediaSource mediaSource = MediaSource mediaSource =
@ -107,7 +105,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withSubtitle_isMergingMediaSource() { public void createMediaSource_withSubtitle_isMergingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
List<MediaItem.Subtitle> subtitles = List<MediaItem.Subtitle> subtitles =
Arrays.asList( Arrays.asList(
new MediaItem.Subtitle(Uri.parse(URI_TEXT), MimeTypes.APPLICATION_TTML, "en"), new MediaItem.Subtitle(Uri.parse(URI_TEXT), MimeTypes.APPLICATION_TTML, "en"),
@ -124,7 +122,7 @@ public final class DefaultMediaSourceFactoryTest {
@SuppressWarnings("deprecation") // Testing deprecated MediaSource.getTag() still works. @SuppressWarnings("deprecation") // Testing deprecated MediaSource.getTag() still works.
public void createMediaSource_withSubtitle_hasTag_deprecated() { public void createMediaSource_withSubtitle_hasTag_deprecated() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
Object tag = new Object(); Object tag = new Object();
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
@ -143,7 +141,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withStartPosition_isClippingMediaSource() { public void createMediaSource_withStartPosition_isClippingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setClipStartPositionMs(1000L).build(); new MediaItem.Builder().setUri(URI_MEDIA).setClipStartPositionMs(1000L).build();
@ -155,7 +153,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withEndPosition_isClippingMediaSource() { public void createMediaSource_withEndPosition_isClippingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setClipEndPositionMs(1000L).build(); new MediaItem.Builder().setUri(URI_MEDIA).setClipEndPositionMs(1000L).build();
@ -167,7 +165,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_relativeToDefaultPosition_isClippingMediaSource() { public void createMediaSource_relativeToDefaultPosition_isClippingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setClipRelativeToDefaultPosition(true).build(); new MediaItem.Builder().setUri(URI_MEDIA).setClipRelativeToDefaultPosition(true).build();
@ -179,7 +177,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_defaultToEnd_isNotClippingMediaSource() { public void createMediaSource_defaultToEnd_isNotClippingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
.setUri(URI_MEDIA) .setUri(URI_MEDIA)
@ -194,7 +192,7 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void getSupportedTypes_coreModule_onlyOther() { public void getSupportedTypes_coreModule_onlyOther() {
int[] supportedTypes = int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()) new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
.getSupportedTypes(); .getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER); assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER);
@ -202,14 +200,12 @@ public final class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withAdTagUri_callsAdsLoader() { public void createMediaSource_withAdTagUri_callsAdsLoader() {
Context applicationContext = ApplicationProvider.getApplicationContext();
Uri adTagUri = Uri.parse(URI_MEDIA); Uri adTagUri = Uri.parse(URI_MEDIA);
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(adTagUri).build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(adTagUri).build();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance( new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
applicationContext, .setAdsLoaderProvider(ignoredAdTagUri -> mock(AdsLoader.class))
new DefaultDataSourceFactory(applicationContext, /* userAgent= */ "ua"), .setAdViewProvider(mock(AdsLoader.AdViewProvider.class));
createAdSupportProvider(mock(AdsLoader.class), mock(AdsLoader.AdViewProvider.class)));
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -217,15 +213,11 @@ public final class DefaultMediaSourceFactoryTest {
} }
@Test @Test
public void createMediaSource_withAdTagUriAdsLoaderNull_playsWithoutAdNoException() { public void createMediaSource_withAdTagUri_adProvidersNotSet_playsWithoutAdNoException() {
Context applicationContext = ApplicationProvider.getApplicationContext();
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(Uri.parse(URI_MEDIA)).build(); new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(Uri.parse(URI_MEDIA)).build();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance( new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
applicationContext,
new DefaultDataSourceFactory(applicationContext, /* userAgent= */ "ua"),
createAdSupportProvider(/* adsLoader= */ null, mock(AdsLoader.AdViewProvider.class)));
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -239,24 +231,8 @@ public final class DefaultMediaSourceFactoryTest {
new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(Uri.parse(URI_MEDIA)).build(); new MediaItem.Builder().setUri(URI_MEDIA).setAdTagUri(Uri.parse(URI_MEDIA)).build();
MediaSource mediaSource = MediaSource mediaSource =
DefaultMediaSourceFactory.newInstance(applicationContext).createMediaSource(mediaItem); new DefaultMediaSourceFactory(applicationContext).createMediaSource(mediaItem);
assertThat(mediaSource).isNotInstanceOf(AdsMediaSource.class); assertThat(mediaSource).isNotInstanceOf(AdsMediaSource.class);
} }
private static DefaultMediaSourceFactory.AdSupportProvider createAdSupportProvider(
@Nullable AdsLoader adsLoader, AdsLoader.AdViewProvider adViewProvider) {
return new DefaultMediaSourceFactory.AdSupportProvider() {
@Nullable
@Override
public AdsLoader getAdsLoader(Uri adTagUri) {
return adsLoader;
}
@Override
public AdsLoader.AdViewProvider getAdViewProvider() {
return adViewProvider;
}
};
}
} }

View File

@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source.dash;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -36,7 +37,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withMimeType_dashSource() { public void createMediaSource_withMimeType_dashSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_MPD).build(); new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_MPD).build();
@ -49,7 +50,7 @@ public class DefaultMediaSourceFactoryTest {
public void createMediaSource_withTag_tagInSource() { public void createMediaSource_withTag_tagInSource() {
Object tag = new Object(); Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
.setUri(URI_MEDIA) .setUri(URI_MEDIA)
@ -65,7 +66,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withPath_dashSource() { public void createMediaSource_withPath_dashSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mpd").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mpd").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -76,7 +77,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withNull_usesNonNullDefaults() { public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mpd").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mpd").build();
MediaSource mediaSource = MediaSource mediaSource =
@ -92,7 +93,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void getSupportedTypes_dashModule_containsTypeDash() { public void getSupportedTypes_dashModule_containsTypeDash() {
int[] supportedTypes = int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()) new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
.getSupportedTypes(); .getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_DASH); assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_DASH);

View File

@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source.hls;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -36,7 +37,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withMimeType_hlsSource() { public void createMediaSource_withMimeType_hlsSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_M3U8).build(); new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_M3U8).build();
@ -49,7 +50,7 @@ public class DefaultMediaSourceFactoryTest {
public void createMediaSource_withTag_tagInSource() { public void createMediaSource_withTag_tagInSource() {
Object tag = new Object(); Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
.setUri(URI_MEDIA) .setUri(URI_MEDIA)
@ -65,7 +66,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withPath_hlsSource() { public void createMediaSource_withPath_hlsSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.m3u8").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.m3u8").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -76,7 +77,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withNull_usesNonNullDefaults() { public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.m3u8").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.m3u8").build();
MediaSource mediaSource = MediaSource mediaSource =
@ -92,7 +93,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void getSupportedTypes_hlsModule_containsTypeHls() { public void getSupportedTypes_hlsModule_containsTypeHls() {
int[] supportedTypes = int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()) new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
.getSupportedTypes(); .getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_HLS); assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_HLS);

View File

@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source.smoothstreaming;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -38,7 +39,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withMimeType_smoothstreamingSource() { public void createMediaSource_withMimeType_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_SS).build(); new MediaItem.Builder().setUri(URI_MEDIA).setMimeType(MimeTypes.APPLICATION_SS).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -49,7 +50,7 @@ public class DefaultMediaSourceFactoryTest {
public void createMediaSource_withTag_tagInSource() { public void createMediaSource_withTag_tagInSource() {
Object tag = new Object(); Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = MediaItem mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
.setUri(URI_MEDIA) .setUri(URI_MEDIA)
@ -65,7 +66,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withIsmPath_smoothstreamingSource() { public void createMediaSource_withIsmPath_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.ism").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.ism").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -76,7 +77,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withManifestPath_smoothstreamingSource() { public void createMediaSource_withManifestPath_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + ".ism/Manifest").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + ".ism/Manifest").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
@ -87,7 +88,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void createMediaSource_withNull_usesNonNullDefaults() { public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory = DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()); new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.ism").build(); MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.ism").build();
MediaSource mediaSource = MediaSource mediaSource =
@ -103,7 +104,7 @@ public class DefaultMediaSourceFactoryTest {
@Test @Test
public void getSupportedTypes_smoothstreamingModule_containsTypeSS() { public void getSupportedTypes_smoothstreamingModule_containsTypeSS() {
int[] supportedTypes = int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext()) new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
.getSupportedTypes(); .getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_SS); assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_SS);