Parse DASH manifest's publish time.

Parse DASH manifest's publishTime node as defined by ISO/IEC 23009-1:2014,
section 5.3.1.2.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176525922
This commit is contained in:
hoangtc 2017-11-21 10:16:50 -08:00 committed by Oliver Woodman
parent 6607f49be6
commit e575af3ac3
3 changed files with 20 additions and 11 deletions

View File

@ -136,6 +136,7 @@ public class DashManifestTest extends TestCase {
assertEquals(expected.minUpdatePeriodMs, actual.minUpdatePeriodMs);
assertEquals(expected.timeShiftBufferDepthMs, actual.timeShiftBufferDepthMs);
assertEquals(expected.suggestedPresentationDelayMs, actual.suggestedPresentationDelayMs);
assertEquals(expected.publishTimeMs, actual.publishTimeMs);
assertEquals(expected.utcTiming, actual.utcTiming);
assertEquals(expected.location, actual.location);
assertEquals(expected.getPeriodCount(), actual.getPeriodCount());
@ -179,7 +180,7 @@ public class DashManifestTest extends TestCase {
}
private static DashManifest newDashManifest(int duration, Period... periods) {
return new DashManifest(0, duration, 1, false, 2, 3, 4, DUMMY_UTC_TIMING, Uri.EMPTY,
return new DashManifest(0, duration, 1, false, 2, 3, 4, 12345, DUMMY_UTC_TIMING, Uri.EMPTY,
Arrays.asList(periods));
}

View File

@ -67,6 +67,12 @@ public class DashManifest {
*/
public final long suggestedPresentationDelayMs;
/**
* The {@code publishTime} value in milliseconds since epoch, or {@link C#TIME_UNSET} if
* not present.
*/
public final long publishTimeMs;
/**
* The {@link UtcTimingElement}, or null if not present. Defined in DVB A168:7/2016, Section
* 4.7.2.
@ -82,8 +88,8 @@ public class DashManifest {
public DashManifest(long availabilityStartTimeMs, long durationMs, long minBufferTimeMs,
boolean dynamic, long minUpdatePeriodMs, long timeShiftBufferDepthMs,
long suggestedPresentationDelayMs, UtcTimingElement utcTiming, Uri location,
List<Period> periods) {
long suggestedPresentationDelayMs, long publishTimeMs, UtcTimingElement utcTiming,
Uri location, List<Period> periods) {
this.availabilityStartTimeMs = availabilityStartTimeMs;
this.durationMs = durationMs;
this.minBufferTimeMs = minBufferTimeMs;
@ -91,6 +97,7 @@ public class DashManifest {
this.minUpdatePeriodMs = minUpdatePeriodMs;
this.timeShiftBufferDepthMs = timeShiftBufferDepthMs;
this.suggestedPresentationDelayMs = suggestedPresentationDelayMs;
this.publishTimeMs = publishTimeMs;
this.utcTiming = utcTiming;
this.location = location;
this.periods = periods == null ? Collections.<Period>emptyList() : periods;
@ -147,8 +154,8 @@ public class DashManifest {
}
long newDuration = durationMs != C.TIME_UNSET ? durationMs - shiftMs : C.TIME_UNSET;
return new DashManifest(availabilityStartTimeMs, newDuration, minBufferTimeMs, dynamic,
minUpdatePeriodMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming,
location, copyPeriods);
minUpdatePeriodMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, publishTimeMs,
utcTiming, location, copyPeriods);
}
private static ArrayList<AdaptationSet> copyAdaptationSets(

View File

@ -119,6 +119,7 @@ public class DashManifestParser extends DefaultHandler
? parseDuration(xpp, "timeShiftBufferDepth", C.TIME_UNSET) : C.TIME_UNSET;
long suggestedPresentationDelayMs = dynamic
? parseDuration(xpp, "suggestedPresentationDelay", C.TIME_UNSET) : C.TIME_UNSET;
long publishTimeMs = parseDateTime(xpp, "publishTime", C.TIME_UNSET);
UtcTimingElement utcTiming = null;
Uri location = null;
@ -171,17 +172,17 @@ public class DashManifestParser extends DefaultHandler
}
return buildMediaPresentationDescription(availabilityStartTime, durationMs, minBufferTimeMs,
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming,
location, periods);
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs,
publishTimeMs, utcTiming, location, periods);
}
protected DashManifest buildMediaPresentationDescription(long availabilityStartTime,
long durationMs, long minBufferTimeMs, boolean dynamic, long minUpdateTimeMs,
long timeShiftBufferDepthMs, long suggestedPresentationDelayMs, UtcTimingElement utcTiming,
Uri location, List<Period> periods) {
long timeShiftBufferDepthMs, long suggestedPresentationDelayMs, long publishTimeMs,
UtcTimingElement utcTiming, Uri location, List<Period> periods) {
return new DashManifest(availabilityStartTime, durationMs, minBufferTimeMs,
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming,
location, periods);
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs,
publishTimeMs, utcTiming, location, periods);
}
protected UtcTimingElement parseUtcTiming(XmlPullParser xpp) {