From f05e67e1a66a8e1dda0c019343363b59d801eee0 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Dec 2021 09:24:16 +0800 Subject: [PATCH 1/3] Squash: Fix bugs --- README.md | 6 ++++-- trunk/conf/rtc.conf | 2 +- trunk/conf/rtc2rtmp.conf | 2 +- trunk/conf/rtmp2rtc.conf | 2 +- trunk/conf/srs.conf | 2 +- trunk/doc/CHANGELOG.md | 10 +++++---- trunk/src/app/srs_app_rtc_source.cpp | 2 ++ trunk/src/core/srs_core_version4.hpp | 2 +- trunk/src/kernel/srs_kernel_rtc_rtcp.cpp | 5 ++++- trunk/src/utest/srs_utest_rtc.cpp | 26 ++++++++++++++++++++++++ 10 files changed, 47 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 0efa3ce9d..a244ba966 100755 --- a/README.md +++ b/README.md @@ -13,8 +13,9 @@ [![](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/5.0 是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。 +SRS/5.0,[Bee](https://github.com/ossrs/srs/wiki/Product#release50) 是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。 SRS/5.0 is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT. @@ -82,6 +83,8 @@ Other important wiki: ## AUTHORS +![](https://opencollective.com/srs-server/contributors.svg?width=800&button=false) + The [TOC(Technical Oversight Committee)](trunk/AUTHORS.md#toc) and [contributors](trunk/AUTHORS.md#contributors): * [Winlin](https://github.com/winlinvip): Focus on [ST](https://github.com/ossrs/state-threads) and [Issues/PR](https://github.com/ossrs/srs/issues). @@ -371,4 +374,3 @@ Winlin [r0.3]: https://github.com/ossrs/srs/releases/tag/v0.3.0 [r0.2]: https://github.com/ossrs/srs/releases/tag/v0.2.0 [r0.1]: https://github.com/ossrs/srs/releases/tag/v0.1.0 - 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; } diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 63c3d36ca..37b99004a 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -30,10 +30,12 @@ The changelog for SRS. ## SRS 4.0 Changelog -* 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 e13ae93a1..3798ebbf4 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 0af98b62c..868584091 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 205 #endif diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp index 7f3120423..dd4fdcfaf 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 83b8681bb..09f11c327 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 9ee1dcc385821d6779dba68d5b258604f517e728 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Dec 2021 09:29:59 +0800 Subject: [PATCH 2/3] Update README --- README.md | 260 ++++++------------------------------------------------ 1 file changed, 26 insertions(+), 234 deletions(-) diff --git a/README.md b/README.md index a244ba966..cdf94a75d 100755 --- a/README.md +++ b/README.md @@ -62,23 +62,23 @@ From here, please read wikis: Fast index for Wikis: -* Overview? ([CN][v4_CN_Home], [EN][v4_EN_Home]) -* How to deliver RTMP streaming?([CN][v4_CN_SampleRTMP], [EN][v4_EN_SampleRTMP]) -* How to build RTMP Edge-Cluster?([CN][v4_CN_SampleRTMPCluster], [EN][v4_EN_SampleRTMPCluster]) -* How to build RTMP Origin-Cluster?([CN][v4_CN_SampleOriginCluster], [EN][v4_EN_SampleOriginCluster]) -* How to deliver HTTP-FLV streaming?([CN][v4_CN_SampleHttpFlv], [EN][v4_EN_SampleHttpFlv]) -* How to deliver HLS streaming?([CN][v4_CN_SampleHLS], [EN][v4_EN_SampleHLS]) -* How to deliver low-latency streaming?([CN][v4_CN_SampleRealtime], [EN][v4_EN_SampleRealtime]) -* How to use WebRTC? ([CN][v4_CN_WebRTC], [EN][v4_EN_WebRTC]) +* Overview? ([CN](https://github.com/ossrs/srs/wiki/v4_CN_Home), [EN](https://github.com/ossrs/srs/wiki/v4_EN_Home)) +* How to deliver RTMP streaming?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleRTMP), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleRTMP)) +* How to build RTMP Edge-Cluster?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleRTMPCluster), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleRTMPCluster)) +* How to build RTMP Origin-Cluster?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleOriginCluster), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleOriginCluster)) +* How to deliver HTTP-FLV streaming?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleHttpFlv), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleHttpFlv)) +* How to deliver HLS streaming?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleHLS), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleHLS)) +* How to deliver low-latency streaming?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleRealtime), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleRealtime)) +* How to use WebRTC? ([CN](https://github.com/ossrs/srs/wiki/v4_CN_WebRTC), [EN](https://github.com/ossrs/srs/wiki/v4_EN_WebRTC)) Other important wiki: -* Usage: How to delivery DASH(Experimental)?([CN][v4_CN_SampleDASH], [EN][v4_EN_SampleDASH]) -* Usage: How to transode RTMP stream by FFMPEG?([CN][v4_CN_SampleFFMPEG], [EN][v4_EN_SampleFFMPEG]) -* Usage: How to delivery HTTP FLV Live Streaming Cluster?([CN][v4_CN_SampleHttpFlvCluster], [EN][v4_EN_SampleHttpFlvCluster]) -* Usage: How to ingest file/stream/device to RTMP?([CN][v4_CN_SampleIngest], [EN][v4_EN_SampleIngest]) -* Usage: How to forward stream to other servers?([CN][v4_CN_SampleForward], [EN][v4_EN_SampleForward]) -* Usage: How to improve edge performance for multiple CPUs? ([CN][v4_CN_REUSEPORT], [EN][v4_EN_REUSEPORT]) +* Usage: How to delivery DASH(Experimental)?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleDASH), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleDASH)) +* Usage: How to transode RTMP stream by FFMPEG?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleFFMPEG), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleFFMPEG)) +* Usage: How to delivery HTTP FLV Live Streaming Cluster?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleHttpFlvCluster), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleHttpFlvCluster)) +* Usage: How to ingest file/stream/device to RTMP?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleIngest), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleIngest)) +* Usage: How to forward stream to other servers?([CN](https://github.com/ossrs/srs/wiki/v4_CN_SampleForward), [EN](https://github.com/ossrs/srs/wiki/v4_EN_SampleForward)) +* Usage: How to improve edge performance for multiple CPUs? ([CN](https://github.com/ossrs/srs/wiki/v4_CN_REUSEPORT), [EN](https://github.com/ossrs/srs/wiki/v4_EN_REUSEPORT)) * Usage: How to file a bug or contact us? ([CN](https://github.com/ossrs/srs/wiki/v4_CN_Contact), [EN](https://github.com/ossrs/srs/wiki/v4_EN_Contact)) ## AUTHORS @@ -105,7 +105,7 @@ A big `THANK YOU` also goes to: ## 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. +* 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. * 2021-11-15, Release [v4.0.198](https://github.com/ossrs/srs/releases/tag/v4.0.198), 4.0 dev8, v4.0.198, 144010 lines. * 2021-11-02, Release [v4.0.191](https://github.com/ossrs/srs/releases/tag/v4.0.191), 4.0 dev7, v4.0.191, 143890 lines. * 2021-10-12, Release [v4.0.177](https://github.com/ossrs/srs/releases/tag/v4.0.177), 4.0 dev6, v4.0.177, 143686 lines. @@ -115,16 +115,16 @@ A big `THANK YOU` also goes to: * 2021-08-07, Release [v4.0.150](https://github.com/ossrs/srs/releases/tag/v4.0.150), 4.0 dev2, v4.0.150, 145289 lines. * 2021-07-25, Release [v4.0.146](https://github.com/ossrs/srs/releases/tag/v4.0.146), 4.0 dev1, v4.0.146, 144026 lines. * 2021-07-04, Release [v4.0.139](https://github.com/ossrs/srs/releases/tag/v4.0.139), 4.0 dev0, v4.0.139, 143245 lines. -* 2020-06-27, [Release v3.0-r0][r3.0r0], 3.0 release0, 3.0.141, 122674 lines. -* 2020-02-02, [Release v3.0-b0][r3.0b0], 3.0 beta0, 3.0.112, 121709 lines. -* 2019-10-04, [Release v3.0-a0][r3.0a0], 3.0 alpha0, 3.0.56, 107946 lines. -* 2017-03-03, [Release v2.0-r0][r2.0r0], 2.0 release0, 2.0.234, 86373 lines. -* 2016-08-06, [Release v2.0-b0][r2.0b0], 2.0 beta0, 2.0.210, 89704 lines. -* 2015-08-23, [Release v2.0-a0][r2.0a0], 2.0 alpha0, 2.0.185, 89022 lines. -* 2014-12-05, [Release v1.0-r0][r1.0r0], all bug fixed, 1.0.10, 59391 lines. -* 2014-10-09, [Release v0.9.8][r1.0b0], all bug fixed, 1.0.0, 59316 lines. -* 2014-04-07, [Release v0.9.1][r1.0a0], live streaming. 30000 lines. -* 2013-10-23, [Release v0.1.0][r0.1], rtmp. 8287 lines. +* 2020-06-27, [Release v3.0-r0](https://github.com/ossrs/srs/releases/tag/v3.0-r0), 3.0 release0, 3.0.141, 122674 lines. +* 2020-02-02, [Release v3.0-b0](https://github.com/ossrs/srs/releases/tag/v3.0-b0), 3.0 beta0, 3.0.112, 121709 lines. +* 2019-10-04, [Release v3.0-a0](https://github.com/ossrs/srs/releases/tag/v3.0-a0), 3.0 alpha0, 3.0.56, 107946 lines. +* 2017-03-03, [Release v2.0-r0](https://github.com/ossrs/srs/releases/tag/v2.0-r0), 2.0 release0, 2.0.234, 86373 lines. +* 2016-08-06, [Release v2.0-b0](https://github.com/ossrs/srs/releases/tag/v2.0-b0), 2.0 beta0, 2.0.210, 89704 lines. +* 2015-08-23, [Release v2.0-a0](https://github.com/ossrs/srs/releases/tag/v2.0-a0), 2.0 alpha0, 2.0.185, 89022 lines. +* 2014-12-05, [Release v1.0-r0](https://github.com/ossrs/srs/releases/tag/v1.0-r0), all bug fixed, 1.0.10, 59391 lines. +* 2014-10-09, [Release v0.9.8](https://github.com/ossrs/srs/releases/tag/v0.9.8), all bug fixed, 1.0.0, 59316 lines. +* 2014-04-07, [Release v0.9.1](https://github.com/ossrs/srs/releases/tag/v0.9.1), live streaming. 30000 lines. +* 2013-10-23, [Release v0.1.0](https://github.com/ossrs/srs/releases/tag/v0.1.0), rtmp. 8287 lines. * 2013-10-17, Created. ## Features @@ -141,7 +141,7 @@ Please read [CHANGELOG](trunk/doc/CHANGELOG.md#changelog). ## Compare Comparing with other media servers, SRS is much better and stronger, for details please -read Product([CN][v4_CN_Compare]/[EN][v4_EN_Compare]). +read Product([CN](https://github.com/ossrs/srs/wiki/v4_CN_Compare)/[EN](https://github.com/ossrs/srs/wiki/v4_EN_Compare)). ## Performance @@ -166,211 +166,3 @@ Please read [MIRRORS](trunk/doc/Resources.md#mirrors). Beijing, 2013.10
Winlin -[v4_CN_Git]: https://github.com/ossrs/srs/wiki/v4_CN_Git -[v4_EN_Git]: https://github.com/ossrs/srs/wiki/v4_EN_Git -[v4_CN_SampleRTMP]: https://github.com/ossrs/srs/wiki/v4_CN_SampleRTMP -[v4_EN_SampleRTMP]: https://github.com/ossrs/srs/wiki/v4_EN_SampleRTMP -[v4_CN_SampleRTMPCluster]: https://github.com/ossrs/srs/wiki/v4_CN_SampleRTMPCluster -[v4_EN_SampleRTMPCluster]: https://github.com/ossrs/srs/wiki/v4_EN_SampleRTMPCluster -[v4_CN_SampleOriginCluster]: https://github.com/ossrs/srs/wiki/v4_CN_SampleOriginCluster -[v4_EN_SampleOriginCluster]: https://github.com/ossrs/srs/wiki/v4_EN_SampleOriginCluster -[v4_CN_SampleHLS]: https://github.com/ossrs/srs/wiki/v4_CN_SampleHLS -[v4_EN_SampleHLS]: https://github.com/ossrs/srs/wiki/v4_EN_SampleHLS -[v4_CN_SampleTranscode2HLS]: https://github.com/ossrs/srs/wiki/v4_CN_SampleTranscode2HLS -[v4_EN_SampleTranscode2HLS]: https://github.com/ossrs/srs/wiki/v4_EN_SampleTranscode2HLS -[v4_CN_SampleFFMPEG]: https://github.com/ossrs/srs/wiki/v4_CN_SampleFFMPEG -[v4_EN_SampleFFMPEG]: https://github.com/ossrs/srs/wiki/v4_EN_SampleFFMPEG -[v4_CN_SampleForward]: https://github.com/ossrs/srs/wiki/v4_CN_SampleForward -[v4_EN_SampleForward]: https://github.com/ossrs/srs/wiki/v4_EN_SampleForward -[v4_CN_SampleRealtime]: https://github.com/ossrs/srs/wiki/v4_CN_SampleRealtime -[v4_EN_SampleRealtime]: https://github.com/ossrs/srs/wiki/v4_EN_SampleRealtime -[v4_CN_WebRTC]: https://github.com/ossrs/srs/wiki/v4_CN_WebRTC -[v4_EN_WebRTC]: https://github.com/ossrs/srs/wiki/v4_EN_WebRTC -[v4_CN_WebRTC#config-candidate]: https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate -[v4_EN_WebRTC#config-candidate]: https://github.com/ossrs/srs/wiki/v4_EN_WebRTC#config-candidate -[v4_CN_SampleARM]: https://github.com/ossrs/srs/wiki/v4_CN_SampleARM -[v4_EN_SampleARM]: https://github.com/ossrs/srs/wiki/v4_EN_SampleARM -[v4_CN_SampleIngest]: https://github.com/ossrs/srs/wiki/v4_CN_SampleIngest -[v4_EN_SampleIngest]: https://github.com/ossrs/srs/wiki/v4_EN_SampleIngest -[v4_CN_SampleHTTP]: https://github.com/ossrs/srs/wiki/v4_CN_SampleHTTP -[v4_EN_SampleHTTP]: https://github.com/ossrs/srs/wiki/v4_EN_SampleHTTP -[v4_CN_SampleDemo]: https://github.com/ossrs/srs/wiki/v4_CN_SampleDemo -[v4_EN_SampleDemo]: https://github.com/ossrs/srs/wiki/v4_EN_SampleDemo -[v4_CN_OriginCluster]: https://github.com/ossrs/srs/wiki/v4_CN_OriginCluster -[v4_EN_OriginCluster]: https://github.com/ossrs/srs/wiki/v4_EN_OriginCluster -[v4_CN_REUSEPORT]: https://github.com/ossrs/srs/wiki/v4_CN_REUSEPORT -[v4_EN_REUSEPORT]: https://github.com/ossrs/srs/wiki/v4_EN_REUSEPORT -[v4_CN_Sample]: https://github.com/ossrs/srs/wiki/v4_CN_Sample -[v4_EN_Sample]: https://github.com/ossrs/srs/wiki/v4_EN_Sample -[v4_CN_Product]: https://github.com/ossrs/srs/wiki/v4_CN_Product -[v4_EN_Product]: https://github.com/ossrs/srs/wiki/v4_EN_Product -[v4_CN_Home]: https://github.com/ossrs/srs/wiki/v4_CN_Home -[v4_EN_Home]: https://github.com/ossrs/srs/wiki/v4_EN_Home - -[v4_CN_Compare]: https://github.com/ossrs/srs/wiki/v4_CN_Compare -[v4_EN_Compare]: https://github.com/ossrs/srs/wiki/v4_EN_Compare -[v4_CN_Build]: https://github.com/ossrs/srs/wiki/v4_CN_Build -[v4_EN_Build]: https://github.com/ossrs/srs/wiki/v4_EN_Build -[v4_CN_Performance]: https://github.com/ossrs/srs/wiki/v4_CN_Performance -[v4_EN_Performance]: https://github.com/ossrs/srs/wiki/v4_EN_Performance -[v4_CN_DeliveryRTMP]: https://github.com/ossrs/srs/wiki/v4_CN_DeliveryRTMP -[v4_EN_DeliveryRTMP]: https://github.com/ossrs/srs/wiki/v4_EN_DeliveryRTMP -[v4_CN_Edge]: https://github.com/ossrs/srs/wiki/v4_CN_Edge -[v4_EN_Edge]: https://github.com/ossrs/srs/wiki/v4_EN_Edge -[v4_CN_RtmpUrlVhost]: https://github.com/ossrs/srs/wiki/v4_CN_RtmpUrlVhost -[v4_EN_RtmpUrlVhost]: https://github.com/ossrs/srs/wiki/v4_EN_RtmpUrlVhost -[v4_CN_RTMPHandshake]: https://github.com/ossrs/srs/wiki/v4_CN_RTMPHandshake -[v4_EN_RTMPHandshake]: https://github.com/ossrs/srs/wiki/v4_EN_RTMPHandshake -[v4_CN_HTTPServer]: https://github.com/ossrs/srs/wiki/v4_CN_HTTPServer -[v4_EN_HTTPServer]: https://github.com/ossrs/srs/wiki/v4_EN_HTTPServer -[v4_CN_DeliveryHLS]: https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHLS -[v4_EN_DeliveryHLS]: https://github.com/ossrs/srs/wiki/v4_EN_DeliveryHLS -[v4_CN_DeliveryHLS2]: https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHLS#hlsaudioonly -[v4_EN_DeliveryHLS2]: https://github.com/ossrs/srs/wiki/v4_EN_DeliveryHLS#hlsaudioonly -[v4_CN_Reload]: https://github.com/ossrs/srs/wiki/v4_CN_Reload -[v4_EN_Reload]: https://github.com/ossrs/srs/wiki/v4_EN_Reload -[v4_CN_LowLatency2]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency#gop-cache -[v4_EN_LowLatency2]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency#gop-cache -[v4_CN_Forward]: https://github.com/ossrs/srs/wiki/v4_CN_Forward -[v4_EN_Forward]: https://github.com/ossrs/srs/wiki/v4_EN_Forward -[v4_CN_FFMPEG]: https://github.com/ossrs/srs/wiki/v4_CN_FFMPEG -[v4_EN_FFMPEG]: https://github.com/ossrs/srs/wiki/v4_EN_FFMPEG -[v4_CN_HTTPCallback]: https://github.com/ossrs/srs/wiki/v4_CN_HTTPCallback -[v4_EN_HTTPCallback]: https://github.com/ossrs/srs/wiki/v4_EN_HTTPCallback -[v4_CN_SampleDemo]: https://github.com/ossrs/srs/wiki/v4_CN_SampleDemo -[v4_EN_SampleDemo]: https://github.com/ossrs/srs/wiki/v4_EN_SampleDemo -[v4_CN_SrsLinuxArm]: https://github.com/ossrs/srs/wiki/v4_CN_SrsLinuxArm -[v4_EN_SrsLinuxArm]: https://github.com/ossrs/srs/wiki/v4_EN_SrsLinuxArm -[v4_CN_LinuxService]: https://github.com/ossrs/srs/wiki/v4_CN_LinuxService -[v4_EN_LinuxService]: https://github.com/ossrs/srs/wiki/v4_EN_LinuxService -[v4_CN_RTMP-ATC]: https://github.com/ossrs/srs/wiki/v4_CN_RTMP-ATC -[v4_EN_RTMP-ATC]: https://github.com/ossrs/srs/wiki/v4_EN_RTMP-ATC -[v4_CN_HTTPApi]: https://github.com/ossrs/srs/wiki/v4_CN_HTTPApi -[v4_EN_HTTPApi]: https://github.com/ossrs/srs/wiki/v4_EN_HTTPApi -[v4_CN_Ingest]: https://github.com/ossrs/srs/wiki/v4_CN_Ingest -[v4_EN_Ingest]: https://github.com/ossrs/srs/wiki/v4_EN_Ingest -[v4_CN_DVR]: https://github.com/ossrs/srs/wiki/v4_CN_DVR -[v4_EN_DVR]: https://github.com/ossrs/srs/wiki/v4_EN_DVR -[v4_CN_SrsLog]: https://github.com/ossrs/srs/wiki/v4_CN_SrsLog -[v4_EN_SrsLog]: https://github.com/ossrs/srs/wiki/v4_EN_SrsLog -[v4_CN_DRM2]: https://github.com/ossrs/srs/wiki/v4_CN_DRM#tokentraverse -[v4_EN_DRM2]: https://github.com/ossrs/srs/wiki/v4_EN_DRM#tokentraverse -[v4_CN_SampleHTTP]: https://github.com/ossrs/srs/wiki/v4_CN_SampleHTTP -[v4_EN_SampleHTTP]: https://github.com/ossrs/srs/wiki/v4_EN_SampleHTTP -[v4_CN_FlvVodStream]: https://github.com/ossrs/srs/wiki/v4_CN_FlvVodStream -[v4_EN_FlvVodStream]: https://github.com/ossrs/srs/wiki/v4_EN_FlvVodStream -[v4_CN_Security]: https://github.com/ossrs/srs/wiki/v4_CN_Security -[v4_EN_Security]: https://github.com/ossrs/srs/wiki/v4_EN_Security -[v4_CN_DeliveryHttpStream]: https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHttpStream -[v4_EN_DeliveryHttpStream]: https://github.com/ossrs/srs/wiki/v4_EN_DeliveryHttpStream -[v4_CN_DeliveryHDS]: https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHDS -[v4_EN_DeliveryHDS]: https://github.com/ossrs/srs/wiki/v4_EN_DeliveryHDS -[v4_CN_Streamer]: https://github.com/ossrs/srs/wiki/v4_CN_Streamer -[v4_EN_Streamer]: https://github.com/ossrs/srs/wiki/v4_EN_Streamer -[v4_CN_Streamer2]: https://github.com/ossrs/srs/wiki/v4_CN_Streamer#push-http-flv-to-srs -[v4_EN_Streamer2]: https://github.com/ossrs/srs/wiki/v4_EN_Streamer#push-http-flv-to-srs -[v4_CN_SampleHttpFlv]: https://github.com/ossrs/srs/wiki/v4_CN_SampleHttpFlv -[v4_EN_SampleHttpFlv]: https://github.com/ossrs/srs/wiki/v4_EN_SampleHttpFlv -[v4_CN_SampleHttpFlvCluster]: https://github.com/ossrs/srs/wiki/v4_CN_SampleHttpFlvCluster -[v4_EN_SampleHttpFlvCluster]: https://github.com/ossrs/srs/wiki/v4_EN_SampleHttpFlvCluster -[v4_CN_SampleDASH]:https://github.com/ossrs/srs/wiki/v4_CN_SampleDASH -[v4_EN_SampleDASH]:https://github.com/ossrs/srs/wiki/v4_EN_SampleDASH - -[bug #547]: https://github.com/ossrs/srs/issues/547 -[bug #301]: https://github.com/ossrs/srs/issues/301 -[bug #459]: https://github.com/ossrs/srs/issues/459 -[bug #367]: https://github.com/ossrs/srs/issues/367 -[bug #257]: https://github.com/ossrs/srs/issues/257 -[bug #904]: https://github.com/ossrs/srs/issues/904 -[bug #913]: https://github.com/ossrs/srs/issues/913 -[bug #1059]: https://github.com/ossrs/srs/issues/1059 -[bug #92]: https://github.com/ossrs/srs/issues/92 -[bug #464]: https://github.com/ossrs/srs/issues/464 -[bug #460]: https://github.com/ossrs/srs/issues/460 -[bug #775]: https://github.com/ossrs/srs/issues/775 -[bug #307]: https://github.com/ossrs/srs/issues/307 -[bug #2324]: https://github.com/ossrs/srs/issues/2324 -[bug #1657]: https://github.com/ossrs/srs/issues/1657 -[bug #1500]: https://github.com/ossrs/srs/issues/1500 -[bug #738]: https://github.com/ossrs/srs/issues/738 -[bug #299]: https://github.com/ossrs/srs/issues/299 -[bug #250]: https://github.com/ossrs/srs/issues/250 -[bug #459]: https://github.com/ossrs/srs/issues/459 -[bug #470]: https://github.com/ossrs/srs/issues/470 -[bug #319]: https://github.com/ossrs/srs/issues/319 -[bug #1147]: https://github.com/ossrs/srs/issues/1147 -[bug #2304]: https://github.com/ossrs/srs/issues/2304 -[bug #1535]: https://github.com/ossrs/srs/issues/1535 -[bug #1342]: https://github.com/ossrs/srs/issues/1342 -[bug #1193]: https://github.com/ossrs/srs/issues/1193 -[bug #2093]: https://github.com/ossrs/srs/issues/2093 -[bug #465]: https://github.com/ossrs/srs/issues/465 -[bug #2091]: https://github.com/ossrs/srs/issues/2091 -[bug #2188]: https://github.com/ossrs/srs/issues/2188 -[bug #413]: https://github.com/ossrs/srs/issues/413 -[bug #1111]: https://github.com/ossrs/srs/issues/1111 -[bug #463]: https://github.com/ossrs/srs/issues/463 -[bug #775]: https://github.com/ossrs/srs/issues/775 -[bug #257-c0]: https://github.com/ossrs/srs/issues/257#issuecomment-66864413 - -[r3.0r5]: https://github.com/ossrs/srs/releases/tag/v3.0-r5 -[r3.0r4]: https://github.com/ossrs/srs/releases/tag/v3.0-r4 -[r3.0r3]: https://github.com/ossrs/srs/releases/tag/v3.0-r3 -[r3.0r2]: https://github.com/ossrs/srs/releases/tag/v3.0-r2 -[r3.0r1]: https://github.com/ossrs/srs/releases/tag/v3.0-r1 -[r3.0r0]: https://github.com/ossrs/srs/releases/tag/v3.0-r0 -[r3.0b4]: https://github.com/ossrs/srs/releases/tag/v3.0-b4 -[r3.0b3]: https://github.com/ossrs/srs/releases/tag/v3.0-b3 -[r3.0b2]: https://github.com/ossrs/srs/releases/tag/v3.0-b2 -[r3.0b1]: https://github.com/ossrs/srs/releases/tag/v3.0-b1 -[r3.0b0]: https://github.com/ossrs/srs/releases/tag/v3.0-b0 -[r3.0a9]: https://github.com/ossrs/srs/releases/tag/v3.0-a9 -[r3.0a8]: https://github.com/ossrs/srs/releases/tag/v3.0-a8 -[r3.0a7]: https://github.com/ossrs/srs/releases/tag/v3.0-a7 -[r3.0a6]: https://github.com/ossrs/srs/releases/tag/v3.0-a6 -[r3.0a5]: https://github.com/ossrs/srs/releases/tag/v3.0-a5 -[r3.0a4]: https://github.com/ossrs/srs/releases/tag/v3.0-a4 -[r3.0a3]: https://github.com/ossrs/srs/releases/tag/v3.0-a3 -[r3.0a2]: https://github.com/ossrs/srs/releases/tag/v3.0-a2 -[r3.0a1]: https://github.com/ossrs/srs/releases/tag/v3.0-a1 -[r3.0a0]: https://github.com/ossrs/srs/releases/tag/v3.0-a0 -[r2.0r8]: https://github.com/ossrs/srs/releases/tag/v2.0-r8 -[r2.0r7]: https://github.com/ossrs/srs/releases/tag/v2.0-r7 -[r2.0r6]: https://github.com/ossrs/srs/releases/tag/v2.0-r6 -[r2.0r5]: https://github.com/ossrs/srs/releases/tag/v2.0-r5 -[r2.0r4]: https://github.com/ossrs/srs/releases/tag/v2.0-r4 -[r2.0r3]: https://github.com/ossrs/srs/releases/tag/v2.0-r3 -[r2.0r2]: https://github.com/ossrs/srs/releases/tag/v2.0-r2 -[r2.0r1]: https://github.com/ossrs/srs/releases/tag/v2.0-r1 -[r2.0r0]: https://github.com/ossrs/srs/releases/tag/v2.0-r0 -[r2.0b4]: https://github.com/ossrs/srs/releases/tag/v2.0-b4 -[r2.0b3]: https://github.com/ossrs/srs/releases/tag/v2.0-b3 -[r2.0b2]: https://github.com/ossrs/srs/releases/tag/v2.0-b2 -[r2.0b1]: https://github.com/ossrs/srs/releases/tag/v2.0-b1 -[r2.0b0]: https://github.com/ossrs/srs/releases/tag/v2.0-b0 -[r2.0a3]: https://github.com/ossrs/srs/releases/tag/v2.0-a3 -[r2.0a2]: https://github.com/ossrs/srs/releases/tag/v2.0-a2 -[r2.0a1]: https://github.com/ossrs/srs/releases/tag/v2.0-a1 -[r2.0a0]: https://github.com/ossrs/srs/releases/tag/v2.0-a0 -[r1.0r4]: https://github.com/ossrs/srs/releases/tag/v1.0-r4 -[r1.0r3]: https://github.com/ossrs/srs/releases/tag/v1.0-r3 -[r1.0r2]: https://github.com/ossrs/srs/releases/tag/v1.0-r2 -[r1.0r1]: https://github.com/ossrs/srs/releases/tag/v1.0-r1 -[r1.0r0]: https://github.com/ossrs/srs/releases/tag/v1.0-r0 -[r1.0b0]: https://github.com/ossrs/srs/releases/tag/v0.9.8 -[r1.0a7]: https://github.com/ossrs/srs/releases/tag/v0.9.7 -[r1.0a6]: https://github.com/ossrs/srs/releases/tag/v0.9.6 -[r1.0a5]: https://github.com/ossrs/srs/releases/tag/v0.9.5 -[r1.0a4]: https://github.com/ossrs/srs/releases/tag/v0.9.4 -[r1.0a3]: https://github.com/ossrs/srs/releases/tag/v0.9.3 -[r1.0a2]: https://github.com/ossrs/srs/releases/tag/v0.9.2 -[r1.0a0]: https://github.com/ossrs/srs/releases/tag/v0.9.1 -[r0.9]: https://github.com/ossrs/srs/releases/tag/v0.9.0 -[r0.8]: https://github.com/ossrs/srs/releases/tag/v0.8.0 -[r0.7]: https://github.com/ossrs/srs/releases/tag/v0.7.0 -[r0.6]: https://github.com/ossrs/srs/releases/tag/v0.6.0 -[r0.5]: https://github.com/ossrs/srs/releases/tag/v0.5.0 -[r0.4]: https://github.com/ossrs/srs/releases/tag/v0.4.0 -[r0.3]: https://github.com/ossrs/srs/releases/tag/v0.3.0 -[r0.2]: https://github.com/ossrs/srs/releases/tag/v0.2.0 -[r0.1]: https://github.com/ossrs/srs/releases/tag/v0.1.0 From 6c82d1a2d71f5fe28effd4ba7f85e68c6a646ad1 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Dec 2021 09:35:18 +0800 Subject: [PATCH 3/3] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cdf94a75d..f4d374534 100755 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ SRS is licenced under [MIT](https://github.com/ossrs/srs/blob/develop/LICENSE), [![SRS Overview](https://gitee.com/winlinvip/srs-wiki/raw/master/images/SRS-Overview-4.0.png)](https://gitee.com/winlinvip/srs-wiki/raw/master/images/SRS-Overview-4.0.png) -> Note: Please see https://www.processon.com/view/link/619f29791efad425fd699fd2 +> Note: If image load fail, please see it at [here](https://www.processon.com/view/link/619f29791efad425fd699fd2).