Created
August 14, 2014 08:11
-
-
Save martinbonnin/7ad13c83f59684ad5de9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java | |
index c6858ee..33fd681 100644 | |
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java | |
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java | |
@@ -259,6 +259,27 @@ import java.util.List; | |
handler.sendEmptyMessage(MSG_INCREMENTAL_PREPARE); | |
} | |
+ private void updateDuration() { | |
+ long durationUs = 0; | |
+ for (int i = 0; i < renderers.length; i++) { | |
+ TrackRenderer renderer = renderers[i]; | |
+ if (durationUs == TrackRenderer.UNKNOWN_TIME) { | |
+ // We've already encountered a track for which the duration is unknown, so the media | |
+ // duration is unknown regardless of the duration of this track. | |
+ } else { | |
+ long trackDurationUs = renderer.getDurationUs(); | |
+ if (trackDurationUs == TrackRenderer.UNKNOWN_TIME) { | |
+ durationUs = TrackRenderer.UNKNOWN_TIME; | |
+ } else if (trackDurationUs == TrackRenderer.MATCH_LONGEST) { | |
+ // Do nothing. | |
+ } else { | |
+ durationUs = Math.max(durationUs, trackDurationUs); | |
+ } | |
+ } | |
+ this.durationUs = durationUs; | |
+ } | |
+ } | |
+ | |
private void incrementalPrepareInternal() throws ExoPlaybackException { | |
long operationStartTimeMs = SystemClock.elapsedRealtime(); | |
boolean prepared = true; | |
@@ -303,6 +324,7 @@ import java.util.List; | |
} | |
} | |
this.durationUs = durationUs; | |
+ updateDuration(); | |
if (isEnded) { | |
// We don't expect this case, but handle it anyway. | |
@@ -417,6 +439,7 @@ import java.util.List; | |
} | |
} | |
this.bufferedPositionUs = bufferedPositionUs; | |
+ updateDuration(); | |
if (isEnded) { | |
setState(ExoPlayer.STATE_ENDED); | |
diff --git a/library/src/main/java/com/google/android/exoplayer/TrackInfo.java b/library/src/main/java/com/google/android/exoplayer/TrackInfo.java | |
index e6c1b0c..c1156f5 100644 | |
--- a/library/src/main/java/com/google/android/exoplayer/TrackInfo.java | |
+++ b/library/src/main/java/com/google/android/exoplayer/TrackInfo.java | |
@@ -21,7 +21,7 @@ package com.google.android.exoplayer; | |
public final class TrackInfo { | |
public final String mimeType; | |
- public final long durationUs; | |
+ public long durationUs; | |
public TrackInfo(String mimeType, long durationUs) { | |
this.mimeType = mimeType; | |
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HLSSampleSource.java b/library/src/main/java/com/google/android/exoplayer/hls/HLSSampleSource.java | |
index e25b703..de1f0a3 100644 | |
--- a/library/src/main/java/com/google/android/exoplayer/hls/HLSSampleSource.java | |
+++ b/library/src/main/java/com/google/android/exoplayer/hls/HLSSampleSource.java | |
@@ -687,6 +687,13 @@ public class HLSSampleSource implements SampleSource { | |
HLSSampleSource source = HLSSampleSource.this; | |
if (exception == null) { | |
source.variantPlaylistsMap.get(currentEntry).playlist = this.variantPlaylist; | |
+ long durationUs = trackList.get(0).trackInfo.durationUs; | |
+ for (int i = this.variantPlaylist.entries.size() - 1; i > source.sequence; i--) { | |
+ durationUs += this.variantPlaylist.entries.get(i).extinf; | |
+ } | |
+ for (HLSTrack hlsTrack: trackList) { | |
+ hlsTrack.trackInfo.durationUs = durationUs; | |
+ } | |
} | |
source.variantPlaylistTask = null; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment