private IRepresentationStream CreateTemplateRepresentationStream() { Dynamic.SegmentTemplate seg = SegmentTemplate(); SegmentTimeline segTimeline = GetFirst(seg.SegmentTimelines); uint startNumber = seg.StartNumber ?? 1; Dynamic.TimelineItem[] timeline = null; if (segTimeline == null) { timeline = FromDuration(startNumber, seg); } else { timeline = FromTimeline(startNumber, seg, segTimeline); } if (timeline == null) { return(null); } // Live content elements from Segment Base... var presentationTimeOffset = seg.PresentationTimeOffset ?? 0; TimeSpan availabilityTimeOffset = seg.AvailabilityTimeOffset.HasValue ? TimeSpan.FromSeconds(seg.AvailabilityTimeOffset.Value) : TimeSpan.Zero; return(new Dynamic.TemplateRepresentationStream(CalcURL().Uri, seg.Initialization, seg.Media, Bandwidth, Id, seg.Timescale ?? 1, timeline, presentationTimeOffset, seg.TimeShiftBufferDepth, availabilityTimeOffset, seg.AvailabilityTimeComplete, (segTimeline != null), seg.StartNumber ?? 0, seg.Duration)); }
private Dynamic.TimelineItem[] FromDuration(uint startNumber, Dynamic.SegmentTemplate seg) { uint?segDuration = seg.Duration; if (segDuration == null) { return(null); } TimeSpan start = Period.Start ?? TimeSpan.Zero; TimeSpan?duration = Period.Duration; if (duration == null) { TimeSpan mpdDuration = Document.MediaPresentationDuration ?? TimeSpan.Zero; if (mpdDuration <= start) { duration = TimeSpan.Zero; } else { duration = mpdDuration - start; } } if (duration.Equals(TimeSpan.Zero)) { return(null); } return(Dynamic.Timeline.FromDuration(startNumber, start, duration.Value, segDuration.Value, seg.Timescale ?? 1)); }
private Dynamic.TimelineItem[] FromTimeline(uint startNumber, Dynamic.SegmentTemplate seg, SegmentTimeline segmentTimeline) { return(Dynamic.Timeline.FromXml(startNumber, Period.Start ?? TimeSpan.Zero, Period.End, seg.Timescale ?? 1, segmentTimeline.Ss)); }