From 3d3c90b89d203957930ed42e35e4ce5384d367a5 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Thu, 1 Apr 2021 14:34:53 +0100 Subject: [PATCH] Add getMediaMetadata to Player and SimpleExoPlayer. PiperOrigin-RevId: 366240390 --- RELEASENOTES.md | 1 + .../android/exoplayer2/ext/cast/CastPlayer.java | 7 +++++++ .../java/com/google/android/exoplayer2/Player.java | 11 +++++++++++ .../google/android/exoplayer2/ExoPlayerImpl.java | 6 ++++++ .../google/android/exoplayer2/SimpleExoPlayer.java | 13 +++++++++++++ .../android/exoplayer2/testutil/StubExoPlayer.java | 6 ++++++ 6 files changed, 44 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 11eeb3915f..957f989e9d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -49,6 +49,7 @@ * Core: * Move `getRendererCount` and `getRendererType` methods from `Player` to `ExoPlayer`. + * Add `getMediaMetadata` to `Player` interface. * Reset playback speed when live playback speed control becomes unused ([#8664](https://github.com/google/ExoPlayer/issues/8664)). * Fix playback position issue when re-preparing playback after a diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java index 10270dae2b..8e17644b4c 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java @@ -25,6 +25,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.MediaMetadata; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Timeline; @@ -566,6 +567,12 @@ public final class CastPlayer extends BasePlayer { return Collections.emptyList(); } + @Override + public MediaMetadata getMediaMetadata() { + // CastPlayer does not currently support metadata. + return MediaMetadata.EMPTY; + } + @Override public Timeline getCurrentTimeline() { return currentTimeline; diff --git a/library/common/src/main/java/com/google/android/exoplayer2/Player.java b/library/common/src/main/java/com/google/android/exoplayer2/Player.java index a57282fc2c..cfe54affc9 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/Player.java @@ -35,6 +35,7 @@ import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.util.ExoFlags; +import com.google.android.exoplayer2.util.StableApiCandidate; import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.video.VideoFrameMetadataListener; import com.google.android.exoplayer2.video.VideoListener; @@ -1749,6 +1750,16 @@ public interface Player { */ List getCurrentStaticMetadata(); + /** + * Returns the current combined {@link MediaMetadata}, or {@link MediaMetadata#EMPTY} if not + * supported. + * + *

This {@link MediaMetadata} is a combination of the {@link MediaItem#mediaMetadata} and the + * static and dynamic metadata sourced from {@link EventListener#onStaticMetadataChanged(List)} + * and {@link MetadataOutput#onMetadata(Metadata)}. + */ + MediaMetadata getMediaMetadata(); + /** * Returns the current manifest. The type depends on the type of media being played. May be null. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index 0b169ddc90..1e648e03a6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -974,6 +974,12 @@ import java.util.concurrent.CopyOnWriteArraySet; return playbackInfo.staticMetadata; } + @Override + public MediaMetadata getMediaMetadata() { + // Unsupported operation. + return MediaMetadata.EMPTY; + } + @Override public Timeline getCurrentTimeline() { return playbackInfo.timeline; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index 50985b790e..295143aa33 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -609,6 +609,7 @@ public class SimpleExoPlayer extends BasePlayer private boolean isPriorityTaskManagerRegistered; private boolean playerReleased; private DeviceInfo deviceInfo; + private MediaMetadata currentMediaMetadata; /** @deprecated Use the {@link Builder} and pass it to {@link #SimpleExoPlayer(Builder)}. */ @Deprecated @@ -716,6 +717,7 @@ public class SimpleExoPlayer extends BasePlayer wifiLockManager = new WifiLockManager(builder.context); wifiLockManager.setEnabled(builder.wakeMode == C.WAKE_MODE_NETWORK); deviceInfo = createDeviceInfo(streamVolumeManager); + currentMediaMetadata = MediaMetadata.EMPTY; sendRendererMessage(C.TRACK_TYPE_AUDIO, Renderer.MSG_SET_AUDIO_SESSION_ID, audioSessionId); sendRendererMessage(C.TRACK_TYPE_VIDEO, Renderer.MSG_SET_AUDIO_SESSION_ID, audioSessionId); @@ -1620,6 +1622,11 @@ public class SimpleExoPlayer extends BasePlayer return player.getCurrentStaticMetadata(); } + @Override + public MediaMetadata getMediaMetadata() { + return currentMediaMetadata; + } + @Override public Timeline getCurrentTimeline() { verifyApplicationThread(); @@ -2275,6 +2282,12 @@ public class SimpleExoPlayer extends BasePlayer } } + @Override + public void onMediaItemTransition( + @Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) { + currentMediaMetadata = mediaItem == null ? MediaMetadata.EMPTY : mediaItem.mediaMetadata; + } + @Override public void onPlaybackStateChanged(@State int playbackState) { updateWakeAndWifiLock(); diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java index 66fc803c7c..79fefcaccc 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java @@ -21,6 +21,7 @@ import com.google.android.exoplayer2.BasePlayer; import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.MediaMetadata; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.PlayerMessage; @@ -356,6 +357,11 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } + @Override + public MediaMetadata getMediaMetadata() { + throw new UnsupportedOperationException(); + } + @Override public Timeline getCurrentTimeline() { throw new UnsupportedOperationException();