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
777d99da
authored
Mar 26, 2020
by
bachinger
Committed by
Oliver Woodman
Mar 27, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
simplify PlayerManager
PiperOrigin-RevId: 303170259
parent
2842eb3e
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
46 deletions
demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java
demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java
View file @
777d99da
...
@@ -29,7 +29,6 @@ import com.google.android.exoplayer2.SimpleExoPlayer;
...
@@ -29,7 +29,6 @@ import com.google.android.exoplayer2.SimpleExoPlayer;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.ext.cast.CastPlayer
;
import
com.google.android.exoplayer2.ext.cast.CastPlayer
;
import
com.google.android.exoplayer2.ext.cast.SessionAvailabilityListener
;
import
com.google.android.exoplayer2.ext.cast.SessionAvailabilityListener
;
import
com.google.android.exoplayer2.source.ConcatenatingMediaSource
;
import
com.google.android.exoplayer2.source.DefaultMediaSourceFactory
;
import
com.google.android.exoplayer2.source.DefaultMediaSourceFactory
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector
;
import
com.google.android.exoplayer2.trackselection.DefaultTrackSelector
;
...
@@ -70,7 +69,6 @@ import java.util.ArrayList;
...
@@ -70,7 +69,6 @@ import java.util.ArrayList;
private
final
CastPlayer
castPlayer
;
private
final
CastPlayer
castPlayer
;
private
final
ArrayList
<
MediaItem
>
mediaQueue
;
private
final
ArrayList
<
MediaItem
>
mediaQueue
;
private
final
Listener
listener
;
private
final
Listener
listener
;
private
final
ConcatenatingMediaSource
concatenatingMediaSource
;
private
TrackGroupArray
lastSeenTrackGroupArray
;
private
TrackGroupArray
lastSeenTrackGroupArray
;
private
int
currentItemIndex
;
private
int
currentItemIndex
;
...
@@ -96,7 +94,6 @@ import java.util.ArrayList;
...
@@ -96,7 +94,6 @@ import java.util.ArrayList;
this
.
castControlView
=
castControlView
;
this
.
castControlView
=
castControlView
;
mediaQueue
=
new
ArrayList
<>();
mediaQueue
=
new
ArrayList
<>();
currentItemIndex
=
C
.
INDEX_UNSET
;
currentItemIndex
=
C
.
INDEX_UNSET
;
concatenatingMediaSource
=
new
ConcatenatingMediaSource
();
trackSelector
=
new
DefaultTrackSelector
(
context
);
trackSelector
=
new
DefaultTrackSelector
(
context
);
exoPlayer
=
new
SimpleExoPlayer
.
Builder
(
context
).
setTrackSelector
(
trackSelector
).
build
();
exoPlayer
=
new
SimpleExoPlayer
.
Builder
(
context
).
setTrackSelector
(
trackSelector
).
build
();
...
@@ -120,7 +117,7 @@ import java.util.ArrayList;
...
@@ -120,7 +117,7 @@ import java.util.ArrayList;
* @param itemIndex The index of the item to play.
* @param itemIndex The index of the item to play.
*/
*/
public
void
selectQueueItem
(
int
itemIndex
)
{
public
void
selectQueueItem
(
int
itemIndex
)
{
setCurrentItem
(
itemIndex
,
C
.
TIME_UNSET
,
true
);
setCurrentItem
(
itemIndex
);
}
}
/** Returns the index of the currently played item. */
/** Returns the index of the currently played item. */
...
@@ -135,10 +132,7 @@ import java.util.ArrayList;
...
@@ -135,10 +132,7 @@ import java.util.ArrayList;
*/
*/
public
void
addItem
(
MediaItem
item
)
{
public
void
addItem
(
MediaItem
item
)
{
mediaQueue
.
add
(
item
);
mediaQueue
.
add
(
item
);
concatenatingMediaSource
.
addMediaSource
(
defaultMediaSourceFactory
.
createMediaSource
(
item
));
currentPlayer
.
addMediaItem
(
item
);
if
(
currentPlayer
==
castPlayer
)
{
castPlayer
.
addMediaItem
(
item
);
}
}
}
/** Returns the size of the media queue. */
/** Returns the size of the media queue. */
...
@@ -167,16 +161,7 @@ import java.util.ArrayList;
...
@@ -167,16 +161,7 @@ import java.util.ArrayList;
if
(
itemIndex
==
-
1
)
{
if
(
itemIndex
==
-
1
)
{
return
false
;
return
false
;
}
}
concatenatingMediaSource
.
removeMediaSource
(
itemIndex
);
currentPlayer
.
removeMediaItem
(
itemIndex
);
if
(
currentPlayer
==
castPlayer
)
{
if
(
castPlayer
.
getPlaybackState
()
!=
Player
.
STATE_IDLE
)
{
Timeline
castTimeline
=
castPlayer
.
getCurrentTimeline
();
if
(
castTimeline
.
getPeriodCount
()
<=
itemIndex
)
{
return
false
;
}
castPlayer
.
removeMediaItem
(
itemIndex
);
}
}
mediaQueue
.
remove
(
itemIndex
);
mediaQueue
.
remove
(
itemIndex
);
if
(
itemIndex
==
currentItemIndex
&&
itemIndex
==
mediaQueue
.
size
())
{
if
(
itemIndex
==
currentItemIndex
&&
itemIndex
==
mediaQueue
.
size
())
{
maybeSetCurrentItemAndNotify
(
C
.
INDEX_UNSET
);
maybeSetCurrentItemAndNotify
(
C
.
INDEX_UNSET
);
...
@@ -198,17 +183,9 @@ import java.util.ArrayList;
...
@@ -198,17 +183,9 @@ import java.util.ArrayList;
if
(
fromIndex
==
-
1
)
{
if
(
fromIndex
==
-
1
)
{
return
false
;
return
false
;
}
}
// Player update.
concatenatingMediaSource
.
moveMediaSource
(
fromIndex
,
newIndex
);
if
(
currentPlayer
==
castPlayer
&&
castPlayer
.
getPlaybackState
()
!=
Player
.
STATE_IDLE
)
{
Timeline
castTimeline
=
castPlayer
.
getCurrentTimeline
();
int
periodCount
=
castTimeline
.
getPeriodCount
();
if
(
periodCount
<=
fromIndex
||
periodCount
<=
newIndex
)
{
return
false
;
}
castPlayer
.
moveMediaItem
(
fromIndex
,
newIndex
);
}
// Player update.
currentPlayer
.
moveMediaItem
(
fromIndex
,
newIndex
);
mediaQueue
.
add
(
newIndex
,
mediaQueue
.
remove
(
fromIndex
));
mediaQueue
.
add
(
newIndex
,
mediaQueue
.
remove
(
fromIndex
));
// Index update.
// Index update.
...
@@ -241,7 +218,6 @@ import java.util.ArrayList;
...
@@ -241,7 +218,6 @@ import java.util.ArrayList;
public
void
release
()
{
public
void
release
()
{
currentItemIndex
=
C
.
INDEX_UNSET
;
currentItemIndex
=
C
.
INDEX_UNSET
;
mediaQueue
.
clear
();
mediaQueue
.
clear
();
concatenatingMediaSource
.
clear
();
castPlayer
.
setSessionAvailabilityListener
(
null
);
castPlayer
.
setSessionAvailabilityListener
(
null
);
castPlayer
.
release
();
castPlayer
.
release
();
localPlayerView
.
setPlayer
(
null
);
localPlayerView
.
setPlayer
(
null
);
...
@@ -345,32 +321,26 @@ import java.util.ArrayList;
...
@@ -345,32 +321,26 @@ import java.util.ArrayList;
this
.
currentPlayer
=
currentPlayer
;
this
.
currentPlayer
=
currentPlayer
;
// Media queue management.
// Media queue management.
if
(
currentPlayer
==
exoPlayer
)
{
currentPlayer
.
setMediaItems
(
mediaQueue
,
windowIndex
,
playbackPositionMs
);
exoPlayer
.
setMediaSource
(
concatenatingMediaSource
,
/* resetPosition= */
true
);
currentPlayer
.
setPlayWhenReady
(
playWhenReady
);
exoPlayer
.
prepare
();
currentPlayer
.
prepare
();
}
// Playback transition.
if
(
windowIndex
!=
C
.
INDEX_UNSET
)
{
setCurrentItem
(
windowIndex
,
playbackPositionMs
,
playWhenReady
);
}
}
}
/**
/**
* Starts playback of the item at the given
position
.
* Starts playback of the item at the given
index
.
*
*
* @param itemIndex The index of the item to play.
* @param itemIndex The index of the item to play.
* @param positionMs The position at which playback should start.
* @param playWhenReady Whether the player should proceed when ready to do so.
*/
*/
private
void
setCurrentItem
(
int
itemIndex
,
long
positionMs
,
boolean
playWhenReady
)
{
private
void
setCurrentItem
(
int
itemIndex
)
{
maybeSetCurrentItemAndNotify
(
itemIndex
);
maybeSetCurrentItemAndNotify
(
itemIndex
);
if
(
currentPlayer
==
castPlayer
&&
castPlayer
.
getCurrentTimeline
().
isEmpty
())
{
if
(
currentPlayer
.
getCurrentTimeline
().
getWindowCount
()
!=
mediaQueue
.
size
())
{
castPlayer
.
setMediaItems
(
mediaQueue
,
itemIndex
,
positionMs
);
// This only happens with the cast player. The receiver app in the cast device clears the
// timeline when the last item of the timeline has been played to end.
currentPlayer
.
setMediaItems
(
mediaQueue
,
itemIndex
,
C
.
TIME_UNSET
);
}
else
{
}
else
{
currentPlayer
.
seekTo
(
itemIndex
,
positionMs
);
currentPlayer
.
seekTo
(
itemIndex
,
C
.
TIME_UNSET
);
currentPlayer
.
setPlayWhenReady
(
playWhenReady
);
}
}
currentPlayer
.
setPlayWhenReady
(
true
);
}
}
private
void
maybeSetCurrentItemAndNotify
(
int
currentItemIndex
)
{
private
void
maybeSetCurrentItemAndNotify
(
int
currentItemIndex
)
{
...
...
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