Commit 45178296 by bachinger Committed by Oliver Woodman

add DefaultMediaSourceFactory and use it in PlayerActivity

PiperOrigin-RevId: 298879027
parent b5976a55
...@@ -112,7 +112,7 @@ public final class ExtractorMediaSource extends CompositeMediaSource<Void> { ...@@ -112,7 +112,7 @@ public final class ExtractorMediaSource extends CompositeMediaSource<Void> {
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#tag} and {@link * @deprecated Use {@link MediaItem.Builder#setTag(Object)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@Deprecated @Deprecated
......
...@@ -47,7 +47,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource ...@@ -47,7 +47,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
implements ProgressiveMediaPeriod.Listener { implements ProgressiveMediaPeriod.Listener {
/** Factory for {@link ProgressiveMediaSource}s. */ /** Factory for {@link ProgressiveMediaSource}s. */
public static final class Factory implements MediaSourceFactory { public static final class Factory implements DefaultMediaSourceFactory.Delegate {
private final DataSource.Factory dataSourceFactory; private final DataSource.Factory dataSourceFactory;
...@@ -108,7 +108,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource ...@@ -108,7 +108,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#tag} and {@link * @deprecated Use {@link MediaItem.Builder#setTag(Object)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@Deprecated @Deprecated
......
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source;
import static com.google.common.truth.Truth.assertThat;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Unit test for {@link DefaultMediaSourceFactory}. */
@RunWith(AndroidJUnit4.class)
public final class DefaultMediaSourceFactoryTest {
private static final String URI_MEDIA = "http://exoplayer.dev/video";
@Test
public void createMediaSource_withExtension_progressiveSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("mp4").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(ProgressiveMediaSource.class);
}
@Test
public void createMediaSource_withTag_tagInSource() {
Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA).setTag(tag).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getTag()).isEqualTo(tag);
}
@Test
public void createMediaSource_withPath_progressiveSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.mp3").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(ProgressiveMediaSource.class);
}
@Test
public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA).build();
MediaSource mediaSource =
defaultMediaSourceFactory
.setDrmSessionManager(null)
.setDrmHttpDataSourceFactory(null)
.setLoadErrorHandlingPolicy(null)
.createMediaSource(mediaItem);
assertThat(mediaSource).isNotNull();
}
@Test
public void getSupportedTypes_coreModule_onlyOther() {
int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext())
.getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER);
}
}
...@@ -33,11 +33,11 @@ import com.google.android.exoplayer2.offline.StreamKey; ...@@ -33,11 +33,11 @@ import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource; import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceEventListener;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.SequenceableLoader; import com.google.android.exoplayer2.source.SequenceableLoader;
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerEmsgCallback; import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerEmsgCallback;
import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet; import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
...@@ -79,7 +79,7 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -79,7 +79,7 @@ public final class DashMediaSource extends BaseMediaSource {
} }
/** Factory for {@link DashMediaSource}s. */ /** Factory for {@link DashMediaSource}s. */
public static final class Factory implements MediaSourceFactory { public static final class Factory implements DefaultMediaSourceFactory.Delegate {
private final DashChunkSource.Factory chunkSourceFactory; private final DashChunkSource.Factory chunkSourceFactory;
@Nullable private final DataSource.Factory manifestDataSourceFactory; @Nullable private final DataSource.Factory manifestDataSourceFactory;
...@@ -125,7 +125,7 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -125,7 +125,7 @@ public final class DashMediaSource extends BaseMediaSource {
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#tag} and {@link * @deprecated Use {@link MediaItem.Builder#setTag(Object)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@Deprecated @Deprecated
...@@ -135,7 +135,7 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -135,7 +135,7 @@ public final class DashMediaSource extends BaseMediaSource {
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#streamKeys} and {@link * @deprecated Use {@link MediaItem.Builder#setStreamKeys(List)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
......
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.dash;
import static com.google.common.truth.Truth.assertThat;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSource;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Unit test for creating DASH media sources with the {@link DefaultMediaSourceFactory}. */
@RunWith(AndroidJUnit4.class)
public class DefaultMediaSourceFactoryTest {
private static final String URI_MEDIA = "http://exoplayer.dev/video";
@Test
public void createMediaSource_withExtension_dashSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("mpd").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(DashMediaSource.class);
}
@Test
public void createMediaSource_withTag_tagInSource() {
Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("mpd").setTag(tag).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getTag()).isEqualTo(tag);
}
@Test
public void createMediaSource_withPath_dashSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.mpd").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(DashMediaSource.class);
}
@Test
public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.mpd").build();
MediaSource mediaSource =
defaultMediaSourceFactory
.setDrmSessionManager(null)
.setDrmHttpDataSourceFactory(null)
.setLoadErrorHandlingPolicy(null)
.createMediaSource(mediaItem);
assertThat(mediaSource).isNotNull();
}
@Test
public void getSupportedTypes_dashModule_containsTypeDash() {
int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext())
.getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_DASH);
}
}
...@@ -31,11 +31,11 @@ import com.google.android.exoplayer2.offline.StreamKey; ...@@ -31,11 +31,11 @@ import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource; import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceEventListener;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.SequenceableLoader; import com.google.android.exoplayer2.source.SequenceableLoader;
import com.google.android.exoplayer2.source.SinglePeriodTimeline; import com.google.android.exoplayer2.source.SinglePeriodTimeline;
import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistParserFactory; import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistParserFactory;
...@@ -87,7 +87,7 @@ public final class HlsMediaSource extends BaseMediaSource ...@@ -87,7 +87,7 @@ public final class HlsMediaSource extends BaseMediaSource
public static final int METADATA_TYPE_EMSG = 3; public static final int METADATA_TYPE_EMSG = 3;
/** Factory for {@link HlsMediaSource}s. */ /** Factory for {@link HlsMediaSource}s. */
public static final class Factory implements MediaSourceFactory { public static final class Factory implements DefaultMediaSourceFactory.Delegate {
private final HlsDataSourceFactory hlsDataSourceFactory; private final HlsDataSourceFactory hlsDataSourceFactory;
...@@ -133,7 +133,7 @@ public final class HlsMediaSource extends BaseMediaSource ...@@ -133,7 +133,7 @@ public final class HlsMediaSource extends BaseMediaSource
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#tag} and {@link * @deprecated Use {@link MediaItem.Builder#setTag(Object)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@Deprecated @Deprecated
...@@ -299,7 +299,7 @@ public final class HlsMediaSource extends BaseMediaSource ...@@ -299,7 +299,7 @@ public final class HlsMediaSource extends BaseMediaSource
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#streamKeys} and {@link * @deprecated Use {@link MediaItem.Builder#setStreamKeys(List)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
......
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.hls;
import static com.google.common.truth.Truth.assertThat;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSource;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Unit test for creating HLS media sources with the {@link DefaultMediaSourceFactory}. */
@RunWith(AndroidJUnit4.class)
public class DefaultMediaSourceFactoryTest {
private static final String URI_MEDIA = "http://exoplayer.dev/video";
@Test
public void createMediaSource_withExtension_hlsSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("m3u8").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(HlsMediaSource.class);
}
@Test
public void createMediaSource_withTag_tagInSource() {
Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("m3u8").setTag(tag).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getTag()).isEqualTo(tag);
}
@Test
public void testCreateMediaSource_withPath_hlsSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.m3u8").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(HlsMediaSource.class);
}
@Test
public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.m3u8").build();
MediaSource mediaSource =
defaultMediaSourceFactory
.setDrmSessionManager(null)
.setDrmHttpDataSourceFactory(null)
.setLoadErrorHandlingPolicy(null)
.createMediaSource(mediaItem);
assertThat(mediaSource).isNotNull();
}
@Test
public void getSupportedTypes_hlsModule_containsTypeHls() {
int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext())
.getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_HLS);
}
}
...@@ -30,11 +30,11 @@ import com.google.android.exoplayer2.offline.StreamKey; ...@@ -30,11 +30,11 @@ import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.source.BaseMediaSource; import com.google.android.exoplayer2.source.BaseMediaSource;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceEventListener;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.SequenceableLoader; import com.google.android.exoplayer2.source.SequenceableLoader;
import com.google.android.exoplayer2.source.SinglePeriodTimeline; import com.google.android.exoplayer2.source.SinglePeriodTimeline;
import com.google.android.exoplayer2.source.smoothstreaming.manifest.SsManifest; import com.google.android.exoplayer2.source.smoothstreaming.manifest.SsManifest;
...@@ -66,7 +66,7 @@ public final class SsMediaSource extends BaseMediaSource ...@@ -66,7 +66,7 @@ public final class SsMediaSource extends BaseMediaSource
} }
/** Factory for {@link SsMediaSource}. */ /** Factory for {@link SsMediaSource}. */
public static final class Factory implements MediaSourceFactory { public static final class Factory implements DefaultMediaSourceFactory.Delegate {
private final SsChunkSource.Factory chunkSourceFactory; private final SsChunkSource.Factory chunkSourceFactory;
@Nullable private final DataSource.Factory manifestDataSourceFactory; @Nullable private final DataSource.Factory manifestDataSourceFactory;
...@@ -111,7 +111,7 @@ public final class SsMediaSource extends BaseMediaSource ...@@ -111,7 +111,7 @@ public final class SsMediaSource extends BaseMediaSource
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#tag} and {@link * @deprecated Use {@link MediaItem.Builder#setTag(Object)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@Deprecated @Deprecated
...@@ -206,7 +206,7 @@ public final class SsMediaSource extends BaseMediaSource ...@@ -206,7 +206,7 @@ public final class SsMediaSource extends BaseMediaSource
} }
/** /**
* @deprecated Use {@link MediaItem.PlaybackProperties#streamKeys} and {@link * @deprecated Use {@link MediaItem.Builder#setStreamKeys(List)} and {@link
* #createMediaSource(MediaItem)} instead. * #createMediaSource(MediaItem)} instead.
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
......
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.smoothstreaming;
import static com.google.common.truth.Truth.assertThat;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSource;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Unit test for creating SmoothStreaming media sources with the {@link DefaultMediaSourceFactory}.
*/
@RunWith(AndroidJUnit4.class)
public class DefaultMediaSourceFactoryTest {
private static final String URI_MEDIA = "http://exoplayer.dev/video";
@Test
public void createMediaSource_withExtension_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("ism").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(SsMediaSource.class);
}
@Test
public void createMediaSource_withTag_tagInSource() {
Object tag = new Object();
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem =
new MediaItem.Builder().setSourceUri(URI_MEDIA).setExtension("ism").setTag(tag).build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getTag()).isEqualTo(tag);
}
@Test
public void createMediaSource_withIsmPath_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.ism").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(SsMediaSource.class);
}
@Test
public void testCreateMediaSource_withManifestPath_smoothstreamingSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + ".ism/Manifest").build();
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource).isInstanceOf(SsMediaSource.class);
}
@Test
public void createMediaSource_withNull_usesNonNullDefaults() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext());
MediaItem mediaItem = new MediaItem.Builder().setSourceUri(URI_MEDIA + "/file.ism").build();
MediaSource mediaSource =
defaultMediaSourceFactory
.setDrmSessionManager(null)
.setDrmHttpDataSourceFactory(null)
.setLoadErrorHandlingPolicy(null)
.createMediaSource(mediaItem);
assertThat(mediaSource).isNotNull();
}
@Test
public void getSupportedTypes_smoothstreamingModule_containsTypeSS() {
int[] supportedTypes =
DefaultMediaSourceFactory.newInstance(ApplicationProvider.getApplicationContext())
.getSupportedTypes();
assertThat(supportedTypes).asList().containsExactly(C.TYPE_OTHER, C.TYPE_SS);
}
}
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