Created
August 14, 2014 08:10
-
-
Save martinbonnin/e9c808623571e82471fa 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..a4da75f 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. | |
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