diff --git a/CHANGELOG.md b/CHANGELOG.md
index 944683bdf..590c207bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,14 +2,18 @@
The changelog for SRS.
-## V5 changes
+
-* v4.0, 2021-05-31, Use [SPDX-License-Identifier: MIT](https://spdx.dev/ids/). 5.0.3
+## SRS 5.0 Changelog
+
+* v5.0, 2021-05-31, Use [SPDX-License-Identifier: MIT](https://spdx.dev/ids/). 5.0.3
* v5.0, 2021-05-19, ST: Simplify it, only Linux/Darwin, epoll/kqueue, single process. 5.0.2
* v5.0, 2021-03-17, Live: Refine edge to follow client and HTTP/302. 5.0.1
* v5.0, 2021-03-15, Init SRS/5. 5.0.0
-## V4 changes
+
+
+## SRS 4.0 Changelog
* v4.0, 2021-06-01, Support --shared-ffmpeg to link with *.so for LGPL license. 4.0.126
* v4.0, 2021-06-01, Support --shared-srt to link with *.so for MPL license. 4.0.125
@@ -121,7 +125,9 @@ The changelog for SRS.
* v4.0, 2020-01-26, Allow use libsrt.so for SRT is MPL license. 4.0.2
* v4.0, 2020-01-24, Fix [#1147][bug #1147], support SRT(Secure Reliable Transport). 4.0.1
-## V3 changes
+
+
+## SRS 3.0 Changelog
* v3.0, 2021-05-12, Fix [#2311][bug #2311], Copy the request for stat client. 3.0.162
* v3.0, 2021-04-28, [3.0 release5(3.0.161)][r3.0r5] released. 122750 lines.
@@ -324,7 +330,9 @@ The changelog for SRS.
* v3.0, 2015-08-28, fix [#471][bug #471], api response the width and height. 3.0.2
* v3.0, 2015-08-25, fix [#367][bug #367], support nginx-rtmp exec. 3.0.1
-## V2 changes
+
+
+## SRS 2.0 Changelog
* v2.0, 2020-01-25, [2.0 release8(2.0.272)][r2.0r8] released. 87292 lines.
* v2.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 2.0.272
@@ -572,7 +580,9 @@ The changelog for SRS.
* v2.0, 2014-10-18, remove supports for OSX(darwin). 2.0.1.
* v2.0, 2014-10-16, revert github srs README to English. 2.0.0.
-## V1 changes
+
+
+## SRS 1.0 Changelog
* v1.0, 2014-12-05, [1.0 release(1.0.10)][r1.0r0] released. 59391 lines.
* v1.0, 2014-10-09, [1.0 beta(1.0.0)][r1.0b0] released. 59316 lines.
diff --git a/PERFORMANCE.md b/PERFORMANCE.md
new file mode 100644
index 000000000..303f33f16
--- /dev/null
+++ b/PERFORMANCE.md
@@ -0,0 +1,414 @@
+# Performance
+
+The performance benchmark data and corelative commits are listed here.
+
+* See also: [Performance for x86/x64 Test Guide][v4_CN_Performance].
+* See also: [Performance for RaspberryPi][v4_CN_RaspberryPi].
+* For multiple processes performance, read [#775: REUSEPORT][bug #775] or OriginCluster([CN][v4_EN_OriginCluster]/[EN][v4_EN_OriginCluster]).
+* For RTC benchmark, please use [srs-bench](https://github.com/ossrs/srs-bench/tree/feature/rtc#usage).
+
+
+**Play RTMP benchmark**
+
+The data for playing RTMP was benchmarked by [SB][srs-bench]:
+
+
+| Update | SRS | Clients | Type | CPU | Memory | Commit |
+| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
+| 2014-12-07 | 2.0.67 | 10k(10000) | players | 95% | 656MB | [code][p12] |
+| 2014-12-05 | 2.0.57 | 9.0k(9000) | players | 90% | 468MB | [code][p11] |
+| 2014-12-05 | 2.0.55 | 8.0k(8000) | players | 89% | 360MB | [code][p10] |
+| 2014-11-22 | 2.0.30 | 7.5k(7500) | players | 87% | 320MB | [code][p9] |
+| 2014-11-13 | 2.0.15 | 6.0k(6000) | players | 82% | 203MB | [code][p8] |
+| 2014-11-12 | 2.0.14 | 3.5k(3500) | players | 95% | 78MB | [code][p7] |
+| 2014-11-12 | 2.0.14 | 2.7k(2700) | players | 69% | 59MB | - |
+| 2014-11-11 | 2.0.12 | 2.7k(2700) | players | 85% | 66MB | - |
+| 2014-11-11 | 1.0.5 | 2.7k(2700) | players | 85% | 66MB | - |
+| 2014-07-12 | 0.9.156 | 2.7k(2700) | players | 89% | 61MB | [code][p6] |
+| 2014-07-12 | 0.9.156 | 1.8k(1800) | players | 68% | 38MB | - |
+| 2013-11-28 | 0.5.0 | 1.8k(1800) | players | 90% | 41M | - |
+
+| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
+| ---------- | ---------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
+| 2021-05-11 | SRS/v4.0.105 | 4000 | players | ~94% x1 | 419MB | 1 | G5 8CPU |
+| 2021-05-11 | NginxRTMP/v1.2.1 | 2400 | players | ~92% x1 | 173MB | 1 | G5 8CPU |
+
+> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)](https://help.aliyun.com/document_detail/25378.html),
+> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
+> [NginxRTMP/v1.2.1](https://github.com/arut/nginx-rtmp-module/releases/tag/v1.2.1).
+
+
+**Publish RTMP benchmark**
+
+The data for publishing RTMP was benchmarked by [SB][srs-bench]:
+
+| Update | SRS | Clients | Type | CPU | Memory | Commit |
+| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
+| 2014-12-04 | 2.0.52 | 4.0k(4000) | publishers | 80% | 331MB | [code][p5] |
+| 2014-12-04 | 2.0.51 | 2.5k(2500) | publishers | 91% | 259MB | [code][p4] |
+| 2014-12-04 | 2.0.49 | 2.5k(2500) | publishers | 95% | 404MB | [code][p3] |
+| 2014-12-04 | 2.0.49 | 1.4k(1400) | publishers | 68% | 144MB | - |
+| 2014-12-03 | 2.0.48 | 1.4k(1400) | publishers | 95% | 140MB | [code][p2] |
+| 2014-12-03 | 2.0.47 | 1.4k(1400) | publishers | 95% | 140MB | - |
+| 2014-12-03 | 2.0.47 | 1.2k(1200) | publishers | 84% | 76MB | [code][p1] |
+| 2014-12-03 | 2.0.12 | 1.2k(1200) | publishers | 96% | 43MB | - |
+| 2014-12-03 | 1.0.10 | 1.2k(1200) | publishers | 96% | 43MB | - |
+
+| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
+| ---------- | ---------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
+| 2021-05-11 | SRS/v4.0.105 | 2300 | publishers | ~89% x1 | 1.1GB | 1 | G5 8CPU |
+| 2021-05-11 | NginxRTMP/v1.2.1 | 1300 | publishers | ~84% x1 | 198MB | 1 | G5 8CPU |
+
+> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)](https://help.aliyun.com/document_detail/25378.html),
+> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
+> [NginxRTMP/v1.2.1](https://github.com/arut/nginx-rtmp-module/releases/tag/v1.2.1).
+
+
+**Play HTTP FLV benchmark**
+
+The data for playing HTTP FLV was benchmarked by [SB][srs-bench]:
+
+
+| Update | SRS | Clients | Type | CPU | Memory | Commit |
+| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
+| 2014-05-25 | 2.0.171 | 6.0k(6000) | players | 84% | 297MB | [code][p20] |
+| 2014-05-24 | 2.0.170 | 3.0k(3000) | players | 89% | 96MB | [code][p19] |
+| 2014-05-24 | 2.0.169 | 3.0k(3000) | players | 94% | 188MB | [code][p18] |
+| 2014-05-24 | 2.0.168 | 2.3k(2300) | players | 92% | 276MB | [code][p17] |
+| 2014-05-24 | 2.0.167 | 1.0k(1000) | players | 82% | 86MB | - |
+
+
+**RTC benchmark**
+
+The RTC benchmark data, by [srs-bench](https://github.com/ossrs/srs-bench/tree/feature/rtc#usage):
+
+| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
+| ---------- | ------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
+| 2021-05-10 | SRS/v4.0.105 | 2000 | players | ~94% x1 | 462MB | 1 | G7 2CPU |
+| 2021-05-10 | SRS/v4.0.105 | 1000 | players | ~90% x1 | 180MB | 1 | G5 2CPU |
+| 2021-03-31 | SRS/v4.0.87 | 800 | players | ~94% x1 | 444MB | 1 | G5 2CPU |
+| 2021-05-10 | Janus/v0.11.1 | 700 | players | ~93% x2 | 430MB | 24 | G5 2CPU |
+| 2021-05-10 | SRS/v4.0.105 | 1700 | publishers | ~92% x1 | 334MB | 1 | G7 2CPU |
+| 2021-05-10 | SRS/v4.0.105 | 950 | publishers | ~92% x1 | 132MB | 1 | G5 2CPU |
+| 2021-03-31 | SRS/v4.0.87 | 550 | publishers | ~86% x1 | 1.3GB | 1 | G5 2CPU |
+| 2021-05-10 | Janus/v0.11.1 | 350 | publishers | ~93% x2 | 405MB | 23 | G5 2CPU |
+
+> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)/G7-2.7GHZ(IceLake)](https://help.aliyun.com/document_detail/25378.html),
+> [SRS/v4.0.87](https://github.com/ossrs/srs/commit/d6c16a7e236e03eba754c763e865464ec82d4516),
+> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
+> [Janus/v0.11.1](https://github.com/meetecho/janus-gateway/releases/tag/v0.11.1).
+
+
+**Latency benchmark**
+
+The latency between encoder and player with realtime config([CN][v4_CN_LowLatency], [EN][v4_EN_LowLatency]):
+
+| Update | SRS | Protocol | VP6 | H.264 | VP6+MP3 | H.264+MP3 |
+| ------------- | --------- | --------- | --------- | --------- | --------- | -------- |
+| 2014-12-16 | 2.0.72 | RTMP | 0.1s | 0.4s |[0.8s][p15]|[0.6s][p16]|
+| 2014-12-12 | 2.0.70 | RTMP |[0.1s][p13]|[0.4s][p14]| 1.0s | 0.9s |
+| 2014-12-03 | 1.0.10 | RTMP | 0.4s | 0.4s | 0.9s | 1.2s |
+| 2021-04-02 | 4.0.87 | WebRTC | x | 80ms | x | x |
+
+> 2018-08-05, [c45f72e](https://github.com/ossrs/srs/commit/c45f72ef7bac9c7cf85b9125fc9e3aafd53f396f), Refine HTTP-FLV latency, support realtime mode. 2.0.252
+
+We used FMLE as encoder for benchmark. The latency of server was 0.1s+,
+and the bottleneck was the encoder. For more information, read
+[bug #257][bug #257-c0].
+
+Winlin 2021
+
+
+[p1]: https://github.com/ossrs/srs/commit/787ab674e38734ea8e0678101614fdcd84645dc8
+[p2]: https://github.com/ossrs/srs/commit/f35ec2155b1408d528a9f37da7904c9625186bcf
+[p3]: https://github.com/ossrs/srs/commit/29324fab469e0f7cef9ad04ffdbce832ac7dd9ff
+[p4]: https://github.com/ossrs/srs/commit/f57801eb46c16755b173984b915a4166922df6a6
+[p5]: https://github.com/ossrs/srs/commit/5589b13d2e216b91f97afb78ee0c011b2fccf7da
+[p6]: https://github.com/ossrs/srs/commit/1ae3e6c64cc5cee90e6050c26968ebc3c18281be
+[p7]: https://github.com/ossrs/srs/commit/8acd143a7a152885b815999162660fd4e7a3f247
+[p8]: https://github.com/ossrs/srs/commit/cc6aca9ad55342a06440ce7f3b38453776b2b2d1
+[p9]: https://github.com/ossrs/srs/commit/58136ec178e3d47db6c90a59875d7e40946936e5
+[p10]: https://github.com/ossrs/srs/commit/58136ec178e3d47db6c90a59875d7e40946936e5
+[p11]: https://github.com/ossrs/srs/commit/9ee138746f83adc26f0e236ec017f4d68a300004
+[p12]: https://github.com/ossrs/srs/commit/1311b6fe6576fd7b9c6d299b0f8f2e8d202f4bf8
+[p13]: https://github.com/ossrs/srs/commit/10297fab519811845b549a8af40a6bcbd23411e8
+[p14]: https://github.com/ossrs/srs/commit/10297fab519811845b549a8af40a6bcbd23411e8
+[p15]: https://github.com/ossrs/srs/commit/0d6b91039d408328caab31a1077d56a809b6bebc
+[p16]: https://github.com/ossrs/srs/commit/0d6b91039d408328caab31a1077d56a809b6bebc
+[p17]: https://github.com/ossrs/srs/commit/fc995473eb02c7cf64b5b212b456e11f34aa7984
+[p18]: https://github.com/ossrs/srs/commit/960341b9b2b9646270ccfd113b4dd784d9826c73
+[p19]: https://github.com/ossrs/srs/commit/4df19ba99a4e4d80cd89b304f9298d343497bec9
+[p20]: https://github.com/ossrs/srs/commit/d12fc7fcc5b2e9e3c8ee5c7da01d0e41c8f8ca4a
+[p21]: https://github.com/ossrs/srs/commit/87519aaae835199e5adb60c0ae2c1cd24939448c
+[p22]: https://github.com/ossrs/srs/commit/5a4373d4835758188b9a1f03005cea0b6ddc62aa
+[p23]: https://github.com/ossrs/srs/pull/239
+
+[authors]: https://github.com/ossrs/srs/blob/4.0release/AUTHORS.txt
+[bigthanks]: https://github.com/ossrs/srs/wiki/Product#release40
+[st]: https://github.com/ossrs/state-threads
+[st2]: https://github.com/ossrs/state-threads/tree/srs
+[state-threads]: https://github.com/ossrs/state-threads/tree/srs
+[nginx]: http://nginx.org/
+[srs]: https://github.com/ossrs/srs
+[gitee]: https://gitee.com/ossrs/srs
+[srs-bench]: https://github.com/ossrs/srs-bench
+[srs-ngb]: https://github.com/ossrs/srs-console
+[srs-librtmp]: https://github.com/ossrs/srs-librtmp
+[gitlab]: https://gitlab.com/winlinvip/srs-gitlab
+[console]: http://ossrs.net:8080/console
+[docker-srs3]: https://github.com/ossrs/srs-docker/tree/v3#usage
+[docker-srs4]: https://github.com/ossrs/srs-docker/tree/v4#usage
+[docker-dev]: https://github.com/ossrs/srs-docker/tree/dev#usage
+
+[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
+[v1-wiki-cn]: https://github.com/ossrs/srs/wiki/v4_CN_Home
+[v1-wiki-en]: https://github.com/ossrs/srs/wiki/v4_EN_Home
+[v2-wiki-cn]: https://github.com/ossrs/srs/wiki/v4_CN_Home
+[v2-wiki-en]: https://github.com/ossrs/srs/wiki/v4_EN_Home
+[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_Home]: https://github.com/ossrs/srs/wiki/v4_CN_Home
+[v4_EN_Home]: https://github.com/ossrs/srs/wiki/v4_EN_Home
+[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_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_LowLatency]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency
+[v4_EN_LowLatency]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency
+[v4_EN_LowLatency#merged-read]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency#merged-read
+[v4_CN_Performance#performancereport4k]: https://github.com/ossrs/srs/wiki/v4_CN_Performance#performancereport4k
+[v4_CN_DRM#tokentraverse]: https://github.com/ossrs/srs/wiki/v4_CN_DRM#tokentraverse
+[v4_CN_RaspberryPi]: https://github.com/ossrs/srs/wiki/v4_CN_RaspberryPi
+[v4_CN_Build]: https://github.com/ossrs/srs/wiki/v4_CN_Build
+[v4_CN_LowLatency]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency
+[v4_CN_HowToAskQuestion]: https://github.com/ossrs/srs/wiki/v4_CN_HowToAskQuestion
+[v4_CN_Build]: https://github.com/ossrs/srs/wiki/v4_CN_Build
+[v4_CN_Performance]: https://github.com/ossrs/srs/wiki/v4_CN_Performance
+[v4_CN_RaspberryPi]: https://github.com/ossrs/srs/wiki/v4_CN_RaspberryPi
+[v4_CN_LowLatency#merged-read]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency#merged-read
+[v4_CN_Product]: https://github.com/ossrs/srs/wiki/v4_CN_Product
+[v4_EN_LowLatency#merged-write]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency#merged-write
+[v4_CN_LowLatency#merged-write]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency#merged-write
+[v4_CN_NgExec]:https://github.com/ossrs/srs/wiki/v4_CN_NgExec
+[v4_EN_NgExec]:https://github.com/ossrs/srs/wiki/v4_EN_NgExec
+[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_SampleSRT]:https://github.com/ossrs/srs/wiki/v4_CN_SampleSRT
+[v4_EN_SampleSRT]:https://github.com/ossrs/srs/wiki/v4_EN_SampleSRT
+[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
+
+
+[v4_CN_Contact]: https://github.com/ossrs/srs/wiki/v4_CN_Contact
+[v4_EN_Contact]: https://github.com/ossrs/srs/wiki/v4_EN_Contact
+
+[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
+
diff --git a/README.md b/README.md
index e4a2bdaff..030713af0 100755
--- a/README.md
+++ b/README.md
@@ -77,6 +77,30 @@ Other important wiki:
* Usage: How to improve edge performance for multiple CPUs? ([CN][v4_CN_REUSEPORT], [EN][v4_EN_REUSEPORT])
* Usage: How to file a bug or contact us? ([CN][v4_CN_Contact], [EN][v4_EN_Contact])
+## AUTHORS
+
+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.
+* [Contributors][authors]: Submit patches, report bugs, add translations, help answer newbie questions, and generally make SRS much better.
+
+Maintainers of SRS project:
+
+* [Winlin](https://github.com/winlinvip): All areas of streaming server and documents.
+* [Wenjie](https://github.com/wenjiegit): The focus of his work is on the [HDS](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_DeliveryHDS) module.
+* [Runner365](https://github.com/runner365): The focus of his work is on the [SRT](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_SRTWiki) module.
+* [John](https://github.com/xiaozhihong): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
+* [B.P.Y(Bepartofyou)](https://github.com/Bepartofyou): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
+* [Lixin](https://github.com/xialixin): Focus on [GB28181](https://github.com/ossrs/srs/issues/1500) module.
+* [Mozhan](https://github.com/lipeng19811218): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
+* [Jinxue](https://github.com/chen-guanghua): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
+
+A big THANK YOU goes to:
+
+* All friends of SRS for [big supports][bigthanks].
+* Genes amd Mabbott for creating [st][st]([state-threads][st2]).
+* [Michael Talyanksy](https://github.com/michaeltalyansky) for introducing ST to us.
+
## Ports
The ports used by SRS, kernel services:
@@ -143,7 +167,7 @@ For external services to work with SRS:
- [x] Improve test coverage for core/kernel/protocol/service.
- [x] Support docker by [srs-docker](https://github.com/ossrs/srs-docker).
- [x] Support multiple processes by ReusePort([CN][v4_CN_REUSEPORT], [EN][v4_EN_REUSEPORT]), [#775][bug #775].
-- [x] Support a simple [mgmt console][console], please read [srs-ngb][srs-ngb].
+- [x] Support a simple [mgmt console][console], please read [srs-console][srs-ngb].
- [x] [Experimental] Support playing stream by WebRTC, [#307][bug #307].
- [x] [Experimental] Support publishing stream by WebRTC, [#307][bug #307].
- [x] [Experimental] Support mux RTP/RTCP/DTLS/SRTP on one port for WebRTC, [#307][bug #307].
@@ -158,16 +182,16 @@ For external services to work with SRS:
- [x] [Experimental] Support pushing FLV over HTTP POST, please read wiki([CN][v4_CN_Streamer2], [EN][v4_EN_Streamer2]).
- [x] [Experimental] Support HTTP RAW API, please read [#459][bug #459], [#470][bug #470], [#319][bug #319].
- [x] [Experimental] Support SRT server, read [#1147][bug #1147].
+- [x] [Experimental] Support transmux RTC to RTMP, [#2093][bug #2093].
- [x] [Deprecated] Support pushing RTSP, please read [bug #2304][bug #2304].
- [x] [Deprecated] Support Adobe HDS(f4m), please read wiki([CN][v4_CN_DeliveryHDS], [EN][v4_EN_DeliveryHDS]) and [#1535][bug #1535].
- [x] [Deprecated] Support bandwidth testing, please read [#1535][bug #1535].
- [x] [Deprecated] Support Adobe FMS/AMS token traverse([CN][v4_CN_DRM2], [EN][v4_EN_DRM2]) authentication, please read [#1535][bug #1535].
-- [x] [Removed] Support RTMP client library: [srs-librtmp](https://github.com/ossrs/srs-librtmp).
+- [x] [Removed] Support RTMP client library: [srs-librtmp][srs-librtmp].
+- [ ] Support IETF-QUIC for WebRTC Cluster, [#2091][bug #2091].
- [ ] Enhanced forwarding with vhost and variables, [#1342][bug #1342].
- [ ] Support DVR to Cloud Storage, [#1193][bug #1193].
-- [ ] Support transmux RTC to RTMP, [#2093][bug #2093].
- [ ] Support H.265 over RTMP and HLS, [#465][bug #465].
-- [ ] Support IETF-QUIC for WebRTC Cluster, [#2091][bug #2091].
- [ ] Improve RTC performance to 5K by multiple threading, [#2188][bug #2188].
- [ ] Support source cleanup for idle streams, [#413][bug #413].
- [ ] Support change user to run SRS, [#1111][bug #1111].
@@ -246,121 +270,7 @@ read Product([CN][v4_CN_Compare]/[EN][v4_EN_Compare]).
## Performance
-The performance benchmark data and corelative commits are listed here.
-
-* See also: [Performance for x86/x64 Test Guide][v4_CN_Performance].
-* See also: [Performance for RaspberryPi][v4_CN_RaspberryPi].
-* For multiple processes performance, read [#775: REUSEPORT][bug #775] or OriginCluster([CN][v4_EN_OriginCluster]/[EN][v4_EN_OriginCluster]) or [go-oryx][oryx].
-* For RTC benchmark, please use [srs-bench](https://github.com/ossrs/srs-bench/tree/feature/rtc#usage).
-
-
-**Play RTMP benchmark**
-
-The data for playing RTMP was benchmarked by [SB][srs-bench]:
-
-
-| Update | SRS | Clients | Type | CPU | Memory | Commit |
-| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
-| 2014-12-07 | 2.0.67 | 10k(10000) | players | 95% | 656MB | [code][p12] |
-| 2014-12-05 | 2.0.57 | 9.0k(9000) | players | 90% | 468MB | [code][p11] |
-| 2014-12-05 | 2.0.55 | 8.0k(8000) | players | 89% | 360MB | [code][p10] |
-| 2014-11-22 | 2.0.30 | 7.5k(7500) | players | 87% | 320MB | [code][p9] |
-| 2014-11-13 | 2.0.15 | 6.0k(6000) | players | 82% | 203MB | [code][p8] |
-| 2014-11-12 | 2.0.14 | 3.5k(3500) | players | 95% | 78MB | [code][p7] |
-| 2014-11-12 | 2.0.14 | 2.7k(2700) | players | 69% | 59MB | - |
-| 2014-11-11 | 2.0.12 | 2.7k(2700) | players | 85% | 66MB | - |
-| 2014-11-11 | 1.0.5 | 2.7k(2700) | players | 85% | 66MB | - |
-| 2014-07-12 | 0.9.156 | 2.7k(2700) | players | 89% | 61MB | [code][p6] |
-| 2014-07-12 | 0.9.156 | 1.8k(1800) | players | 68% | 38MB | - |
-| 2013-11-28 | 0.5.0 | 1.8k(1800) | players | 90% | 41M | - |
-
-| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
-| ---------- | ---------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
-| 2021-05-11 | SRS/v4.0.105 | 4000 | players | ~94% x1 | 419MB | 1 | G5 8CPU |
-| 2021-05-11 | NginxRTMP/v1.2.1 | 2400 | players | ~92% x1 | 173MB | 1 | G5 8CPU |
-
-> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)](https://help.aliyun.com/document_detail/25378.html),
-> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
-> [NginxRTMP/v1.2.1](https://github.com/arut/nginx-rtmp-module/releases/tag/v1.2.1).
-
-
-**Publish RTMP benchmark**
-
-The data for publishing RTMP was benchmarked by [SB][srs-bench]:
-
-| Update | SRS | Clients | Type | CPU | Memory | Commit |
-| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
-| 2014-12-04 | 2.0.52 | 4.0k(4000) | publishers | 80% | 331MB | [code][p5] |
-| 2014-12-04 | 2.0.51 | 2.5k(2500) | publishers | 91% | 259MB | [code][p4] |
-| 2014-12-04 | 2.0.49 | 2.5k(2500) | publishers | 95% | 404MB | [code][p3] |
-| 2014-12-04 | 2.0.49 | 1.4k(1400) | publishers | 68% | 144MB | - |
-| 2014-12-03 | 2.0.48 | 1.4k(1400) | publishers | 95% | 140MB | [code][p2] |
-| 2014-12-03 | 2.0.47 | 1.4k(1400) | publishers | 95% | 140MB | - |
-| 2014-12-03 | 2.0.47 | 1.2k(1200) | publishers | 84% | 76MB | [code][p1] |
-| 2014-12-03 | 2.0.12 | 1.2k(1200) | publishers | 96% | 43MB | - |
-| 2014-12-03 | 1.0.10 | 1.2k(1200) | publishers | 96% | 43MB | - |
-
-| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
-| ---------- | ---------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
-| 2021-05-11 | SRS/v4.0.105 | 2300 | publishers | ~89% x1 | 1.1GB | 1 | G5 8CPU |
-| 2021-05-11 | NginxRTMP/v1.2.1 | 1300 | publishers | ~84% x1 | 198MB | 1 | G5 8CPU |
-
-> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)](https://help.aliyun.com/document_detail/25378.html),
-> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
-> [NginxRTMP/v1.2.1](https://github.com/arut/nginx-rtmp-module/releases/tag/v1.2.1).
-
-
-**Play HTTP FLV benchmark**
-
-The data for playing HTTP FLV was benchmarked by [SB][srs-bench]:
-
-
-| Update | SRS | Clients | Type | CPU | Memory | Commit |
-| ------------- | --------- | ------------- | ------------- | --------- | -------- | ------------ |
-| 2014-05-25 | 2.0.171 | 6.0k(6000) | players | 84% | 297MB | [code][p20] |
-| 2014-05-24 | 2.0.170 | 3.0k(3000) | players | 89% | 96MB | [code][p19] |
-| 2014-05-24 | 2.0.169 | 3.0k(3000) | players | 94% | 188MB | [code][p18] |
-| 2014-05-24 | 2.0.168 | 2.3k(2300) | players | 92% | 276MB | [code][p17] |
-| 2014-05-24 | 2.0.167 | 1.0k(1000) | players | 82% | 86MB | - |
-
-
-**RTC benchmark**
-
-The RTC benchmark data, by [srs-bench](https://github.com/ossrs/srs-bench/tree/feature/rtc#usage):
-
-| Update | SFU | Clients | Type | CPU | Memory | Threads | VM |
-| ---------- | ------------- | -------- | ------------- | --------- | -------- | ------- | ---- |
-| 2021-05-10 | SRS/v4.0.105 | 2000 | players | ~94% x1 | 462MB | 1 | G7 2CPU |
-| 2021-05-10 | SRS/v4.0.105 | 1000 | players | ~90% x1 | 180MB | 1 | G5 2CPU |
-| 2021-03-31 | SRS/v4.0.87 | 800 | players | ~94% x1 | 444MB | 1 | G5 2CPU |
-| 2021-05-10 | Janus/v0.11.1 | 700 | players | ~93% x2 | 430MB | 24 | G5 2CPU |
-| 2021-05-10 | SRS/v4.0.105 | 1700 | publishers | ~92% x1 | 334MB | 1 | G7 2CPU |
-| 2021-05-10 | SRS/v4.0.105 | 950 | publishers | ~92% x1 | 132MB | 1 | G5 2CPU |
-| 2021-03-31 | SRS/v4.0.87 | 550 | publishers | ~86% x1 | 1.3GB | 1 | G5 2CPU |
-| 2021-05-10 | Janus/v0.11.1 | 350 | publishers | ~93% x2 | 405MB | 23 | G5 2CPU |
-
-> Note: CentOS7, 600Kbps, [ECS/G5-2.5GHZ(SkyLake)/G7-2.7GHZ(IceLake)](https://help.aliyun.com/document_detail/25378.html),
-> [SRS/v4.0.87](https://github.com/ossrs/srs/commit/d6c16a7e236e03eba754c763e865464ec82d4516),
-> [SRS/v4.0.105](https://github.com/ossrs/srs/commit/2ad24b2313e88a85801deaea370204f225555939),
-> [Janus/v0.11.1](https://github.com/meetecho/janus-gateway/releases/tag/v0.11.1).
-
-
-**Latency benchmark**
-
-The latency between encoder and player with realtime config([CN][v4_CN_LowLatency], [EN][v4_EN_LowLatency]):
-
-| Update | SRS | Protocol | VP6 | H.264 | VP6+MP3 | H.264+MP3 |
-| ------------- | --------- | --------- | --------- | --------- | --------- | -------- |
-| 2014-12-16 | 2.0.72 | RTMP | 0.1s | 0.4s |[0.8s][p15]|[0.6s][p16]|
-| 2014-12-12 | 2.0.70 | RTMP |[0.1s][p13]|[0.4s][p14]| 1.0s | 0.9s |
-| 2014-12-03 | 1.0.10 | RTMP | 0.4s | 0.4s | 0.9s | 1.2s |
-| 2021-04-02 | 4.0.87 | WebRTC | x | 80ms | x | x |
-
-> 2018-08-05, [c45f72e](https://github.com/ossrs/srs/commit/c45f72ef7bac9c7cf85b9125fc9e3aafd53f396f), Refine HTTP-FLV latency, support realtime mode. 2.0.252
-
-We used FMLE as encoder for benchmark. The latency of server was 0.1s+,
-and the bottleneck was the encoder. For more information, read
-[bug #257][bug #257-c0].
+Please read [PERFORMANCE](Performance.md#performance).
## Architecture
@@ -412,30 +322,6 @@ Remark:
1. EXEC: Like NGINX-RTMP, EXEC forks external tools for events, please read [ng-exec][v4_CN_NgExec].
1. SRTModule: A isolate module which run in [hybrid](https://github.com/ossrs/srs/issues/1147#issuecomment-577574883) model.
-## AUTHORS
-
-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.
-* [Contributors][authors]: Submit patches, report bugs, add translations, help answer newbie questions, and generally make SRS much better.
-
-Maintainers of SRS project:
-
-* [Winlin](https://github.com/winlinvip): All areas of streaming server and documents.
-* [Wenjie](https://github.com/wenjiegit): The focus of his work is on the [HDS](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_DeliveryHDS) module.
-* [Runner365](https://github.com/runner365): The focus of his work is on the [SRT](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_SRTWiki) module.
-* [John](https://github.com/xiaozhihong): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
-* [B.P.Y(Bepartofyou)](https://github.com/Bepartofyou): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
-* [Lixin](https://github.com/xialixin): Focus on [GB28181](https://github.com/ossrs/srs/issues/1500) module.
-* [Mozhan](https://github.com/lipeng19811218): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
-* [Jinxue](https://github.com/chen-guanghua): Focus on [WebRTC](https://github.com/simple-rtmp-server/srs/wiki/v4_CN_WebRTC) module.
-
-A big THANK YOU goes to:
-
-* All friends of SRS for [big supports][bigthanks].
-* Genes amd Mabbott for creating [st][st]([state-threads][st2]).
-* [Michael Talyanksy](https://github.com/michaeltalyansky) for introducing ST to us.
-
## Mirrors
Gitee: [https://gitee.com/ossrs/srs][gitee], the GIT usage([CN][v4_CN_Git], [EN][v4_EN_Git])
@@ -480,55 +366,19 @@ Supported operating systems and hardware:
Beijing, 2013.10
Winlin
-
-[p1]: https://github.com/ossrs/srs/commit/787ab674e38734ea8e0678101614fdcd84645dc8
-[p2]: https://github.com/ossrs/srs/commit/f35ec2155b1408d528a9f37da7904c9625186bcf
-[p3]: https://github.com/ossrs/srs/commit/29324fab469e0f7cef9ad04ffdbce832ac7dd9ff
-[p4]: https://github.com/ossrs/srs/commit/f57801eb46c16755b173984b915a4166922df6a6
-[p5]: https://github.com/ossrs/srs/commit/5589b13d2e216b91f97afb78ee0c011b2fccf7da
-[p6]: https://github.com/ossrs/srs/commit/1ae3e6c64cc5cee90e6050c26968ebc3c18281be
-[p7]: https://github.com/ossrs/srs/commit/8acd143a7a152885b815999162660fd4e7a3f247
-[p8]: https://github.com/ossrs/srs/commit/cc6aca9ad55342a06440ce7f3b38453776b2b2d1
-[p9]: https://github.com/ossrs/srs/commit/58136ec178e3d47db6c90a59875d7e40946936e5
-[p10]: https://github.com/ossrs/srs/commit/58136ec178e3d47db6c90a59875d7e40946936e5
-[p11]: https://github.com/ossrs/srs/commit/9ee138746f83adc26f0e236ec017f4d68a300004
-[p12]: https://github.com/ossrs/srs/commit/1311b6fe6576fd7b9c6d299b0f8f2e8d202f4bf8
-[p13]: https://github.com/ossrs/srs/commit/10297fab519811845b549a8af40a6bcbd23411e8
-[p14]: https://github.com/ossrs/srs/commit/10297fab519811845b549a8af40a6bcbd23411e8
-[p15]: https://github.com/ossrs/srs/commit/0d6b91039d408328caab31a1077d56a809b6bebc
-[p16]: https://github.com/ossrs/srs/commit/0d6b91039d408328caab31a1077d56a809b6bebc
-[p17]: https://github.com/ossrs/srs/commit/fc995473eb02c7cf64b5b212b456e11f34aa7984
-[p18]: https://github.com/ossrs/srs/commit/960341b9b2b9646270ccfd113b4dd784d9826c73
-[p19]: https://github.com/ossrs/srs/commit/4df19ba99a4e4d80cd89b304f9298d343497bec9
-[p20]: https://github.com/ossrs/srs/commit/d12fc7fcc5b2e9e3c8ee5c7da01d0e41c8f8ca4a
-[p21]: https://github.com/ossrs/srs/commit/87519aaae835199e5adb60c0ae2c1cd24939448c
-[p22]: https://github.com/ossrs/srs/commit/5a4373d4835758188b9a1f03005cea0b6ddc62aa
-[p23]: https://github.com/ossrs/srs/pull/239
-[pr #558]: https://github.com/ossrs/srs/pull/558
-[pr #559]: https://github.com/ossrs/srs/pull/559
-
-[authors]: https://github.com/ossrs/srs/blob/develop/AUTHORS.txt
-[bigthanks]: https://github.com/ossrs/srs/wiki/v4_CN_Product#bigthanks
-[st]: https://github.com/winlinvip/state-threads
+[authors]: https://github.com/ossrs/srs/blob/4.0release/AUTHORS.txt
+[bigthanks]: https://github.com/ossrs/srs/wiki/Product#release40
+[st]: https://github.com/ossrs/state-threads
[st2]: https://github.com/ossrs/state-threads/tree/srs
[state-threads]: https://github.com/ossrs/state-threads/tree/srs
-[nginx-rtmp]: https://github.com/arut/nginx-rtmp-module
-[http-parser]: https://github.com/joyent/http-parser
[nginx]: http://nginx.org/
-[FFMPEG]: http://ffmpeg.org/
-[libx264]: http://www.videolan.org/
[srs]: https://github.com/ossrs/srs
-[csdn]: https://code.csdn.net/winlinvip/srs-csdn
[gitee]: https://gitee.com/ossrs/srs
-[srs-dolphin]: https://github.com/ossrs/srs-dolphin
-[oryx]: https://github.com/ossrs/go-oryx
[srs-bench]: https://github.com/ossrs/srs-bench
-[srs-ngb]: https://github.com/ossrs/srs-ngb
+[srs-ngb]: https://github.com/ossrs/srs-console
[srs-librtmp]: https://github.com/ossrs/srs-librtmp
[gitlab]: https://gitlab.com/winlinvip/srs-gitlab
-[console]: http://ossrs.net:1985/console
-[player]: http://ossrs.net/players/srs_player.html
-[modules]: https://github.com/ossrs/srs/blob/develop/trunk/modules/readme.txt
+[console]: http://ossrs.net:8080/console
[docker-srs3]: https://github.com/ossrs/srs-docker/tree/v3#usage
[docker-srs4]: https://github.com/ossrs/srs-docker/tree/v4#usage
[docker-dev]: https://github.com/ossrs/srs-docker/tree/dev#usage
@@ -571,22 +421,8 @@ Winlin
[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
-[v1-wiki-cn]: https://github.com/ossrs/srs/wiki/v4_CN_Home
-[v1-wiki-en]: https://github.com/ossrs/srs/wiki/v4_EN_Home
-[v2-wiki-cn]: https://github.com/ossrs/srs/wiki/v4_CN_Home
-[v2-wiki-en]: https://github.com/ossrs/srs/wiki/v4_EN_Home
[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_Home]: https://github.com/ossrs/srs/wiki/v4_CN_Home
-[v4_EN_Home]: https://github.com/ossrs/srs/wiki/v4_EN_Home
-[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_Home]: https://github.com/ossrs/srs/wiki/v4_CN_Home
-[v4_EN_Home]: https://github.com/ossrs/srs/wiki/v4_EN_Home
-[donation0]: http://winlinvip.github.io/srs.release/donation/index.html
-[donation1]: http://ossrs.net/srs.release/donation/index.html
-[donation2]: http://ossrs.net/srs.release/donation/paypal.html
-[donations]: https://github.com/ossrs/srs/blob/develop/DONATIONS.txt
[v4_CN_Compare]: https://github.com/ossrs/srs/wiki/v4_CN_Compare
[v4_EN_Compare]: https://github.com/ossrs/srs/wiki/v4_EN_Compare
@@ -654,382 +490,45 @@ Winlin
[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_LowLatency]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency
-[v4_EN_LowLatency]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency
-[v4_EN_LowLatency#merged-read]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency#merged-read
-[v4_CN_Performance#performancereport4k]: https://github.com/ossrs/srs/wiki/v4_CN_Performance#performancereport4k
-[v4_CN_DRM#tokentraverse]: https://github.com/ossrs/srs/wiki/v4_CN_DRM#tokentraverse
-[v4_CN_RaspberryPi]: https://github.com/ossrs/srs/wiki/v4_CN_RaspberryPi
-[v4_CN_Build]: https://github.com/ossrs/srs/wiki/v4_CN_Build
-[v4_CN_LowLatency]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency
-[v4_CN_HowToAskQuestion]: https://github.com/ossrs/srs/wiki/v4_CN_HowToAskQuestion
-[v4_CN_Build]: https://github.com/ossrs/srs/wiki/v4_CN_Build
-[v4_CN_Performance]: https://github.com/ossrs/srs/wiki/v4_CN_Performance
-[v4_CN_RaspberryPi]: https://github.com/ossrs/srs/wiki/v4_CN_RaspberryPi
-[v4_CN_LowLatency#merged-read]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency#merged-read
-[v4_CN_Product]: https://github.com/ossrs/srs/wiki/v4_CN_Product
-[v4_EN_LowLatency#merged-write]: https://github.com/ossrs/srs/wiki/v4_EN_LowLatency#merged-write
-[v4_CN_LowLatency#merged-write]: https://github.com/ossrs/srs/wiki/v4_CN_LowLatency#merged-write
-[v4_CN_NgExec]:https://github.com/ossrs/srs/wiki/v4_CN_NgExec
-[v4_EN_NgExec]:https://github.com/ossrs/srs/wiki/v4_EN_NgExec
-[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_SampleSRT]:https://github.com/ossrs/srs/wiki/v4_CN_SampleSRT
-[v4_EN_SampleSRT]:https://github.com/ossrs/srs/wiki/v4_EN_SampleSRT
[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 #213]: https://github.com/ossrs/srs/issues/213
-[bug #194]: https://github.com/ossrs/srs/issues/194
-[bug #182]: https://github.com/ossrs/srs/issues/182
-[bug #257]: https://github.com/ossrs/srs/issues/257
-[bug #179]: https://github.com/ossrs/srs/issues/179
-[bug #224]: https://github.com/ossrs/srs/issues/224
-[bug #251]: https://github.com/ossrs/srs/issues/251
-[bug #293]: https://github.com/ossrs/srs/issues/293
-[bug #250]: https://github.com/ossrs/srs/issues/250
+[bug #547]: https://github.com/ossrs/srs/issues/547
[bug #301]: https://github.com/ossrs/srs/issues/301
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #133]: https://github.com/ossrs/srs/issues/133
-[bug #92]: https://github.com/ossrs/srs/issues/92
+[bug #459]: https://github.com/ossrs/srs/issues/459
[bug #367]: https://github.com/ossrs/srs/issues/367
-[bug #471]: https://github.com/ossrs/srs/issues/471
-[bug #380]: https://github.com/ossrs/srs/issues/380
-[bug #474]: https://github.com/ossrs/srs/issues/474
-[bug #484]: https://github.com/ossrs/srs/issues/484
-[bug #485]: https://github.com/ossrs/srs/issues/485
-[bug #495]: https://github.com/ossrs/srs/issues/495
-[bug #497]: https://github.com/ossrs/srs/issues/497
-[bug #448]: https://github.com/ossrs/srs/issues/448
-[bug #475]: https://github.com/ossrs/srs/issues/475
-[bug #458]: https://github.com/ossrs/srs/issues/458
-[bug #454]: https://github.com/ossrs/srs/issues/454
-[bug #442]: https://github.com/ossrs/srs/issues/442
-[bug #169]: https://github.com/ossrs/srs/issues/169
-[bug #441]: https://github.com/ossrs/srs/issues/441
-[bug #433]: https://github.com/ossrs/srs/issues/433
-[bug #425]: https://github.com/ossrs/srs/issues/425
-[bug #424]: https://github.com/ossrs/srs/issues/424
-[bug #421]: https://github.com/ossrs/srs/issues/421
-[bug #435]: https://github.com/ossrs/srs/issues/435
-[bug #420]: https://github.com/ossrs/srs/issues/420
-[bug #209]: https://github.com/ossrs/srs/issues/209
-[bug #409]: https://github.com/ossrs/srs/issues/409
-[bug #404]: https://github.com/ossrs/srs/issues/404
-[bug #391]: https://github.com/ossrs/srs/issues/391
-[bug #397]: https://github.com/ossrs/srs/issues/397
-[bug #400]: https://github.com/ossrs/srs/issues/400
-[bug #383]: https://github.com/ossrs/srs/issues/383
-[bug #381]: https://github.com/ossrs/srs/issues/381
-[bug #375]: https://github.com/ossrs/srs/issues/375
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #372]: https://github.com/ossrs/srs/issues/372
-[bug #366]: https://github.com/ossrs/srs/issues/366
-[bug #351]: https://github.com/ossrs/srs/issues/351
-[bug #155]: https://github.com/ossrs/srs/issues/155
-[bug #324]: https://github.com/ossrs/srs/issues/324
-[bug #324]: https://github.com/ossrs/srs/issues/324
-[bug #328]: https://github.com/ossrs/srs/issues/328
-[bug #155]: https://github.com/ossrs/srs/issues/155
-[bug #316]: https://github.com/ossrs/srs/issues/316
-[bug #310]: https://github.com/ossrs/srs/issues/310
-[bug #322]: https://github.com/ossrs/srs/issues/322
-[bug #179]: https://github.com/ossrs/srs/issues/179
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #133]: https://github.com/ossrs/srs/issues/133
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #304]: https://github.com/ossrs/srs/issues/304
-[bug #311]: https://github.com/ossrs/srs/issues/311
-[bug #310]: https://github.com/ossrs/srs/issues/310
-[bug #136]: https://github.com/ossrs/srs/issues/136
-[bug #250]: https://github.com/ossrs/srs/issues/250
-[bug #268]: https://github.com/ossrs/srs/issues/268
-[bug #151]: https://github.com/ossrs/srs/issues/151
-[bug #151]: https://github.com/ossrs/srs/issues/151
-[bug #293]: https://github.com/ossrs/srs/issues/293
-[bug #293]: https://github.com/ossrs/srs/issues/293
-[bug #293]: https://github.com/ossrs/srs/issues/293
-[bug #277]: https://github.com/ossrs/srs/issues/277
-[bug #277]: https://github.com/ossrs/srs/issues/277
-[bug #290]: https://github.com/ossrs/srs/issues/290
-[bug #281]: https://github.com/ossrs/srs/issues/281
-[bug #274]: https://github.com/ossrs/srs/issues/274
-[bug #179]: https://github.com/ossrs/srs/issues/179
-[bug #211]: https://github.com/ossrs/srs/issues/211
-[bug #207]: https://github.com/ossrs/srs/issues/207
-[bug #158]: https://github.com/ossrs/srs/issues/158
-[bug #216]: https://github.com/ossrs/srs/issues/216
-[bug #263]: https://github.com/ossrs/srs/issues/263
-[bug #270]: https://github.com/ossrs/srs/issues/270
-[bug #266]: https://github.com/ossrs/srs/issues/266
-[bug #267]: https://github.com/ossrs/srs/issues/267
-[bug #268]: https://github.com/ossrs/srs/issues/268
-[bug #264]: https://github.com/ossrs/srs/issues/264
-[bug #264]: https://github.com/ossrs/srs/issues/264
[bug #257]: https://github.com/ossrs/srs/issues/257
-[bug #237]: https://github.com/ossrs/srs/issues/237
-[bug #235]: https://github.com/ossrs/srs/issues/235
-[bug #215]: https://github.com/ossrs/srs/issues/215
-[bug #212]: https://github.com/ossrs/srs/issues/212
-[bug #217]: https://github.com/ossrs/srs/issues/217
-[bug #212]: https://github.com/ossrs/srs/issues/212
-[bug #213]: https://github.com/ossrs/srs/issues/213
-[bug #204]: https://github.com/ossrs/srs/issues/204
-[bug #203]: https://github.com/ossrs/srs/issues/203
-[bug #202]: https://github.com/ossrs/srs/issues/202
-[bug #200]: https://github.com/ossrs/srs/issues/200
-[bug #194]: https://github.com/ossrs/srs/issues/194
-[bug #194]: https://github.com/ossrs/srs/issues/194
-[bug #195]: https://github.com/ossrs/srs/issues/195
-[bug #191]: https://github.com/ossrs/srs/issues/191
-[bug #66]: https://github.com/ossrs/srs/issues/66
-[bug #185]: https://github.com/ossrs/srs/issues/185
-[bug #186]: https://github.com/ossrs/srs/issues/186
-[bug #184]: https://github.com/ossrs/srs/issues/184
-[bug #151]: https://github.com/ossrs/srs/issues/151
-[bug #162]: https://github.com/ossrs/srs/issues/162
-[bug #180]: https://github.com/ossrs/srs/issues/180
-[bug #177]: https://github.com/ossrs/srs/issues/177
-[bug #167]: https://github.com/ossrs/srs/issues/167
-[bug #150]: https://github.com/ossrs/srs/issues/150
-[bug #165]: https://github.com/ossrs/srs/issues/165
-[bug #160]: https://github.com/ossrs/srs/issues/160
-[bug #155]: https://github.com/ossrs/srs/issues/155
-[bug #148]: https://github.com/ossrs/srs/issues/148
-[bug #147]: https://github.com/ossrs/srs/issues/147
-[bug #79]: https://github.com/ossrs/srs/issues/79
-[bug #57]: https://github.com/ossrs/srs/issues/57
-[bug #85]: https://github.com/ossrs/srs/issues/85
-[bug #145]: https://github.com/ossrs/srs/issues/145
-[bug #143]: https://github.com/ossrs/srs/issues/143
-[bug #138]: https://github.com/ossrs/srs/issues/138
-[bug #142]: https://github.com/ossrs/srs/issues/142
-[bug #141]: https://github.com/ossrs/srs/issues/141
-[bug #124]: https://github.com/ossrs/srs/issues/124
-[bug #121]: https://github.com/ossrs/srs/issues/121
-[bug #119]: https://github.com/ossrs/srs/issues/119
-[bug #81]: https://github.com/ossrs/srs/issues/81
-[bug #103]: https://github.com/ossrs/srs/issues/103
-[bug #111]: https://github.com/ossrs/srs/issues/111
-[bug #110]: https://github.com/ossrs/srs/issues/110
-[bug #109]: https://github.com/ossrs/srs/issues/109
-[bug #108]: https://github.com/ossrs/srs/issues/108
-[bug #98]: https://github.com/ossrs/srs/issues/98
-[bug #87]: https://github.com/ossrs/srs/issues/87
-[bug #84]: https://github.com/ossrs/srs/issues/84
-[bug #89]: https://github.com/ossrs/srs/issues/89
-[bug #76]: https://github.com/ossrs/srs/issues/76
-[bug #78]: https://github.com/ossrs/srs/issues/78
-[bug #74]: https://github.com/ossrs/srs/issues/74
-[bug #72]: https://github.com/ossrs/srs/issues/72
-[bug #67]: https://github.com/ossrs/srs/issues/67
-[bug #64]: https://github.com/ossrs/srs/issues/64
-[bug #36]: https://github.com/ossrs/srs/issues/36
-[bug #60]: https://github.com/ossrs/srs/issues/60
-[bug #59]: https://github.com/ossrs/srs/issues/59
-[bug #50]: https://github.com/ossrs/srs/issues/50
-[bug #34]: https://github.com/ossrs/srs/issues/34
-[bug #257-c0]: https://github.com/ossrs/srs/issues/257#issuecomment-66864413
-[bug #109]: https://github.com/ossrs/srs/issues/109
-[bug #108]: https://github.com/ossrs/srs/issues/108
-[bug #104]: https://github.com/ossrs/srs/issues/104
-[bug #98]: https://github.com/ossrs/srs/issues/98
-[bug #87]: https://github.com/ossrs/srs/issues/87
-[bug #84]: https://github.com/ossrs/srs/issues/84
-[bug #89]: https://github.com/ossrs/srs/issues/89
-[bug #76]: https://github.com/ossrs/srs/issues/76
-[bug #78]: https://github.com/ossrs/srs/issues/78
-[bug #74]: https://github.com/ossrs/srs/issues/74
-[bug #72]: https://github.com/ossrs/srs/issues/72
-[bug #67]: https://github.com/ossrs/srs/issues/67
-[bug #64]: https://github.com/ossrs/srs/issues/64
-[bug #36]: https://github.com/ossrs/srs/issues/36
-[bug #60]: https://github.com/ossrs/srs/issues/60
-[bug #59]: https://github.com/ossrs/srs/issues/59
-[bug #50]: https://github.com/ossrs/srs/issues/50
-[bug #34]: https://github.com/ossrs/srs/issues/34
-[bug #367]: https://github.com/ossrs/srs/issues/367
-[bug #319]: https://github.com/ossrs/srs/issues/319
-[bug #367]: https://github.com/ossrs/srs/issues/367
+[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 #467]: https://github.com/ossrs/srs/issues/467
-[bug #464]: https://github.com/ossrs/srs/issues/464
-[bug #465]: https://github.com/ossrs/srs/issues/465
-[bug #299]: https://github.com/ossrs/srs/issues/299
-[bug #92]: https://github.com/ossrs/srs/issues/92
-[bug #299]: https://github.com/ossrs/srs/issues/299
-[bug #466]: https://github.com/ossrs/srs/issues/466
-[bug #468]: https://github.com/ossrs/srs/issues/468
-[bug #502]: https://github.com/ossrs/srs/issues/502
-[bug #467]: https://github.com/ossrs/srs/issues/467
-[bug #512]: https://github.com/ossrs/srs/issues/512
-[bug #515]: https://github.com/ossrs/srs/issues/515
-[bug #511]: https://github.com/ossrs/srs/issues/511
-[bug #518]: https://github.com/ossrs/srs/issues/518
-[bug #541]: https://github.com/ossrs/srs/issues/541
-[bug #546]: https://github.com/ossrs/srs/issues/546
-[bug #418]: https://github.com/ossrs/srs/issues/418
-[bug #509]: https://github.com/ossrs/srs/issues/509
-[bug #511]: https://github.com/ossrs/srs/issues/511
-[bug #717]: https://github.com/ossrs/srs/issues/717
-[bug #691]: https://github.com/ossrs/srs/issues/691
-[bug #711]: https://github.com/ossrs/srs/issues/711
-[bug #640]: https://github.com/ossrs/srs/issues/640
-[bug #661]: https://github.com/ossrs/srs/issues/661
-[bug #666]: https://github.com/ossrs/srs/issues/666
-[bug #654]: https://github.com/ossrs/srs/issues/654
-[bug #713]: https://github.com/ossrs/srs/issues/713
-[bug #513]: https://github.com/ossrs/srs/issues/513
-[bug #730]: https://github.com/ossrs/srs/issues/730
-[bug #635]: https://github.com/ossrs/srs/issues/635
-[bug #736]: https://github.com/ossrs/srs/issues/736
-[bug #588]: https://github.com/ossrs/srs/issues/588
-[bug #740]: https://github.com/ossrs/srs/issues/740
-[bug #749]: https://github.com/ossrs/srs/issues/749
-[bug #750]: https://github.com/ossrs/srs/issues/750
-[bug #752]: https://github.com/ossrs/srs/issues/752
-[bug #503]: https://github.com/ossrs/srs/issues/503
-[bug #834]: https://github.com/ossrs/srs/issues/834
-[bug #841]: https://github.com/ossrs/srs/issues/841
-[bug #846]: https://github.com/ossrs/srs/issues/846
-[bug #844]: https://github.com/ossrs/srs/issues/844
-[bug #848]: https://github.com/ossrs/srs/issues/848
-[bug #851]: https://github.com/ossrs/srs/issues/851
-[bug #636]: https://github.com/ossrs/srs/issues/636
-[bug #865]: https://github.com/ossrs/srs/issues/865
-[bug #893]: https://github.com/ossrs/srs/issues/893
-[bug #899]: https://github.com/ossrs/srs/issues/899
-[bug #1033]: https://github.com/ossrs/srs/issues/1033
-[bug #1039]: https://github.com/ossrs/srs/issues/1039
-[bug #1044]: https://github.com/ossrs/srs/issues/1044
-[bug #1045]: https://github.com/ossrs/srs/issues/1045
-[bug #1059]: https://github.com/ossrs/srs/issues/1059
-[bug #1077]: https://github.com/ossrs/srs/issues/1077
-[bug #1176]: https://github.com/ossrs/srs/issues/1176
-[bug #1119]: https://github.com/ossrs/srs/issues/1119
-[bug #1031]: https://github.com/ossrs/srs/issues/1031
-[bug #1110]: https://github.com/ossrs/srs/issues/1110
-[bug #910]: https://github.com/ossrs/srs/issues/910
-[bug #1202]: https://github.com/ossrs/srs/issues/1202
-[bug #1237]: https://github.com/ossrs/srs/issues/1237
-[bug #1236]: https://github.com/ossrs/srs/issues/1236
-[bug #1250]: https://github.com/ossrs/srs/issues/1250
-[bug #1263]: https://github.com/ossrs/srs/issues/1263
-[bug #1261]: https://github.com/ossrs/srs/issues/1261
-[bug #1274]: https://github.com/ossrs/srs/pull/1274
-[bug #1339]: https://github.com/ossrs/srs/pull/1339
-[bug #1312]: https://github.com/ossrs/srs/pull/1312
-[bug #1304]: https://github.com/ossrs/srs/pull/1304
-[bug #1524]: https://github.com/ossrs/srs/issues/1524
-[bug #1488]: https://github.com/ossrs/srs/issues/1488
-[bug #1551]: https://github.com/ossrs/srs/pull/1551
-[bug #1554]: https://github.com/ossrs/srs/pull/1554
-[bug #1672]: https://github.com/ossrs/srs/issues/1672
-[bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx
-
-[bug #735]: https://github.com/ossrs/srs/issues/735
-[bug #742]: https://github.com/ossrs/srs/issues/742
-[bug #738]: https://github.com/ossrs/srs/issues/738
-[bug #786]: https://github.com/ossrs/srs/issues/786
-[bug #820]: https://github.com/ossrs/srs/issues/820
-[bug #547]: https://github.com/ossrs/srs/issues/547
-[bug #904]: https://github.com/ossrs/srs/issues/904
-[bug #821]: https://github.com/ossrs/srs/issues/821
-[bug #913]: https://github.com/ossrs/srs/issues/913
-[bug #460]: https://github.com/ossrs/srs/issues/460
-[bug #775]: https://github.com/ossrs/srs/issues/775
-[bug #1057]: https://github.com/ossrs/srs/issues/1057
-[bug #105]: https://github.com/ossrs/srs/issues/105
-[bug #727]: https://github.com/ossrs/srs/issues/727
-[bug #1087]: https://github.com/ossrs/srs/issues/1087
-[bug #1051]: https://github.com/ossrs/srs/issues/1051
-[bug #1093]: https://github.com/ossrs/srs/issues/1093
-[bug #1501]: https://github.com/ossrs/srs/issues/1501
-[bug #1229]: https://github.com/ossrs/srs/issues/1229
-[bug #1042]: https://github.com/ossrs/srs/issues/1042
-[bug #1445]: https://github.com/ossrs/srs/issues/1445
-[bug #1506]: https://github.com/ossrs/srs/issues/1506
-[bug #1520]: https://github.com/ossrs/srs/issues/1520
-[bug #1223]: https://github.com/ossrs/srs/issues/1223
-[bug #1508]: https://github.com/ossrs/srs/issues/1508
+[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 #1537]: https://github.com/ossrs/srs/issues/1537
-[bug #1538]: https://github.com/ossrs/srs/issues/1538
-[bug #1282]: https://github.com/ossrs/srs/issues/1282
-[bug #1105]: https://github.com/ossrs/srs/issues/1105
-[bug #1544]: https://github.com/ossrs/srs/issues/1544
-[bug #1255]: https://github.com/ossrs/srs/issues/1255
-[bug #1543]: https://github.com/ossrs/srs/issues/1543
-[bug #1509]: https://github.com/ossrs/srs/issues/1509
-[bug #1575]: https://github.com/ossrs/srs/issues/1575
-[bug #1070]: https://github.com/ossrs/srs/issues/1070
-[bug #1580]: https://github.com/ossrs/srs/issues/1580
-[bug #1547]: https://github.com/ossrs/srs/issues/1547
-[bug #1221]: https://github.com/ossrs/srs/issues/1221
+[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 #1147]: https://github.com/ossrs/srs/issues/1147
-[bug #1108]: https://github.com/ossrs/srs/issues/1108
-[bug #703]: https://github.com/ossrs/srs/issues/703
-[bug #878]: https://github.com/ossrs/srs/issues/878
-[bug #607]: https://github.com/ossrs/srs/issues/607
-[bug #1303]: https://github.com/ossrs/srs/issues/1303
-[bug #1230]: https://github.com/ossrs/srs/issues/1230
-[bug #1206]: https://github.com/ossrs/srs/issues/1206
-[bug #939]: https://github.com/ossrs/srs/issues/939
-[bug #1186]: https://github.com/ossrs/srs/issues/1186
-[bug #1592]: https://github.com/ossrs/srs/issues/1592
-[bug #665]: https://github.com/ossrs/srs/issues/665
-[bug #1595]: https://github.com/ossrs/srs/issues/1595
-[bug #1601]: https://github.com/ossrs/srs/issues/1601
-[bug #1579]: https://github.com/ossrs/srs/issues/1579
-[bug #1598]: https://github.com/ossrs/srs/issues/1598
-[bug #1615]: https://github.com/ossrs/srs/issues/1615
-[bug #1621]: https://github.com/ossrs/srs/issues/1621
-[bug #1634]: https://github.com/ossrs/srs/issues/1634
-[bug #1594]: https://github.com/ossrs/srs/issues/1594
-[bug #1630]: https://github.com/ossrs/srs/issues/1630
-[bug #1635]: https://github.com/ossrs/srs/issues/1635
-[bug #1651]: https://github.com/ossrs/srs/issues/1651
-[bug #1619]: https://github.com/ossrs/srs/issues/1619
-[bug #1629]: https://github.com/ossrs/srs/issues/1629
-[bug #1780]: https://github.com/ossrs/srs/issues/1780
-[bug #1987]: https://github.com/ossrs/srs/issues/1987
-[bug #1548]: https://github.com/ossrs/srs/issues/1548
-[bug #1694]: https://github.com/ossrs/srs/issues/1694
-[bug #2311]: https://github.com/ossrs/srs/issues/2311
-[bug #413]: https://github.com/ossrs/srs/issues/413
-[bug #2091]: https://github.com/ossrs/srs/issues/2091
-[bug #1342]: https://github.com/ossrs/srs/issues/1342
-[bug #2093]: https://github.com/ossrs/srs/issues/2093
-[bug #2188]: https://github.com/ossrs/srs/issues/2188
-[bug #1193]: https://github.com/ossrs/srs/issues/1193
-[bug #2304]: https://github.com/ossrs/srs/issues/2304#issuecomment-826009290
-[bug #2355]: https://github.com/ossrs/srs/issues/2355
-[bug #307]: https://github.com/ossrs/srs/issues/307
-[bug #2362]: https://github.com/ossrs/srs/issues/2362
-[bug #2370]: https://github.com/ossrs/srs/issues/2370
-[bug #yyyyyyyyyyyyy]: https://github.com/ossrs/srs/issues/yyyyyyyyyyyyy
-
-[bug #1631]: https://github.com/ossrs/srs/issues/1631
-[bug #1612]: https://github.com/ossrs/srs/issues/1612
-[bug #1636]: https://github.com/ossrs/srs/issues/1636
-[bug #1657]: https://github.com/ossrs/srs/issues/1657
-[bug #1830]: https://github.com/ossrs/srs/issues/1830
-[bug #1657-1]: https://github.com/ossrs/srs/issues/1657#issuecomment-720889906
-[bug #1657-2]: https://github.com/ossrs/srs/issues/1657#issuecomment-722904004
-[bug #1657-3]: https://github.com/ossrs/srs/issues/1657#issuecomment-722971676
-[bug #1998]: https://github.com/ossrs/srs/issues/1998
-[bug #2106]: https://github.com/ossrs/srs/issues/2106
-[bug #2011]: https://github.com/ossrs/srs/issues/2011
-[bug #2324]: https://github.com/ossrs/srs/issues/2324
-[bug #1500]: https://github.com/ossrs/srs/issues/1500
-[bug #zzzzzzzzzzzzz]: https://github.com/ossrs/srs/issues/zzzzzzzzzzzzz
-
-[exo #828]: https://github.com/google/ExoPlayer/pull/828
+[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
@@ -1094,19 +593,12 @@ Winlin
[r0.1]: https://github.com/ossrs/srs/releases/tag/v0.1.0
-[contact]: https://github.com/ossrs/srs/wiki/v4_CN_Contact
[v4_CN_Contact]: https://github.com/ossrs/srs/wiki/v4_CN_Contact
[v4_EN_Contact]: https://github.com/ossrs/srs/wiki/v4_EN_Contact
-[more0]: http://winlinvip.github.io/srs.release/releases/
-[more1]: http://ossrs.net/srs.release/releases/
[LICENSE]: https://github.com/ossrs/srs/blob/develop/LICENSE
[LicenseMixing]: https://github.com/ossrs/srs/wiki/LicenseMixing
-[srs_CN]: https://github.com/ossrs/srs/wiki/v4_CN_Home
-[srs_EN]: https://github.com/ossrs/srs/wiki/v4_EN_Home
-[branch1]: https://github.com/ossrs/srs/tree/1.0release
-[branch2]: https://github.com/ossrs/srs/tree/2.0release
[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