From 9384e0a9ce663273475fdb4cc218fe93f0cf1f9d Mon Sep 17 00:00:00 2001 From: liyalong1 Date: Thu, 2 Dec 2021 11:25:01 +0800 Subject: [PATCH 1/3] fix nack encode seqnum --- trunk/src/kernel/srs_kernel_rtc_rtcp.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp index d3febbc592..6ea71a821c 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp @@ -1348,7 +1348,10 @@ srs_error_t SrsRtcpNack::encode(SrsBuffer *buffer) } else if( (sn - pid) > 16) { // add new chunk chunks.push_back(chunk); - chunk.in_use = false; + chunk.pid = sn; + chunk.blp = 0; + chunk.in_use = true; + pid = sn; } else { chunk.blp |= 1 << (sn-pid-1); } From f06acf2524b595d9e95282551b6db137a90456df Mon Sep 17 00:00:00 2001 From: long Date: Sun, 5 Dec 2021 13:21:17 +0800 Subject: [PATCH 2/3] add nack encode utest --- trunk/src/utest/srs_utest_rtc.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/trunk/src/utest/srs_utest_rtc.cpp b/trunk/src/utest/srs_utest_rtc.cpp index c1b63466f8..9d986fe1e1 100644 --- a/trunk/src/utest/srs_utest_rtc.cpp +++ b/trunk/src/utest/srs_utest_rtc.cpp @@ -744,6 +744,32 @@ VOID TEST(KernelRTCTest, NACKFetchRTPPacket) } } +VOID TEST(KernelRTCTest, NACKEncode) +{ + uint32_t ssrc = 123; + char buf_before[kRtcpPacketSize]; + SrsBuffer stream_before(buf_before, sizeof(buf_before)); + + SrsRtcpNack rtcpNack_encode(ssrc); + for(uint16_t i = 16; i < 50; ++i) { + rtcpNack_encode.add_lost_sn(i); + } + srs_error_t err1 = rtcpNack_encode.encode(&stream_before); + EXPECT_TRUE(err1 == 0); + char buf_after[kRtcpPacketSize]; + memcpy(buf_after, buf_before, kRtcpPacketSize); + SrsBuffer stream_after(buf_after, sizeof(buf_after)); + SrsRtcpNack rtcpNack_decode(ssrc); + srs_error_t err2 = rtcpNack_decode.decode(&stream_after); + EXPECT_TRUE(err2 == 0); + vector before = rtcpNack_encode.get_lost_sns(); + vector after = rtcpNack_decode.get_lost_sns(); + EXPECT_TRUE(before.size() == after.size()); + for(int i = 0; i < before.size() && i < after.size(); ++i) { + EXPECT_TRUE(before.at(i) == after.at(i)); + } +} + extern bool srs_is_stun(const uint8_t* data, size_t size); extern bool srs_is_dtls(const uint8_t* data, size_t len); extern bool srs_is_rtp_or_rtcp(const uint8_t* data, size_t len); From e9ef53633d0d14682c81ac6c85797f79873d5e59 Mon Sep 17 00:00:00 2001 From: long Date: Sun, 5 Dec 2021 16:37:35 +0800 Subject: [PATCH 3/3] change Variable naming --- trunk/src/utest/srs_utest_rtc.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/trunk/src/utest/srs_utest_rtc.cpp b/trunk/src/utest/srs_utest_rtc.cpp index 9d986fe1e1..0d7ea30e95 100644 --- a/trunk/src/utest/srs_utest_rtc.cpp +++ b/trunk/src/utest/srs_utest_rtc.cpp @@ -750,20 +750,20 @@ VOID TEST(KernelRTCTest, NACKEncode) char buf_before[kRtcpPacketSize]; SrsBuffer stream_before(buf_before, sizeof(buf_before)); - SrsRtcpNack rtcpNack_encode(ssrc); + SrsRtcpNack rtcp_nack_encode(ssrc); for(uint16_t i = 16; i < 50; ++i) { - rtcpNack_encode.add_lost_sn(i); + rtcp_nack_encode.add_lost_sn(i); } - srs_error_t err1 = rtcpNack_encode.encode(&stream_before); - EXPECT_TRUE(err1 == 0); + srs_error_t err_before = rtcp_nack_encode.encode(&stream_before); + EXPECT_TRUE(err_before == 0); char buf_after[kRtcpPacketSize]; memcpy(buf_after, buf_before, kRtcpPacketSize); SrsBuffer stream_after(buf_after, sizeof(buf_after)); - SrsRtcpNack rtcpNack_decode(ssrc); - srs_error_t err2 = rtcpNack_decode.decode(&stream_after); - EXPECT_TRUE(err2 == 0); - vector before = rtcpNack_encode.get_lost_sns(); - vector after = rtcpNack_decode.get_lost_sns(); + SrsRtcpNack rtcp_nack_decode(ssrc); + srs_error_t err_after = rtcp_nack_decode.decode(&stream_after); + EXPECT_TRUE(err_after == 0); + vector before = rtcp_nack_encode.get_lost_sns(); + vector after = rtcp_nack_decode.get_lost_sns(); EXPECT_TRUE(before.size() == after.size()); for(int i = 0; i < before.size() && i < after.size(); ++i) { EXPECT_TRUE(before.at(i) == after.at(i));