diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsMediaSource.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsMediaSource.java index 400061d019..d9c13e07b9 100644 --- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsMediaSource.java +++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsMediaSource.java @@ -100,6 +100,12 @@ public final class ImaAdsMediaSource extends BaseMediaSource implements SourceIn adsMediaSource.releasePeriod(mediaPeriod); } + @Override + @Nullable + public Object getTag() { + return adsMediaSource.getTag(); + } + @Override public void releaseSourceInternal() { adsMediaSource.releaseSource(/* listener= */ this); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java index 3916d41b61..90047f9741 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java @@ -224,6 +224,12 @@ public final class ClippingMediaSource extends CompositeMediaSource { } } + @Override + @Nullable + public Object getTag() { + return mediaSource.getTag(); + } + @Override public void releaseSourceInternal() { super.releaseSourceInternal(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java index 1f3b01182a..f6fd497f3d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java @@ -508,6 +508,12 @@ public class ConcatenatingMediaSource extends CompositeMediaSource { } } + @Override + @Nullable + public Object getTag() { + return childSource.getTag(); + } + @Override protected void onChildSourceInfoRefreshed( Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java index d8335131f9..8a7f861893 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java @@ -275,6 +275,11 @@ public interface MediaSource { */ void releasePeriod(MediaPeriod mediaPeriod); + /** + * Returns the tag set on media source, or null when none was set. + */ + Object getTag(); + /** * Removes a listener for timeline and/or manifest updates and releases the source if no longer * required. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java index ecb4b10c6a..bfe0800d35 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java @@ -137,6 +137,12 @@ public final class MergingMediaSource extends CompositeMediaSource { } } + @Override + @Nullable + public Object getTag() { + return mediaSources.length > 0 ? mediaSources[0].getTag() : null; + } + @Override public void releaseSourceInternal() { super.releaseSourceInternal(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java index 1ac6207454..57a0440b06 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java @@ -185,6 +185,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource { private final LoadErrorHandlingPolicy loadErrorHandlingPolicy; private final boolean treatLoadErrorsAsEndOfStream; private final Timeline timeline; + private final @Nullable Object tag; private @Nullable TransferListener transferListener; @@ -287,6 +288,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource { this.durationUs = durationUs; this.loadErrorHandlingPolicy = loadErrorHandlingPolicy; this.treatLoadErrorsAsEndOfStream = treatLoadErrorsAsEndOfStream; + this.tag = tag; dataSpec = new DataSpec(uri, DataSpec.FLAG_ALLOW_GZIP | DataSpec.FLAG_ALLOW_CACHING_UNKNOWN_LENGTH); timeline = @@ -327,6 +329,12 @@ public final class SingleSampleMediaSource extends BaseMediaSource { ((SingleSampleMediaPeriod) mediaPeriod).release(); } + @Override + @Nullable + public Object getTag() { + return tag; + } + @Override public void releaseSourceInternal() { // Do nothing. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java index 7fc0f22bf3..0944cc2ff2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java @@ -387,6 +387,12 @@ public final class AdsMediaSource extends CompositeMediaSource { deferredMediaPeriod.releasePeriod(); } + @Override + @Nullable + public Object getTag() { + return contentMediaSource.getTag(); + } + @Override public void releaseSourceInternal() { super.releaseSourceInternal(); diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index b04fcf7247..9068f62d37 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -658,6 +658,12 @@ public final class DashMediaSource extends BaseMediaSource { periodsById.remove(dashMediaPeriod.id); } + @Override + @Nullable + public Object getTag() { + return tag; + } + @Override public void releaseSourceInternal() { manifestLoadPending = false; diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java index a075dacf3a..1af68dc2ec 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java @@ -425,6 +425,12 @@ public final class HlsMediaSource extends BaseMediaSource ((HlsMediaPeriod) mediaPeriod).release(); } + @Override + @Nullable + public Object getTag() { + return tag; + } + @Override public void releaseSourceInternal() { playlistTracker.stop(); diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index a756b7f4f1..9b2001bb48 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -549,6 +549,12 @@ public final class SsMediaSource extends BaseMediaSource mediaPeriods.remove(period); } + @Override + @Nullable + public Object getTag() { + return tag; + } + @Override public void releaseSourceInternal() { manifest = sideloadedManifest ? manifest : null; diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java index 2fca4f42c7..f00274dbf8 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java @@ -133,6 +133,14 @@ public class FakeMediaSource extends BaseMediaSource { fakeMediaPeriod.release(); } + @Override + @Nullable + public Object getTag() { + boolean hasTimeline = timeline != null && !timeline.isEmpty(); + + return hasTimeline ? timeline.getWindow(0, new Timeline.Window()).tag : null; + } + @Override public void releaseSourceInternal() { assertThat(preparedSource).isTrue();