Exemple #1
0
        public virtual void OnTsPacket(byte[] tsPacket)
        {
            TsHeader header = TsHeader.Decode(tsPacket);

            if (((_pid < 0x1fff) && (header.Pid == _pid)) && header.HasPayload)
            {
                int payLoadStart = header.PayLoadStart;
                int num2         = 0;
                if (header.PayloadUnitStartIndicator)
                {
                    num2 = (payLoadStart + tsPacket[payLoadStart]) + 1;
                    if (_section.BufferPos == 0)
                    {
                        payLoadStart += tsPacket[payLoadStart] + 1;
                    }
                    else
                    {
                        payLoadStart++;
                    }
                }
                while (payLoadStart < 0xbc)
                {
                    if (_section.BufferPos == 0)
                    {
                        if (!header.PayloadUnitStartIndicator)
                        {
                            return;
                        }
                        if (tsPacket[payLoadStart] == 0xff)
                        {
                            return;
                        }
                        int sectionLen = this.SnapshotSectionLength(tsPacket, payLoadStart);
                        payLoadStart = this.StartNewTsSection(tsPacket, payLoadStart, sectionLen);
                    }
                    else
                    {
                        if (_section.section_length == -1)
                        {
                            _section.CalcSectionLength(tsPacket, payLoadStart);
                        }
                        if (_section.section_length == 0)
                        {
                            _section.Reset();
                            return;
                        }
                        int num4 = _section.section_length - _section.BufferPos;
                        if ((num2 != 0) && ((payLoadStart + num4) > num2))
                        {
                            num4                    = num2 - payLoadStart;
                            payLoadStart            = this.AddToSection(tsPacket, payLoadStart, num4);
                            _section.section_length = _section.BufferPos - 1;
                            payLoadStart            = num2;
                            incompleteSections++;
                        }
                        else
                        {
                            payLoadStart = this.AddToSection(tsPacket, payLoadStart, num4);
                        }
                    }
                    if (_section.SectionComplete() && (_section.section_length > 0))
                    {
                        this.OnNewSection(_section);
                        if (this.OnSectionDecoded != null)
                        {
                            this.OnSectionDecoded(_section);
                        }
                        _section.Reset();
                    }
                    num2 = 0;
                }
            }
        }
Exemple #2
0
        public virtual void OnTsPacket(byte[] tsPacket)
        {
            TsHeader header = TsHeader.Decode(tsPacket);

            if (m_pid >= 0x1fff)
            {
                return;
            }
            if (header.Pid != m_pid)
            {
                return;
            }
            if (!header.HasPayload)
            {
                return;
            }

            int start = header.PayLoadStart;

            int pointer_field = 0;

            if (header.PayloadUnitStartIndicator)
            {
                pointer_field = start + tsPacket[start] + 1;
                if (m_section.BufferPos == 0)
                {
                    start += tsPacket[start] + 1;
                }
                else
                {
                    start++;
                }
            }
            while (start < 188)
            {
                if (m_section.BufferPos == 0)
                {
                    if (!header.PayloadUnitStartIndicator)
                    {
                        return;
                    }
                    if (tsPacket[start] == 0xFF)
                    {
                        return;
                    }
                    int section_length = SnapshotSectionLength(tsPacket, start);
                    start = StartNewSection(tsPacket, start, section_length);
                }
                else
                {
                    if (m_section.section_length == -1)
                    {
                        m_section.CalcSectionLength(tsPacket, start);
                    }
                    if (m_section.section_length == 0)
                    {
                        m_section.Reset();
                        return;
                    }
                    int len = m_section.section_length - m_section.BufferPos;
                    if (pointer_field != 0 && ((start + len) > pointer_field))
                    {
                        len   = pointer_field - start;
                        start = AddToSection(tsPacket, start, len);
                        m_section.section_length = m_section.BufferPos - 1;
                        start = pointer_field;
                        incompleteSections++;
                    }
                    else
                    {
                        start = AddToSection(tsPacket, start, len);
                    }
                }
                if (m_section.SectionComplete() && m_section.section_length > 0)
                {
                    OnNewSection(m_section);
                    if (OnSectionDecoded != null)
                    {
                        OnSectionDecoded(m_section);
                    }
                    m_section.Reset();
                }
                pointer_field = 0;
            }
        }