Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5204bb0d
authored
Jun 09, 2021
by
samrobinson
Committed by
Oliver Woodman
Jun 10, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add playlist MediaMetadata to the Player.
PiperOrigin-RevId: 378407609
parent
35202cc1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
120 additions
and
1 deletions
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java
library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java
library/common/src/main/java/com/google/android/exoplayer2/Player.java
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsListener.java
library/core/src/test/java/com/google/android/exoplayer2/SimpleExoPlayerTest.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java
View file @
5204bb0d
...
@@ -529,6 +529,18 @@ public final class CastPlayer extends BasePlayer {
...
@@ -529,6 +529,18 @@ public final class CastPlayer extends BasePlayer {
}
}
@Override
@Override
public
MediaMetadata
getPlaylistMediaMetadata
()
{
// CastPlayer does not currently support metadata.
return
MediaMetadata
.
EMPTY
;
}
/** This method is not supported and does nothing. */
@Override
public
void
setPlaylistMediaMetadata
(
MediaMetadata
mediaMetadata
)
{
// CastPlayer does not currently support metadata.
}
@Override
public
Timeline
getCurrentTimeline
()
{
public
Timeline
getCurrentTimeline
()
{
return
currentTimeline
;
return
currentTimeline
;
}
}
...
...
library/common/src/main/java/com/google/android/exoplayer2/ForwardingPlayer.java
View file @
5204bb0d
...
@@ -348,6 +348,16 @@ public class ForwardingPlayer implements Player {
...
@@ -348,6 +348,16 @@ public class ForwardingPlayer implements Player {
return
player
.
getMediaMetadata
();
return
player
.
getMediaMetadata
();
}
}
@Override
public
MediaMetadata
getPlaylistMediaMetadata
()
{
return
player
.
getPlaylistMediaMetadata
();
}
@Override
public
void
setPlaylistMediaMetadata
(
MediaMetadata
mediaMetadata
)
{
player
.
setPlaylistMediaMetadata
(
mediaMetadata
);
}
@Nullable
@Nullable
@Override
@Override
public
Object
getCurrentManifest
()
{
public
Object
getCurrentManifest
()
{
...
@@ -614,6 +624,11 @@ public class ForwardingPlayer implements Player {
...
@@ -614,6 +624,11 @@ public class ForwardingPlayer implements Player {
}
}
@Override
@Override
public
void
onPlaylistMediaMetadataChanged
(
MediaMetadata
mediaMetadata
)
{
eventListener
.
onPlaylistMediaMetadataChanged
(
mediaMetadata
);
}
@Override
public
void
onIsLoadingChanged
(
boolean
isLoading
)
{
public
void
onIsLoadingChanged
(
boolean
isLoading
)
{
eventListener
.
onIsLoadingChanged
(
isLoading
);
eventListener
.
onIsLoadingChanged
(
isLoading
);
}
}
...
...
library/common/src/main/java/com/google/android/exoplayer2/Player.java
View file @
5204bb0d
...
@@ -161,6 +161,9 @@ public interface Player {
...
@@ -161,6 +161,9 @@ public interface Player {
*/
*/
default
void
onMediaMetadataChanged
(
MediaMetadata
mediaMetadata
)
{}
default
void
onMediaMetadataChanged
(
MediaMetadata
mediaMetadata
)
{}
/** Called when the playlist {@link MediaMetadata} changes. */
default
void
onPlaylistMediaMetadataChanged
(
MediaMetadata
mediaMetadata
)
{}
/**
/**
* Called when the player starts or stops loading the source.
* Called when the player starts or stops loading the source.
*
*
...
@@ -1047,7 +1050,8 @@ public interface Player {
...
@@ -1047,7 +1050,8 @@ public interface Player {
EVENT_POSITION_DISCONTINUITY
,
EVENT_POSITION_DISCONTINUITY
,
EVENT_PLAYBACK_PARAMETERS_CHANGED
,
EVENT_PLAYBACK_PARAMETERS_CHANGED
,
EVENT_AVAILABLE_COMMANDS_CHANGED
,
EVENT_AVAILABLE_COMMANDS_CHANGED
,
EVENT_MEDIA_METADATA_CHANGED
EVENT_MEDIA_METADATA_CHANGED
,
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
})
})
@interface
EventFlags
{}
@interface
EventFlags
{}
/** {@link #getCurrentTimeline()} changed. */
/** {@link #getCurrentTimeline()} changed. */
...
@@ -1085,6 +1089,8 @@ public interface Player {
...
@@ -1085,6 +1089,8 @@ public interface Player {
int
EVENT_AVAILABLE_COMMANDS_CHANGED
=
14
;
int
EVENT_AVAILABLE_COMMANDS_CHANGED
=
14
;
/** {@link #getMediaMetadata()} changed. */
/** {@link #getMediaMetadata()} changed. */
int
EVENT_MEDIA_METADATA_CHANGED
=
15
;
int
EVENT_MEDIA_METADATA_CHANGED
=
15
;
/** {@link #getPlaylistMediaMetadata()} changed. */
int
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
=
16
;
/**
/**
* Commands that can be executed on a {@code Player}. One of {@link #COMMAND_PLAY_PAUSE}, {@link
* Commands that can be executed on a {@code Player}. One of {@link #COMMAND_PLAY_PAUSE}, {@link
...
@@ -1724,6 +1730,15 @@ public interface Player {
...
@@ -1724,6 +1730,15 @@ public interface Player {
MediaMetadata
getMediaMetadata
();
MediaMetadata
getMediaMetadata
();
/**
/**
* Returns the playlist {@link MediaMetadata}, as set by {@link
* #setPlaylistMediaMetadata(MediaMetadata)}, or {@link MediaMetadata#EMPTY} if not supported.
*/
MediaMetadata
getPlaylistMediaMetadata
();
/** Sets the playlist {@link MediaMetadata}. */
void
setPlaylistMediaMetadata
(
MediaMetadata
mediaMetadata
);
/**
* Returns the current manifest. The type depends on the type of media being played. May be null.
* Returns the current manifest. The type depends on the type of media being played. May be null.
*/
*/
@Nullable
@Nullable
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
View file @
5204bb0d
...
@@ -103,6 +103,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
...
@@ -103,6 +103,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
private
boolean
pauseAtEndOfMediaItems
;
private
boolean
pauseAtEndOfMediaItems
;
private
Commands
availableCommands
;
private
Commands
availableCommands
;
private
MediaMetadata
mediaMetadata
;
private
MediaMetadata
mediaMetadata
;
private
MediaMetadata
playlistMediaMetadata
;
private
long
fastForwardIncrementMs
;
private
long
fastForwardIncrementMs
;
private
long
rewindIncrementMs
;
private
long
rewindIncrementMs
;
...
@@ -213,6 +214,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
...
@@ -213,6 +214,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
.
add
(
COMMAND_SEEK_TO_MEDIA_ITEM
)
.
add
(
COMMAND_SEEK_TO_MEDIA_ITEM
)
.
build
();
.
build
();
mediaMetadata
=
MediaMetadata
.
EMPTY
;
mediaMetadata
=
MediaMetadata
.
EMPTY
;
playlistMediaMetadata
=
MediaMetadata
.
EMPTY
;
fastForwardIncrementMs
=
DEFAULT_FAST_FORWARD_INCREMENT_MS
;
fastForwardIncrementMs
=
DEFAULT_FAST_FORWARD_INCREMENT_MS
;
rewindIncrementMs
=
DEFAULT_REWIND_INCREMENT_MS
;
rewindIncrementMs
=
DEFAULT_REWIND_INCREMENT_MS
;
maskingWindowIndex
=
C
.
INDEX_UNSET
;
maskingWindowIndex
=
C
.
INDEX_UNSET
;
...
@@ -1027,6 +1029,23 @@ import java.util.concurrent.CopyOnWriteArraySet;
...
@@ -1027,6 +1029,23 @@ import java.util.concurrent.CopyOnWriteArraySet;
}
}
@Override
@Override
public
MediaMetadata
getPlaylistMediaMetadata
()
{
return
playlistMediaMetadata
;
}
@Override
public
void
setPlaylistMediaMetadata
(
MediaMetadata
playlistMediaMetadata
)
{
checkNotNull
(
playlistMediaMetadata
);
if
(
playlistMediaMetadata
.
equals
(
this
.
playlistMediaMetadata
))
{
return
;
}
this
.
playlistMediaMetadata
=
playlistMediaMetadata
;
listeners
.
sendEvent
(
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
,
listener
->
listener
.
onPlaylistMediaMetadataChanged
(
this
.
playlistMediaMetadata
));
}
@Override
public
Timeline
getCurrentTimeline
()
{
public
Timeline
getCurrentTimeline
()
{
return
playbackInfo
.
timeline
;
return
playbackInfo
.
timeline
;
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
View file @
5204bb0d
...
@@ -1690,6 +1690,16 @@ public class SimpleExoPlayer extends BasePlayer
...
@@ -1690,6 +1690,16 @@ public class SimpleExoPlayer extends BasePlayer
}
}
@Override
@Override
public
MediaMetadata
getPlaylistMediaMetadata
()
{
return
player
.
getPlaylistMediaMetadata
();
}
@Override
public
void
setPlaylistMediaMetadata
(
MediaMetadata
mediaMetadata
)
{
player
.
setPlaylistMediaMetadata
(
mediaMetadata
);
}
@Override
public
Timeline
getCurrentTimeline
()
{
public
Timeline
getCurrentTimeline
()
{
verifyApplicationThread
();
verifyApplicationThread
();
return
player
.
getCurrentTimeline
();
return
player
.
getCurrentTimeline
();
...
...
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
View file @
5204bb0d
...
@@ -749,6 +749,15 @@ public class AnalyticsCollector
...
@@ -749,6 +749,15 @@ public class AnalyticsCollector
listener
->
listener
.
onMediaMetadataChanged
(
eventTime
,
mediaMetadata
));
listener
->
listener
.
onMediaMetadataChanged
(
eventTime
,
mediaMetadata
));
}
}
@Override
public
void
onPlaylistMediaMetadataChanged
(
MediaMetadata
playlistMediaMetadata
)
{
EventTime
eventTime
=
generateCurrentPlayerMediaPeriodEventTime
();
sendEvent
(
eventTime
,
AnalyticsListener
.
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
,
listener
->
listener
.
onPlaylistMediaMetadataChanged
(
eventTime
,
playlistMediaMetadata
));
}
@SuppressWarnings
(
"deprecation"
)
// Implementing and calling deprecated listener method.
@SuppressWarnings
(
"deprecation"
)
// Implementing and calling deprecated listener method.
@Override
@Override
public
final
void
onSeekProcessed
()
{
public
final
void
onSeekProcessed
()
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsListener.java
View file @
5204bb0d
...
@@ -170,6 +170,7 @@ public interface AnalyticsListener {
...
@@ -170,6 +170,7 @@ public interface AnalyticsListener {
EVENT_POSITION_DISCONTINUITY
,
EVENT_POSITION_DISCONTINUITY
,
EVENT_PLAYBACK_PARAMETERS_CHANGED
,
EVENT_PLAYBACK_PARAMETERS_CHANGED
,
EVENT_MEDIA_METADATA_CHANGED
,
EVENT_MEDIA_METADATA_CHANGED
,
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
,
EVENT_LOAD_STARTED
,
EVENT_LOAD_STARTED
,
EVENT_LOAD_COMPLETED
,
EVENT_LOAD_COMPLETED
,
EVENT_LOAD_CANCELED
,
EVENT_LOAD_CANCELED
,
...
@@ -248,6 +249,8 @@ public interface AnalyticsListener {
...
@@ -248,6 +249,8 @@ public interface AnalyticsListener {
int
EVENT_PLAYBACK_PARAMETERS_CHANGED
=
Player
.
EVENT_PLAYBACK_PARAMETERS_CHANGED
;
int
EVENT_PLAYBACK_PARAMETERS_CHANGED
=
Player
.
EVENT_PLAYBACK_PARAMETERS_CHANGED
;
/** {@link Player#getMediaMetadata()} changed. */
/** {@link Player#getMediaMetadata()} changed. */
int
EVENT_MEDIA_METADATA_CHANGED
=
Player
.
EVENT_MEDIA_METADATA_CHANGED
;
int
EVENT_MEDIA_METADATA_CHANGED
=
Player
.
EVENT_MEDIA_METADATA_CHANGED
;
/** {@link Player#getPlaylistMediaMetadata()} changed. */
int
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
=
Player
.
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
;
/** A source started loading data. */
/** A source started loading data. */
int
EVENT_LOAD_STARTED
=
1000
;
// Intentional gap to leave space for new Player events
int
EVENT_LOAD_STARTED
=
1000
;
// Intentional gap to leave space for new Player events
/** A source started completed loading data. */
/** A source started completed loading data. */
...
@@ -659,6 +662,15 @@ public interface AnalyticsListener {
...
@@ -659,6 +662,15 @@ public interface AnalyticsListener {
default
void
onMediaMetadataChanged
(
EventTime
eventTime
,
MediaMetadata
mediaMetadata
)
{}
default
void
onMediaMetadataChanged
(
EventTime
eventTime
,
MediaMetadata
mediaMetadata
)
{}
/**
/**
* Called when the playlist {@link MediaMetadata} changes.
*
* @param eventTime The event time.
* @param playlistMediaMetadata The playlist {@link MediaMetadata}.
*/
default
void
onPlaylistMediaMetadataChanged
(
EventTime
eventTime
,
MediaMetadata
playlistMediaMetadata
)
{}
/**
* Called when a media source started loading data.
* Called when a media source started loading data.
*
*
* @param eventTime The event time.
* @param eventTime The event time.
...
...
library/core/src/test/java/com/google/android/exoplayer2/SimpleExoPlayerTest.java
View file @
5204bb0d
...
@@ -21,6 +21,7 @@ import static org.mockito.ArgumentMatchers.any;
...
@@ -21,6 +21,7 @@ import static org.mockito.ArgumentMatchers.any;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyBoolean
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyBoolean
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyFloat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyFloat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyInt
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyInt
;
import
static
org
.
mockito
.
ArgumentMatchers
.
eq
;
import
static
org
.
mockito
.
Mockito
.
atLeast
;
import
static
org
.
mockito
.
Mockito
.
atLeast
;
import
static
org
.
mockito
.
Mockito
.
atLeastOnce
;
import
static
org
.
mockito
.
Mockito
.
atLeastOnce
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
mock
;
...
@@ -62,6 +63,22 @@ public class SimpleExoPlayerTest {
...
@@ -62,6 +63,22 @@ public class SimpleExoPlayerTest {
}
}
@Test
@Test
public
void
onPlaybackMediaMetadataChanged_calledWhenPlaybackMediaMetadataSet
()
{
SimpleExoPlayer
player
=
new
SimpleExoPlayer
.
Builder
(
ApplicationProvider
.
getApplicationContext
()).
build
();
Player
.
Listener
playerListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
playerListener
);
AnalyticsListener
analyticsListener
=
mock
(
AnalyticsListener
.
class
);
player
.
addAnalyticsListener
(
analyticsListener
);
MediaMetadata
mediaMetadata
=
new
MediaMetadata
.
Builder
().
setTitle
(
"test"
).
build
();
player
.
setPlaylistMediaMetadata
(
mediaMetadata
);
verify
(
playerListener
).
onPlaylistMediaMetadataChanged
(
mediaMetadata
);
verify
(
analyticsListener
).
onPlaylistMediaMetadataChanged
(
any
(),
eq
(
mediaMetadata
));
}
@Test
public
void
release_triggersAllPendingEventsInAnalyticsListeners
()
throws
Exception
{
public
void
release_triggersAllPendingEventsInAnalyticsListeners
()
throws
Exception
{
SimpleExoPlayer
player
=
SimpleExoPlayer
player
=
new
SimpleExoPlayer
.
Builder
(
new
SimpleExoPlayer
.
Builder
(
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java
View file @
5204bb0d
...
@@ -391,6 +391,16 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer {
...
@@ -391,6 +391,16 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer {
}
}
@Override
@Override
public
MediaMetadata
getPlaylistMediaMetadata
()
{
throw
new
UnsupportedOperationException
();
}
@Override
public
void
setPlaylistMediaMetadata
(
MediaMetadata
mediaMetadata
)
{
throw
new
UnsupportedOperationException
();
}
@Override
public
Timeline
getCurrentTimeline
()
{
public
Timeline
getCurrentTimeline
()
{
throw
new
UnsupportedOperationException
();
throw
new
UnsupportedOperationException
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment