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); }
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); }