public uint GetSegmentFromFragment(uint fragN) { if (segmentRunTables.Count == 0) { return(1); } if (!live) { SegmentFragmentPair firstSegment = GetFirstSegment(); if (firstSegment == null) { return(1); } uint segNum = firstSegment.firstSegment; foreach (var tab in segmentRunTables) { foreach (var s in tab.segmentFragmentPairs) { if ((segNum >= s.firstSegment) && (fragN < (s.fragmentsAccrued + s.fragmentsPerSegment))) { return(segNum); } } } } return(GetLastSegment().firstSegment); }
public uint totalFragments() { if (segmentFragmentPairs.Count < 1) { return(0); } SegmentFragmentPair sfp = segmentFragmentPairs[segmentFragmentPairs.Count - 1]; return(sfp.fragmentsPerSegment + sfp.fragmentsAccrued); }
/// <summary> /// Adds the given SegmentFragmentPair to this run table. /// </summary> private void addSegmentFragmentPair(SegmentFragmentPair sfp) { SegmentFragmentPair prevSfp = segmentFragmentPairs.Count <= 0 ? null : segmentFragmentPairs[segmentFragmentPairs.Count - 1]; uint fragmentsAccrued = 0; if (prevSfp != null) { fragmentsAccrued = prevSfp.fragmentsAccrued + (sfp.firstSegment - prevSfp.firstSegment) * prevSfp.fragmentsPerSegment; } sfp.fragmentsAccrued = fragmentsAccrued; segmentFragmentPairs.Add(sfp); }
///<summary>The total number of fragments in the movie.</summary> public uint GetFragmentsCount() { AdobeFragmentRunTable lastFragmentTable = fragmentRunTables[fragmentRunTables.Count - 1]; List <FragmentDurationPair> fdps = lastFragmentTable.fragmentDurationPairs; if (fdps.Count < 1) { SegmentFragmentPair lastSegment = GetLastSegment(); return(lastSegment.fragmentsAccrued + lastSegment.fragmentsPerSegment - 1); } FragmentDurationPair lastValidFdp = fdps[fdps.Count - 1]; if (lastValidFdp.duration == 0) { lastValidFdp = fdps[fdps.Count - 2]; } int deltaTime = (int)(currentMediaTime - lastValidFdp.durationAccrued); uint fragCount = (uint)((deltaTime <= lastValidFdp.duration) ? 1 : (deltaTime / lastValidFdp.duration)); return(lastValidFdp.firstFragment + fragCount - 1); }
private uint calculateSegmentId(SegmentFragmentPair sfp, uint fragmentId) { return(sfp.firstSegment + ((fragmentId - sfp.fragmentsAccrued - 1) / sfp.fragmentsPerSegment)); }