From 4decc1fa6bf20a54d45d1b2859cb95b4dbb10546 Mon Sep 17 00:00:00 2001 From: long Date: Mon, 6 Dec 2021 12:42:39 +0800 Subject: [PATCH 1/8] RTC: Fix nack encode seqnum (#2766) * fix nack encode seqnum * add nack encode utest * change Variable naming Co-authored-by: liyalong1 --- trunk/src/kernel/srs_kernel_rtc_rtcp.cpp | 5 ++++- trunk/src/utest/srs_utest_rtc.cpp | 26 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp index d3febbc59..6ea71a821 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); } diff --git a/trunk/src/utest/srs_utest_rtc.cpp b/trunk/src/utest/srs_utest_rtc.cpp index c1b63466f..0d7ea30e9 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 rtcp_nack_encode(ssrc); + for(uint16_t i = 16; i < 50; ++i) { + rtcp_nack_encode.add_lost_sn(i); + } + 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 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)); + } +} + 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 2f93e682852cad9ed8bd47654d3fd877692937f1 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 6 Dec 2021 12:44:08 +0800 Subject: [PATCH 2/8] RTC: Fix nack encode seqnum. (#2766). v4.0.204 --- trunk/doc/CHANGELOG.md | 1 + trunk/src/core/srs_core_version4.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index cfa38286a..98a1b1370 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -8,6 +8,7 @@ The changelog for SRS. ## SRS 4.0 Changelog +* v4.0, 2021-12-06, Merge [#2766](https://github.com/ossrs/srs/pull/2766): RTC: Fix nack encode seqnum. (#2766). v4.0.204 * v4.0, 2021-12-04, Merge [#2768](https://github.com/ossrs/srs/pull/2768): RTC: Fix bugs for RTC2RTMP. (#2768). v4.0.203 * v4.0, 2021-12-04, Merge [#2757](https://github.com/ossrs/srs/pull/2757): RTC: Ignore empty audio packet when transcoding (#2757). v4.0.202 * v4.0, 2021-12-01, Fix [#2762](https://github.com/ossrs/srs/pull/2762): RTC: Refine publish security error message (#2762). v4.0.200 diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 8ae98b7db..0f660ba11 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 203 +#define VERSION_REVISION 204 #endif From 37bcd9dad82848c4415aeeefa826e4d221468ab8 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 6 Dec 2021 18:43:01 +0800 Subject: [PATCH 3/8] Update README, add opencollective badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0e14451e9..7f1197b48 100755 --- a/README.md +++ b/README.md @@ -105,6 +105,8 @@ A big THANK YOU goes to: * Genes amd Mabbott for creating [st][st]([state-threads][st2]). * [Michael Talyanksy](https://github.com/michaeltalyansky) for introducing ST to us. +![](https://opencollective.com/srs-server/contributors.svg?width=800&button=false) + ## Releases * 2021-12-01, Release [v4.0-b0][https://github.com/ossrs/srs/releases/tag/v4.0-b0], v4.0-b0, 4.0 beta0, v4.0.201, 144022 lines. From 3eb8fa2e31594eb0352a67431b1a811865a1c2f7 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 6 Dec 2021 18:45:35 +0800 Subject: [PATCH 4/8] Update README, add opencollective badge --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7f1197b48..a47140e82 100755 --- a/README.md +++ b/README.md @@ -82,6 +82,8 @@ Other important wiki: ## AUTHORS +![](https://opencollective.com/srs-server/contributors.svg?width=800&button=false) + There are two types of people that have contributed to the SRS project: * Maintainers: Contribute and maintain important features. SRS always remembers and thanks you by writing your names in stream metadata. @@ -105,8 +107,6 @@ A big THANK YOU goes to: * Genes amd Mabbott for creating [st][st]([state-threads][st2]). * [Michael Talyanksy](https://github.com/michaeltalyansky) for introducing ST to us. -![](https://opencollective.com/srs-server/contributors.svg?width=800&button=false) - ## Releases * 2021-12-01, Release [v4.0-b0][https://github.com/ossrs/srs/releases/tag/v4.0-b0], v4.0-b0, 4.0 beta0, v4.0.201, 144022 lines. From 7c353b59865aa4db4c8f91696ba7a8583ada96fa Mon Sep 17 00:00:00 2001 From: john Date: Tue, 7 Dec 2021 09:09:34 +0800 Subject: [PATCH 5/8] RTC: Fix memory leak when replace rtp packet in cache. (#2771). v4.0.205 * fix memory leak when replace rtp packet in cache. --- trunk/doc/CHANGELOG.md | 11 ++++++----- trunk/src/app/srs_app_rtc_source.cpp | 2 ++ trunk/src/core/srs_core_version4.hpp | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 98a1b1370..4743b65d0 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -8,11 +8,12 @@ The changelog for SRS. ## SRS 4.0 Changelog -* v4.0, 2021-12-06, Merge [#2766](https://github.com/ossrs/srs/pull/2766): RTC: Fix nack encode seqnum. (#2766). v4.0.204 -* v4.0, 2021-12-04, Merge [#2768](https://github.com/ossrs/srs/pull/2768): RTC: Fix bugs for RTC2RTMP. (#2768). v4.0.203 -* v4.0, 2021-12-04, Merge [#2757](https://github.com/ossrs/srs/pull/2757): RTC: Ignore empty audio packet when transcoding (#2757). v4.0.202 -* v4.0, 2021-12-01, Fix [#2762](https://github.com/ossrs/srs/pull/2762): RTC: Refine publish security error message (#2762). v4.0.200 -* v4.0, 2021-11-25, Merge [#2751](https://github.com/ossrs/srs/pull/2751): RTC: Fix crash when pkt->payload() if pkt is nullptr (#2751). v4.0.199 +* v4.0, 2021-12-07, Merge [#2771](https://github.com/ossrs/srs/pull/2771): RTC: Fix memory leak when replace rtp packet in cache. (#2771). v4.0.205 +* v4.0, 2021-12-06, Merge [#2766](https://github.com/ossrs/srs/pull/2766): RTC: Fix nack encode seqnum. (#2766). v4.0.204 +* v4.0, 2021-12-04, Merge [#2768](https://github.com/ossrs/srs/pull/2768): RTC: Fix bugs for RTC2RTMP. (#2768). v4.0.203 +* v4.0, 2021-12-04, Merge [#2757](https://github.com/ossrs/srs/pull/2757): RTC: Ignore empty audio packet when transcoding (#2757). v4.0.202 +* v4.0, 2021-12-01, Fix [#2762](https://github.com/ossrs/srs/pull/2762): RTC: Refine publish security error message (#2762). v4.0.200 +* v4.0, 2021-11-25, Merge [#2751](https://github.com/ossrs/srs/pull/2751): RTC: Fix crash when pkt->payload() if pkt is nullptr (#2751). v4.0.199 * v4.0, 2021-11-15, For [#1708](https://github.com/ossrs/srs/pull/1708): ST: Print log when multiple thread stop one coroutine. (#1708). v4.0.198 * v4.0, 2021-11-14, Merge [#2732](https://github.com/ossrs/srs/pull/2732): WebRTC: Fail to publish RTC automatically for HTML5. (#2732). v4.0.197 * v4.0, 2021-11-13, Merge [#2729](https://github.com/ossrs/srs/pull/2729): RTC: check audio track exist when negotiate (#2729). v4.0.196 diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index 4aa24fae3..d2ce4b049 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -1437,6 +1437,7 @@ srs_error_t SrsRtmpFromRtcBridger::packet_video(SrsRtpPacket* src) // store in cache int index = cache_index(pkt->header.get_sequence()); cache_video_pkts_[index].in_use = true; + srs_freep(cache_video_pkts_[index].pkt); cache_video_pkts_[index].pkt = pkt; cache_video_pkts_[index].sn = pkt->header.get_sequence(); cache_video_pkts_[index].ts = pkt->get_avsync_time(); @@ -1526,6 +1527,7 @@ srs_error_t SrsRtmpFromRtcBridger::packet_video_key_frame(SrsRtpPacket* pkt) uint16_t index = cache_index(pkt->header.get_sequence()); cache_video_pkts_[index].in_use = true; + srs_freep(cache_video_pkts_[index].pkt); cache_video_pkts_[index].pkt = pkt; cache_video_pkts_[index].sn = pkt->header.get_sequence(); cache_video_pkts_[index].ts = pkt->get_avsync_time(); diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 0f660ba11..21c940a72 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 204 +#define VERSION_REVISION 205 #endif From 1a4249d74cd0589f42240ace12b53c90e0459a13 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Dec 2021 16:57:06 +0800 Subject: [PATCH 6/8] Add discord server for SRS --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a47140e82..c6115b8d4 100755 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ [![](https://badgen.net/twitter/follow/winlinvip)](https://twitter.com/winlinvip) [![](https://img.shields.io/youtube/channel/views/UCP6ZblCL_fIJoEyUzZxC1ng?style=social)](https://www.youtube.com/channel/UCP6ZblCL_fIJoEyUzZxC1ng) [![](https://img.shields.io/twitch/status/winlinvip?style=social)](https://www.twitch.tv/winlinvip) +[![](https://badgen.net/discord/members/yZ4BnPmHAd)](https://discord.gg/yZ4BnPmHAd) SRS/4.0,[Leo][release4],是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。 From 027715e4ea0ab22609c8b5ea130dcf1593cc32eb Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 12 Dec 2021 15:53:08 +0800 Subject: [PATCH 7/8] RTC: Update config --- trunk/conf/rtc.conf | 2 +- trunk/conf/rtc2rtmp.conf | 2 +- trunk/conf/rtmp2rtc.conf | 2 +- trunk/conf/srs.conf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/trunk/conf/rtc.conf b/trunk/conf/rtc.conf index b7269cbdd..2a5153220 100644 --- a/trunk/conf/rtc.conf +++ b/trunk/conf/rtc.conf @@ -21,7 +21,7 @@ stats { } rtc_server { enabled on; - listen 8000; + listen 8000; # UDP port # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate candidate $CANDIDATE; } diff --git a/trunk/conf/rtc2rtmp.conf b/trunk/conf/rtc2rtmp.conf index 66f3c8cfa..87a71345e 100644 --- a/trunk/conf/rtc2rtmp.conf +++ b/trunk/conf/rtc2rtmp.conf @@ -19,7 +19,7 @@ stats { } rtc_server { enabled on; - listen 8000; + listen 8000; # UDP port # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate candidate $CANDIDATE; } diff --git a/trunk/conf/rtmp2rtc.conf b/trunk/conf/rtmp2rtc.conf index 66f3c8cfa..87a71345e 100644 --- a/trunk/conf/rtmp2rtc.conf +++ b/trunk/conf/rtmp2rtc.conf @@ -19,7 +19,7 @@ stats { } rtc_server { enabled on; - listen 8000; + listen 8000; # UDP port # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate candidate $CANDIDATE; } diff --git a/trunk/conf/srs.conf b/trunk/conf/srs.conf index d7af0b9f4..9d7d9047d 100644 --- a/trunk/conf/srs.conf +++ b/trunk/conf/srs.conf @@ -17,7 +17,7 @@ http_server { } rtc_server { enabled on; - listen 8000; + listen 8000; # UDP port # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate candidate $CANDIDATE; } From 8e4063069bb2e8e518bd4fa9efb2c52891874286 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Dec 2021 08:18:42 +0800 Subject: [PATCH 8/8] Update Release --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index c6115b8d4..df5aa3629 100755 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ [![](https://img.shields.io/twitch/status/winlinvip?style=social)](https://www.twitch.tv/winlinvip) [![](https://badgen.net/discord/members/yZ4BnPmHAd)](https://discord.gg/yZ4BnPmHAd) -SRS/4.0,[Leo][release4],是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。 +SRS/4.0,[Leo](https://github.com/ossrs/srs/wiki/Product#release40),是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。 SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT. @@ -404,6 +404,3 @@ Winlin [LICENSE]: https://github.com/ossrs/srs/blob/4.0release/LICENSE [LicenseMixing]: https://github.com/ossrs/srs/wiki/LicenseMixing -[release2]: https://github.com/ossrs/srs/wiki/v4_CN_Product#release20 -[release3]: https://github.com/ossrs/srs/wiki/v4_CN_Product#release30 -[release4]: https://github.com/ossrs/srs/wiki/v4_CN_Product#release40