diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java index 797eb503dd..211e22deff 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java @@ -297,9 +297,9 @@ public class PlayerActivity extends AppCompatActivity .setTrackSelector(trackSelector) .build(); player.addListener(new PlayerEventListener()); + player.addAnalyticsListener(new EventLogger(trackSelector)); player.setAudioAttributes(AudioAttributes.DEFAULT, /* handleAudioFocus= */ true); player.setPlayWhenReady(startAutoPlay); - player.addAnalyticsListener(new EventLogger(trackSelector)); playerView.setPlayer(player); playerView.setPlaybackPreparer(this); debugViewHelper = new DebugTextViewHelper(player, debugTextView); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Player.java b/library/core/src/main/java/com/google/android/exoplayer2/Player.java index 490022de93..9d9d9cdc2d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Player.java @@ -374,8 +374,6 @@ public interface Player { } /** The device component of a {@link Player}. */ - // Note: It's mostly from the androidx.media.VolumeProviderCompat and - // androidx.media.MediaControllerCompat.PlaybackInfo. interface DeviceComponent { /** Adds a listener to receive device events. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Timeline.java b/library/core/src/main/java/com/google/android/exoplayer2/Timeline.java index b2268e1fcc..e992eb588d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Timeline.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Timeline.java @@ -48,62 +48,74 @@ import com.google.android.exoplayer2.util.Util; *
A timeline for a single media file or on-demand stream consists of a single period
- * and window. The window spans the whole period, indicating that all parts of the media are
- * available for playback. The window's default position is typically at the start of the period
- * (indicated by the black dot in the figure above).
+ * single file">
+ *
+ *
A timeline for a single media file or on-demand stream consists of a single period and window. + * The window spans the whole period, indicating that all parts of the media are available for + * playback. The window's default position is typically at the start of the period (indicated by the + * black dot in the figure above). * *
A timeline for a playlist of media files or on-demand streams consists of
- * multiple periods, each with its own window. Each window spans the whole of the corresponding
- * period, and typically has a default position at the start of the period. The properties of the
- * periods and windows (e.g. their durations and whether the window is seekable) will often only
- * become known when the player starts buffering the corresponding file or stream.
+ * playlist of files">
+ *
+ *
A timeline for a playlist of media files or on-demand streams consists of multiple periods, + * each with its own window. Each window spans the whole of the corresponding period, and typically + * has a default position at the start of the period. The properties of the periods and windows + * (e.g. their durations and whether the window is seekable) will often only become known when the + * player starts buffering the corresponding file or stream. * *
A timeline for a live stream consists of a period whose
- * duration is unknown, since it's continually extending as more content is broadcast. If content
- * only remains available for a limited period of time then the window may start at a non-zero
- * position, defining the region of content that can still be played. The window will have {@link
- * Window#isLive} set to true to indicate it's a live stream and {@link Window#isDynamic} set to
- * true as long as we expect changes to the live window. Its default position is typically near to
- * the live edge (indicated by the black dot in the figure above).
+ * a live stream with limited availability">
+ *
+ *
A timeline for a live stream consists of a period whose duration is unknown, since it's + * continually extending as more content is broadcast. If content only remains available for a + * limited period of time then the window may start at a non-zero position, defining the region of + * content that can still be played. The window will have {@link Window#isLive} set to true to + * indicate it's a live stream and {@link Window#isDynamic} set to true as long as we expect changes + * to the live window. Its default position is typically near to the live edge (indicated by the + * black dot in the figure above). * *
A timeline for a live stream with indefinite
- * availability is similar to the Live stream with limited availability
- * case, except that the window starts at the beginning of the period to indicate that all of the
- * previously broadcast content can still be played.
+ * for a live stream with indefinite availability">
+ *
+ *
A timeline for a live stream with indefinite availability is similar to the Live stream with limited availability case, except that the window + * starts at the beginning of the period to indicate that all of the previously broadcast content + * can still be played. * *
This case arises when a live stream is explicitly
- * divided into separate periods, for example at content boundaries. This case is similar to the Live stream with limited availability case, except that the window may
- * span more than one period. Multiple periods are also possible in the indefinite availability
- * case.
+ * for a live stream with multiple periods">
+ *
+ *
This case arises when a live stream is explicitly divided into separate periods, for example + * at content boundaries. This case is similar to the Live stream with + * limited availability case, except that the window may span more than one period. Multiple + * periods are also possible in the indefinite availability case. * *
This case is the concatenation of the Single media file or on-demand stream and Live
- * stream with multiple periods cases. When playback of the on-demand stream ends, playback of
- * the live stream will start from its default position near the live edge.
+ * on-demand stream followed by a live stream">
+ *
+ *
This case is the concatenation of the Single media file or on-demand + * stream and Live stream with multiple periods cases. When playback + * of the on-demand stream ends, playback of the live stream will start from its default position + * near the live edge. * *
This case includes mid-roll ad groups,
- * which are defined as part of the timeline's single period. The period can be queried for
- * information about the ad groups and the ads they contain.
+ * timeline for an on-demand stream with mid-roll ad groups">
+ *
+ *
This case includes mid-roll ad groups, which are defined as part of the timeline's single + * period. The period can be queried for information about the ad groups and the ads they contain. */ public abstract class Timeline { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java b/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java index aa82d41414..a441e81bc4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java @@ -318,12 +318,6 @@ public class EventLogger implements AnalyticsListener { logd(eventTime, "audioInputFormat", Format.toLogString(format)); } - @Override - public void onAudioPositionAdvancing(EventTime eventTime, long playoutStartSystemTimeMs) { - long timeSincePlayoutStartMs = System.currentTimeMillis() - playoutStartSystemTimeMs; - logd(eventTime, "audioPositionAdvancing", "timeSincePlayoutStartMs=" + timeSincePlayoutStartMs); - } - @Override public void onAudioUnderrun( EventTime eventTime, int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {