diff --git a/README.md b/README.md
index 2ae2b9435..1d68f9874 100755
--- a/README.md
+++ b/README.md
@@ -40,26 +40,125 @@ git clone https://git.oschina.net/winlinvip/srs.oschina.git
SRS(SIMPLE RTMP Server) over state-threads created in 2013.10.
-SRS is a simple, [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP)/[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS),
-[high-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance), single/multiple(plan) processes, edge/origin live server,
-[x86/x64/arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm),
-compile depends on [st](http://sourceforge.net/projects/state-threads)(required), [ssl](http://www.openssl.org/) and [http-parser](https://github.com/joyent/http-parser),
-use [nginx](http://nginx.org/), [ffmpeg](http://ffmpeg.org/) and [cherrypy](http://www.cherrypy.org/) as external tools. that is, only need st to run srs for
-minimum run. see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build).
-
-SRS supports [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RtmpUrlVhost),
-rtmp([encoder push](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP), client/[edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge) pull), [ingester(srs pull)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Ingest),
-[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS), [HLS audio only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS#hlsaudioonly), [transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG),
-[forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG), [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback), [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi),
-[http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer), [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR).
-
+SRS delivers rtmp/hls live on x86/x64/arm/mips linux,
+supports origin/edge/vhost and transcode/ingest and dvr/forward
+and http-api/http-callback/reload, introduces tracable
+session-oriented log, exports client srs-librtmp,
+provides EN/CN wiki and the most simple architecture.
+
+SRS focus on small problem domain, which is the most complex for all software(see OOAD).
+Because of lack of deveoper resource, SRS only provides features which is the most popular
+for internet. SRS is simple for and only for problem domain is simplified.
+
+SRS is a simple, RTMP(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DeliveryRTMP)
+),
+HLS(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DeliveryHLS)
+),
+high-performance(6k+ clients)(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Performance)
+),
+single processes, edge/origin live server,
+x86/x64/arm(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SrsLinuxArm)
+),
+compile depends on st(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Architecture),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Architecture)
+)(required),
+[ssl](http://www.openssl.org/) and [http-parser](https://github.com/joyent/http-parser),
+use [nginx](http://nginx.org/), [ffmpeg](http://ffmpeg.org/) and
+[cherrypy](http://www.cherrypy.org/) as external tools. that is, only need st to run srs for
+minimum run. see Build(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Build)
+).
+
+SRS supports vhost(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RtmpUrlVhost),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_RtmpUrlVhost)
+),
+rtmp(encoder push(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DeliveryRTMP)
+),
+client/edge(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Edge),
+) pull),
+ingester(srs pull)(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Ingest),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Ingest)
+),
+HLS(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DeliveryHLS)
+),
+HLS audio only(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS#hlsaudioonly),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DeliveryHLS#hlsaudioonly)
+),
+transcoding(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_FFMPEG)
+),
+forward(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_FFMPEG)
+),
+http hooks(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_HTTPCallback)
+),
+http api(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_HTTPApi)
+),
+http server(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_HTTPServer)
+),
+dvr(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_DVR)
+) and
+SRS-librtmp(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SrsLibrtmp)
+).
+
+SRS-librtmp(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SrsLibrtmp)
+)
+is a client library, only depends on c++ and socket, with
+examples(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp#srs-librtmp-examples),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SrsLibrtmp#srs-librtmp-examples)
+)(to play,
+publish, ingest flv/rtmp, inject flv,
+SRS-librtmp(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SrsLibrtmp)
+)
+provides apis to support RTMP, FLV and AMF0.
+
+WebSite: [http://ossrs.net](http://ossrs.net)
Release: [http://winlinvip.github.io/srs.release](http://winlinvip.github.io/srs.release)
Blog: [http://blog.csdn.net/win_lin](http://blog.csdn.net/win_lin)
CSDN mirror: [https://code.csdn.net/winlinvip/srs-csdn](https://code.csdn.net/winlinvip/srs-csdn)
See also: [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server)
Github DEMO: [demo with your SRS](http://winlinvip.github.io/srs.release/trunk/research/players/srs_player.html?server=192.168.1.170&vhost=192.168.1.170)
Wiki: [https://github.com/winlinvip/simple-rtmp-server/wiki](https://github.com/winlinvip/simple-rtmp-server/wiki)
-StreamServers:[BLS](https://github.com/wenjiegit/Bull-Live-Server)/[BLE](https://github.com/wenjiegit/Bull-Live-Encoder), [NGINX-RTMP](https://github.com/arut/nginx-rtmp-module), [CRTMPD](http://www.rtmpd.com/), [RED5](http://www.red5.org/), [WOWZA](http://www.wowza.com/), [FMS/AMS](http://www.adobe.com/products/adobe-media-server-standard.html)
+StreamServers:[BLS](https://github.com/wenjiegit/Bull-Live-Server)/[BLE](https://github.com/wenjiegit/Bull-Live-Encoder),
+[NGINX-RTMP](https://github.com/arut/nginx-rtmp-module), [CRTMPD](http://www.rtmpd.com/),
+[RED5](http://www.red5.org/), [WOWZA](http://www.wowza.com/),
+[FMS/AMS](http://www.adobe.com/products/adobe-media-server-standard.html)
## AUTHORS
The PRIMARY AUTHORS are (and/or have been)(Authors ordered by first contribution):
@@ -73,7 +172,8 @@ About the primary AUTHORS:
And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
people who have submitted patches, reported bugs, added translations, helped
-answer newbie questions, and generally made SRS that much better: [AUTHORS.txt](https://github.com/winlinvip/simple-rtmp-server/blob/master/AUTHORS.txt)
+answer newbie questions, and generally made SRS that much better:
+[AUTHORS.txt](https://github.com/winlinvip/simple-rtmp-server/blob/master/AUTHORS.txt)
A big THANK YOU goes to:
* [chnvideo](chnvideo.com) co-founders([wiseyoung](mailto:wiseyoung@chnvideo.com), [trueice](mailto:trueice@chnvideo.com), [leijian](mailto:leijian@chnvideo.com)) for [big supports](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Product#bigthanks).
@@ -85,6 +185,38 @@ A big THANK YOU goes to:
* [FFMPEG](http://ffmpeg.org/) and [libx264](http://www.videolan.org/) group for SRS to use to transcode.
* Guido van Rossum for creating Python for api-server for SRS.
+## Mirrors
+
+Github: [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server),
+the GIT usage(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Git)
+)
+
+```bash
+git clone https://github.com/winlinvip/simple-rtmp-server.git
+```
+
+CSDN: [https://code.csdn.net/winlinvip/srs-csdn](https://code.csdn.net/winlinvip/srs-csdn) ,
+the GIT usage(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Git)
+)
+
+```bash
+git clone https://code.csdn.net/winlinvip/srs-csdn.git
+```
+
+OSChina: [http://git.oschina.net/winlinvip/srs.oschina](http://git.oschina.net/winlinvip/srs.oschina) ,
+the GIT usage(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Git)
+)
+
+```bash
+git clone https://git.oschina.net/winlinvip/srs.oschina.git
+```
+
## Usage
Step 1: get SRS
@@ -95,7 +227,10 @@ cd simple-rtmp-server/trunk
Step 2: build SRS,
-Requires Centos6.x/Ubuntu12 32/64bits, others see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build)
+Requires Centos6.x/Ubuntu12 32/64bits, others see Build(
+[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build),
+[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Build)
+).
./configure && make @@ -108,32 +243,72 @@ cd simple-rtmp-server/trunkSee also: -* [Usage: How to delivery RTMP?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRTMP) -* [Usage: How to delivery HLS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHLS) -* [Usage: How to delivery HLS for other codec?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleTranscode2HLS) -* [Usage: How to transode RTMP stream by SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleFFMPEG) -* [Usage: How to forward stream to other server?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleForward) -* [Usage: How to deploy low lantency application?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRealtime) -* [Usage: How to deploy SRS on ARM?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleARM) -* [Usage: How to ingest file/stream/device to SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleIngest) -* [Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHTTP) -* [Usage: How to show the demo of SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo) -* [Usage: Solution using SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Sample) -* [Usage: Why SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Product) +* Usage: How to delivery RTMP?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRTMP), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleRTMP) +) +* Usage: How to delivery HLS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHLS), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleHLS) +) +* Usage: How to delivery HLS for other codec?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleTranscode2HLS), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleTranscode2HLS) +) +* Usage: How to transode RTMP stream by SRS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleFFMPEG), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleFFMPEG) +) +* Usage: How to forward stream to other server?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleForward), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleForward) +) +* Usage: How to deploy low lantency application?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRealtime), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleRealtime) +) +* Usage: How to deploy SRS on ARM?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleARM), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleARM) +) +* Usage: How to ingest file/stream/device to SRS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleIngest), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleIngest) +) +* Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHTTP), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleHTTP) +) +* Usage: How to show the demo of SRS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_SampleDemo) +) +* Usage: Solution using SRS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Sample), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Sample) +) +* Usage: Why SRS?( +[CN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Product), +[EN](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Product) +) ## Wiki +SRS 1.0 wiki + Please select your language: -* [English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Home) -* [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home) +* [SRS 1.0 English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Home) +* [SRS 1.0 Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home) ## Donation -[http://winlinvip.github.io/srs.release/donation/index.html](http://winlinvip.github.io/srs.release/donation/index.html) -OR [aliyun mirror](http://www.ossrs.net/srs.release/donation/index.html) +Donation:
- +---------+ - +--+ stream1 +---------+ - | +---------+ | - +--------+ | +---------+ | +-------+ - | master +--fork->-+--+ streamN +---amf0--+>--+ cli + - +--------+ | +---------+ | +-------+ - | +-------------+ | - +--+ back source +-----+ - +-------------+ -Remark: -(1) master listen the global api port, for example, 33330 -(2) back source and stream processes listen at private api port, - for example, 33331, 33332, 33333 -(3) work processes(stream and back-source), report private api - port to master global api port. -(4) cli connect to master global api port, get all other private - api ports -(5) cli connect to each stream/back-source process to get api data, - cli analysis and summary the data, return to user. +(c) Maybe multiple thread is ok? By winlin.### Bandwidth Test Workflow