public IEnumerable <RtcpPacket> GetReportByePackets() { RtcpReceiverReportPacket receiverReport = CreateReceiverReport(); yield return(receiverReport); RtcpByePacket byeReport = new RtcpByePacket(_senderSyncSourceId); yield return(byeReport); }
public IEnumerable <RtcpPacket> GetReportSdesPackets() { RtcpReceiverReportPacket receiverReport = CreateReceiverReport(); yield return(receiverReport); RtcpSdesReportPacket sdesReport = CreateSdesReport(); yield return(sdesReport); }
private RtcpReceiverReportPacket CreateReceiverReport() { int fractionLost; if (_rtpStatisticsProvider.PacketsReceivedSinceLastReset == 0) { fractionLost = 0; } else { fractionLost = _rtpStatisticsProvider.PacketsLostSinceLastReset * 256 / _rtpStatisticsProvider.PacketsReceivedSinceLastReset; } uint lastNtpTimeSenderReportReceived; uint delaySinceLastTimeSenderReportReceived; if (_rtcpSenderStatisticsProvider.LastTimeReportReceived == DateTime.MinValue) { lastNtpTimeSenderReportReceived = 0; delaySinceLastTimeSenderReportReceived = 0; } else { lastNtpTimeSenderReportReceived = (uint)((_rtcpSenderStatisticsProvider.LastNtpTimeReportReceived >> 16) & uint.MaxValue); TimeSpan delta = DateTime.UtcNow - _rtcpSenderStatisticsProvider.LastTimeReportReceived; delaySinceLastTimeSenderReportReceived = (uint)delta.TotalSeconds * 65536; } uint extHighestSequenceNumberReceived = (uint)(_rtpStatisticsProvider.SequenceCycles << 16 | _rtpStatisticsProvider.HighestSequenceNumberReceived); var rtcpReportBlock = new RtcpReportBlock(_rtpStatisticsProvider.SyncSourceId, fractionLost, _rtpStatisticsProvider.CumulativePacketLost, extHighestSequenceNumberReceived, 0, lastNtpTimeSenderReportReceived, delaySinceLastTimeSenderReportReceived); var receiverReport = new RtcpReceiverReportPacket(_senderSyncSourceId, new[] { rtcpReportBlock }); _rtpStatisticsProvider.ResetState(); return(receiverReport); }