public void RoundtripRTCPReceiverResportUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            uint ssrc = 1;

            uint rrSsrc           = 5;
            byte fractionLost     = 6;
            int  packetsLost      = 7;
            uint highestSeqNum    = 8;
            uint jitter           = 9;
            uint lastSRTimestamp  = 10;
            uint delaySinceLastSR = 11;

            var rr = new ReceptionReportSample(rrSsrc, fractionLost, packetsLost, highestSeqNum, jitter, lastSRTimestamp, delaySinceLastSR);

            var receiverReport = new RTCPReceiverReport(ssrc, new List <ReceptionReportSample> {
                rr
            });

            byte[] buffer = receiverReport.GetBytes();

            RTCPReceiverReport parsedRR = new RTCPReceiverReport(buffer);

            Assert.Equal(ssrc, parsedRR.SSRC);

            Assert.Equal(rrSsrc, parsedRR.ReceptionReports.First().SSRC);
            Assert.Equal(fractionLost, parsedRR.ReceptionReports.First().FractionLost);
            Assert.Equal(packetsLost, parsedRR.ReceptionReports.First().PacketsLost);
            Assert.Equal(highestSeqNum, parsedRR.ReceptionReports.First().ExtendedHighestSequenceNumber);
            Assert.Equal(jitter, parsedRR.ReceptionReports.First().Jitter);
            Assert.Equal(lastSRTimestamp, parsedRR.ReceptionReports.First().LastSenderReportTimestamp);
            Assert.Equal(delaySinceLastSR, parsedRR.ReceptionReports.First().DelaySinceLastSenderReport);
        }
        public void RoundtripRTCPCompoundPacketUnitTest()
        {
            logger.LogDebug("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name);
            logger.BeginScope(System.Reflection.MethodBase.GetCurrentMethod().Name);

            uint  ssrc        = 23;
            ulong ntpTs       = 1;
            uint  rtpTs       = 2;
            uint  packetCount = 3;
            uint  octetCount  = 4;

            uint rrSsrc           = 5;
            byte fractionLost     = 6;
            int  packetsLost      = 7;
            uint highestSeqNum    = 8;
            uint jitter           = 9;
            uint lastSRTimestamp  = 10;
            uint delaySinceLastSR = 11;

            string cname = "dummy";

            ReceptionReportSample rr = new ReceptionReportSample(rrSsrc, fractionLost, packetsLost, highestSeqNum, jitter, lastSRTimestamp, delaySinceLastSR);
            var sr = new RTCPSenderReport(ssrc, ntpTs, rtpTs, packetCount, octetCount, new List <ReceptionReportSample> {
                rr
            });
            RTCPSDesReport sdesReport = new RTCPSDesReport(ssrc, cname);

            RTCPCompoundPacket compoundPacket = new RTCPCompoundPacket(sr, sdesReport);

            byte[] buffer = compoundPacket.GetBytes();

            RTCPCompoundPacket parsedCP = new RTCPCompoundPacket(buffer);
            RTCPSenderReport   parsedSR = parsedCP.SenderReport;

            Assert.Equal(ssrc, parsedSR.SSRC);
            Assert.Equal(ntpTs, parsedSR.NtpTimestamp);
            Assert.Equal(rtpTs, parsedSR.RtpTimestamp);
            Assert.Equal(packetCount, parsedSR.PacketCount);
            Assert.Equal(octetCount, parsedSR.OctetCount);
            Assert.True(parsedSR.ReceptionReports.Count == 1);

            Assert.Equal(rrSsrc, parsedSR.ReceptionReports.First().SSRC);
            Assert.Equal(fractionLost, parsedSR.ReceptionReports.First().FractionLost);
            Assert.Equal(packetsLost, parsedSR.ReceptionReports.First().PacketsLost);
            Assert.Equal(highestSeqNum, parsedSR.ReceptionReports.First().ExtendedHighestSequenceNumber);
            Assert.Equal(jitter, parsedSR.ReceptionReports.First().Jitter);
            Assert.Equal(lastSRTimestamp, parsedSR.ReceptionReports.First().LastSenderReportTimestamp);
            Assert.Equal(delaySinceLastSR, parsedSR.ReceptionReports.First().DelaySinceLastSenderReport);

            Assert.Equal(cname, parsedCP.SDesReport.CNAME);
        }
Beispiel #3
0
        /// <summary>
        /// Diagnostic handler to print out our RTCP reports from the remote WebRTC peer.
        /// </summary>
        private static void RtpSession_OnReceiveReport(SDPMediaTypesEnum mediaType, RTCPCompoundPacket report)
        {
            //var rr = recvRtcpReport.ReceiverReport.ReceptionReports.FirstOrDefault();
            //if (rr != null)
            //{
            //    Console.WriteLine($"RTCP {mediaType} Receiver Report: SSRC {rr.SSRC}, pkts lost {rr.PacketsLost}, delay since SR {rr.DelaySinceLastSenderReport}.");
            //}
            //else
            //{
            //    Console.WriteLine($"RTCP {mediaType} Receiver Report: empty.");
            //}

            ReceptionReportSample rrs = null;
            string cname = null;

            if (report.SDesReport != null)
            {
                cname = report.SDesReport.CNAME;
            }

            if (report.SenderReport != null)
            {
                var sr = report.SenderReport;
                rrs = report.SenderReport.ReceptionReports.FirstOrDefault();
                Console.WriteLine($"RTCP recv SR {mediaType}, ssrc {sr.SSRC}, packets sent {sr.PacketCount}, bytes sent {sr.OctetCount}, (cname={cname}).");
            }

            if (report.ReceiverReport != null)
            {
                rrs = report.ReceiverReport.ReceptionReports.FirstOrDefault();
            }

            if (rrs != null)
            {
                Console.WriteLine($"RTCP recv RR {mediaType}, ssrc {rrs.SSRC}, pkts lost {rrs.PacketsLost}, delay since SR {rrs.DelaySinceLastSenderReport}, (cname={cname}).");
            }

            if (report.Bye != null)
            {
                Console.WriteLine($"RTCP recv BYE {mediaType}, reason {report.Bye.Reason}, (cname={cname}).");
            }
        }