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.minUpdatePeriodMs, actual.minUpdatePeriodMs);
assertEquals(expected.timeShiftBufferDepthMs, actual.timeShiftBufferDepthMs); assertEquals(expected.timeShiftBufferDepthMs, actual.timeShiftBufferDepthMs);
assertEquals(expected.suggestedPresentationDelayMs, actual.suggestedPresentationDelayMs); assertEquals(expected.suggestedPresentationDelayMs, actual.suggestedPresentationDelayMs);
assertEquals(expected.publishTimeMs, actual.publishTimeMs);
assertEquals(expected.utcTiming, actual.utcTiming); assertEquals(expected.utcTiming, actual.utcTiming);
assertEquals(expected.location, actual.location); assertEquals(expected.location, actual.location);
assertEquals(expected.getPeriodCount(), actual.getPeriodCount()); assertEquals(expected.getPeriodCount(), actual.getPeriodCount());
@ -179,7 +180,7 @@ public class DashManifestTest extends TestCase {
} }
private static DashManifest newDashManifest(int duration, Period... periods) { 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)); Arrays.asList(periods));
} }

View File

@ -67,6 +67,12 @@ public class DashManifest {
*/ */
public final long suggestedPresentationDelayMs; 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 * The {@link UtcTimingElement}, or null if not present. Defined in DVB A168:7/2016, Section
* 4.7.2. * 4.7.2.
@ -82,8 +88,8 @@ public class DashManifest {
public DashManifest(long availabilityStartTimeMs, long durationMs, long minBufferTimeMs, public DashManifest(long availabilityStartTimeMs, long durationMs, long minBufferTimeMs,
boolean dynamic, long minUpdatePeriodMs, long timeShiftBufferDepthMs, boolean dynamic, long minUpdatePeriodMs, long timeShiftBufferDepthMs,
long suggestedPresentationDelayMs, UtcTimingElement utcTiming, Uri location, long suggestedPresentationDelayMs, long publishTimeMs, UtcTimingElement utcTiming,
List<Period> periods) { Uri location, List<Period> periods) {
this.availabilityStartTimeMs = availabilityStartTimeMs; this.availabilityStartTimeMs = availabilityStartTimeMs;
this.durationMs = durationMs; this.durationMs = durationMs;
this.minBufferTimeMs = minBufferTimeMs; this.minBufferTimeMs = minBufferTimeMs;
@ -91,6 +97,7 @@ public class DashManifest {
this.minUpdatePeriodMs = minUpdatePeriodMs; this.minUpdatePeriodMs = minUpdatePeriodMs;
this.timeShiftBufferDepthMs = timeShiftBufferDepthMs; this.timeShiftBufferDepthMs = timeShiftBufferDepthMs;
this.suggestedPresentationDelayMs = suggestedPresentationDelayMs; this.suggestedPresentationDelayMs = suggestedPresentationDelayMs;
this.publishTimeMs = publishTimeMs;
this.utcTiming = utcTiming; this.utcTiming = utcTiming;
this.location = location; this.location = location;
this.periods = periods == null ? Collections.<Period>emptyList() : periods; 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; long newDuration = durationMs != C.TIME_UNSET ? durationMs - shiftMs : C.TIME_UNSET;
return new DashManifest(availabilityStartTimeMs, newDuration, minBufferTimeMs, dynamic, return new DashManifest(availabilityStartTimeMs, newDuration, minBufferTimeMs, dynamic,
minUpdatePeriodMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming, minUpdatePeriodMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, publishTimeMs,
location, copyPeriods); utcTiming, location, copyPeriods);
} }
private static ArrayList<AdaptationSet> copyAdaptationSets( 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; ? parseDuration(xpp, "timeShiftBufferDepth", C.TIME_UNSET) : C.TIME_UNSET;
long suggestedPresentationDelayMs = dynamic long suggestedPresentationDelayMs = dynamic
? parseDuration(xpp, "suggestedPresentationDelay", C.TIME_UNSET) : C.TIME_UNSET; ? parseDuration(xpp, "suggestedPresentationDelay", C.TIME_UNSET) : C.TIME_UNSET;
long publishTimeMs = parseDateTime(xpp, "publishTime", C.TIME_UNSET);
UtcTimingElement utcTiming = null; UtcTimingElement utcTiming = null;
Uri location = null; Uri location = null;
@ -171,17 +172,17 @@ public class DashManifestParser extends DefaultHandler
} }
return buildMediaPresentationDescription(availabilityStartTime, durationMs, minBufferTimeMs, return buildMediaPresentationDescription(availabilityStartTime, durationMs, minBufferTimeMs,
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming, dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs,
location, periods); publishTimeMs, utcTiming, location, periods);
} }
protected DashManifest buildMediaPresentationDescription(long availabilityStartTime, protected DashManifest buildMediaPresentationDescription(long availabilityStartTime,
long durationMs, long minBufferTimeMs, boolean dynamic, long minUpdateTimeMs, long durationMs, long minBufferTimeMs, boolean dynamic, long minUpdateTimeMs,
long timeShiftBufferDepthMs, long suggestedPresentationDelayMs, UtcTimingElement utcTiming, long timeShiftBufferDepthMs, long suggestedPresentationDelayMs, long publishTimeMs,
Uri location, List<Period> periods) { UtcTimingElement utcTiming, Uri location, List<Period> periods) {
return new DashManifest(availabilityStartTime, durationMs, minBufferTimeMs, return new DashManifest(availabilityStartTime, durationMs, minBufferTimeMs,
dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs, utcTiming, dynamic, minUpdateTimeMs, timeShiftBufferDepthMs, suggestedPresentationDelayMs,
location, periods); publishTimeMs, utcTiming, location, periods);
} }
protected UtcTimingElement parseUtcTiming(XmlPullParser xpp) { protected UtcTimingElement parseUtcTiming(XmlPullParser xpp) {