コード例 #1
0
        private void ProcessImmediately(ref RtpPacket rtpPacket)
        {
            SyncSourceId = rtpPacket.SyncSourceId;

            if (!_isFirstPacket)
            {
                int delta = (ushort)(rtpPacket.SeqNumber - _previousSeqNumber);

                if (delta > 1)
                {
                    int lostCount = delta - 1;

                    if (lostCount == -1)
                    {
                        lostCount = ushort.MaxValue;
                    }

                    CumulativePacketLost += (uint)lostCount;

                    if (CumulativePacketLost > 0x7FFFFF)
                    {
                        CumulativePacketLost = 0x7FFFFF;
                    }

                    PacketsLostSinceLastReset += lostCount;

                    _mediaPayloadParser.ResetState();
                }

                if (rtpPacket.SeqNumber < HighestSequenceNumberReceived)
                {
                    ++SequenceCycles;
                }

                _samplesSum += rtpPacket.Timestamp - _previousTimestamp;
            }

            HighestSequenceNumberReceived = rtpPacket.SeqNumber;

            _isFirstPacket = false;
            ++PacketsReceivedSinceLastReset;
            _previousSeqNumber = rtpPacket.SeqNumber;
            _previousTimestamp = rtpPacket.Timestamp;

            if (rtpPacket.PayloadSegment.Count == 0)
            {
                return;
            }

            TimeSpan timeOffset = _samplesFrequency != 0
                ? new TimeSpan((long)(_samplesSum * 1000 / (uint)_samplesFrequency * TimeSpan.TicksPerMillisecond))
                : TimeSpan.MinValue;

            _mediaPayloadParser.Parse(timeOffset, rtpPacket.PayloadSegment, rtpPacket.MarkerBit);
        }
コード例 #2
0
        private void ProcessImmediately(ref RtpPacket rtpPacket, int mediaId)
        {
            SyncSourceId = rtpPacket.SyncSourceId;

            if (!_isFirstPacket)
            {
                int delta = (ushort)(rtpPacket.SeqNumber - _previousSeqNumber);

                if (delta != 1)
                {
                    int lostCount = delta - 1;

                    if (lostCount == -1)
                    {
                        lostCount = ushort.MaxValue;
                    }

                    CumulativePacketLost += (uint)lostCount;

                    if (CumulativePacketLost > 0x7FFFFF)
                    {
                        CumulativePacketLost = 0x7FFFFF;
                    }

                    PacketsLostSinceLastReset += lostCount;

                    _mediaPayloadParser.ResetState();
                }

                if (rtpPacket.SeqNumber < HighestSequenceNumberReceived)
                {
                    ++SequenceCycles;
                }

                long diff = (long)rtpPacket.Timestamp - (long)_previousTimestamp;
                if (_samplesSum + diff > 0)
                {
                    _samplesSum += diff;
                }

                //Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " - RtpStream - _samplesSum: " + _samplesSum.ToString()
                //	+ " rtpPacket.Timestamp: " + rtpPacket.Timestamp
                //	+ " _previousTimestamp: " + _previousTimestamp
                //	+ " diff: " + diff);
            }

            HighestSequenceNumberReceived = rtpPacket.SeqNumber;

            _isFirstPacket = false;
            ++PacketsReceivedSinceLastReset;
            _previousSeqNumber = rtpPacket.SeqNumber;
            _previousTimestamp = rtpPacket.Timestamp;

            if (rtpPacket.PayloadSegment.Count == 0)
            {
                return;
            }

            TimeSpan timeOffset = _samplesFrequency != 0
                ? new TimeSpan((long)(_samplesSum * 1000 / (uint)_samplesFrequency * TimeSpan.TicksPerMillisecond))
                : TimeSpan.MinValue;

            ////Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " - RtpStream - Parsing rtp packet. timeOffset: " + timeOffset.ToString() + " MarkerBit: " + rtpPacket.MarkerBit);

            _mediaPayloadParser.Parse(timeOffset, mediaId, rtpPacket.PayloadSegment, rtpPacket.MarkerBit);
        }