Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 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));
 }