From 525b309764303af559f4c37add838983128a2d6e Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Fri, 19 Sep 2014 18:33:23 +0100 Subject: [PATCH] SmoothStreaming - Parse last chunk duration. --- .../smoothstreaming/SmoothStreamingManifest.java | 16 +++++++++++++++- .../SmoothStreamingManifestParser.java | 11 ++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java index 8d5282d3d1..08a8f0a7b1 100644 --- a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java +++ b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java @@ -173,11 +173,12 @@ public class SmoothStreamingManifest { private final String chunkTemplate; private final List chunkStartTimes; + private final long lastChunkDuration; public StreamElement(Uri baseUri, String chunkTemplate, int type, String subType, long timescale, String name, int qualityLevels, int maxWidth, int maxHeight, int displayWidth, int displayHeight, String language, TrackElement[] tracks, - List chunkStartTimes) { + List chunkStartTimes, long lastChunkDuration) { this.baseUri = baseUri; this.chunkTemplate = chunkTemplate; this.type = type; @@ -193,6 +194,7 @@ public class SmoothStreamingManifest { this.tracks = tracks; this.chunkCount = chunkStartTimes.size(); this.chunkStartTimes = chunkStartTimes; + this.lastChunkDuration = lastChunkDuration; } /** @@ -215,6 +217,18 @@ public class SmoothStreamingManifest { return (chunkStartTimes.get(chunkIndex) * 1000000L) / timescale; } + /** + * Gets the duration of the specified chunk. + * + * @param chunkIndex The index of the chunk. + * @return The duration of the chunk, in microseconds. + */ + public long getChunkDurationUs(int chunkIndex) { + long chunkDuration = (chunkIndex == chunkCount - 1) ? lastChunkDuration + : chunkStartTimes.get(chunkIndex + 1) - chunkStartTimes.get(chunkIndex); + return chunkDuration / timescale; + } + /** * Builds a uri for requesting the specified chunk of the specified track. * diff --git a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifestParser.java b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifestParser.java index ae4cd13b36..1114c1e4d0 100644 --- a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifestParser.java +++ b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifestParser.java @@ -467,7 +467,7 @@ public class SmoothStreamingManifestParser implements ManifestParser startTimes; - private long previousChunkDuration; + private long lastChunkDuration; public StreamElementParser(ElementParser parent, Uri baseUri) { super(parent, baseUri, TAG); @@ -496,16 +496,16 @@ public class SmoothStreamingManifestParser implements ManifestParser