private void HandleByteRange(SubStreamSegment segment, ByterangeTagInstance byteRange)
 {
     if (byteRange.Offset.HasValue)
     {
         segment.Offset        = byteRange.Offset.Value;
         this._byteRangeOffset = byteRange.Offset.Value;
     }
     else
     {
         segment.Offset = this._byteRangeOffset;
     }
     segment.Length         = byteRange.Length;
     this._byteRangeOffset += byteRange.Length;
 }
        private ISegment CreateStreamSegment(M3U8Parser.M3U8Uri uri, CancellationToken cancellationToken)
        {
            SubStreamSegment segment = new SubStreamSegment(M3U8ParserExtensions.ResolveUrl(this._parser, uri.Uri), this._parser.BaseUrl);

            if (this._mediaSequence.HasValue)
            {
                SubStreamSegment subStreamSegment = segment;
                long?            nullable1        = this._mediaSequence;
                long             num       = (long)this._segmentIndex;
                long?            nullable2 = nullable1.HasValue ? new long?(nullable1.GetValueOrDefault() + num) : new long?();
                subStreamSegment.MediaSequence = nullable2;
            }
            ++this._segmentIndex;
            M3U8TagInstance[] m3U8TagInstanceArray = uri.Tags;
            if (m3U8TagInstanceArray == null || 0 == m3U8TagInstanceArray.Length)
            {
                return((ISegment)segment);
            }
            ExtinfTagInstance extinfTagInstance = M3U8Tags.ExtXInf.Find((IEnumerable <M3U8TagInstance>)m3U8TagInstanceArray);

            if (null != extinfTagInstance)
            {
                segment.Duration = new TimeSpan?(TimeSpan.FromSeconds((double)extinfTagInstance.Duration));
            }
            ByterangeTagInstance byteRange = M3U8Tags.ExtXByteRange.Find((IEnumerable <M3U8TagInstance>)m3U8TagInstanceArray);

            if (null != byteRange)
            {
                this.HandleByteRange(segment, byteRange);
            }
            IEnumerable <ExtKeyTagInstance> all = M3U8Tags.ExtXKey.FindAll((IEnumerable <M3U8TagInstance>)m3U8TagInstanceArray);

            if (null != all)
            {
                this.HandleKey(segment, all, cancellationToken);
            }
            return((ISegment)segment);
        }