From 1bf6c32deb9c8cf3b8313ae55ab6c10a230e13bd Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 15 Oct 2014 15:08:37 +0800 Subject: [PATCH 01/26] I donot think QQ is neccessary. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index bc9b6d387..a4136d48f 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ SRS定位是运营级的互联网直播服务器集群,追求更好的概念 下载发布版(国内阿里云镜像): [Centos6-x86_64](http://www.ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.0.zip) 其他[more...](http://www.ossrs.net/srs.release/releases/)
-加入QQ群: [http://url.cn/WAHICw](http://url.cn/WAHICw) (Group: 212189142)
同类产品:[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) 获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/Git) From cb7f3a82c7528bb99a619c4318f62462ebf86d86 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 16 Oct 2014 08:56:54 +0800 Subject: [PATCH 02/26] remove qq url. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index a4136d48f..35e0c6f88 100755 --- a/README.md +++ b/README.md @@ -53,7 +53,6 @@ CSDN mirror: [https://code.csdn.net/winlinvip/srs-csdn](https://code.csdn.net/wi 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)
-TencentQQ: [http://url.cn/WAHICw](http://url.cn/WAHICw) (Group: 212189142)
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 From bd158ec838b4592afd809b9e969d466d8d70be8c Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 19 Oct 2014 11:33:56 +0800 Subject: [PATCH 03/26] hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. --- README.md | 1 + trunk/src/app/srs_app_avc_aac.cpp | 9 +++++++++ trunk/src/core/srs_core.hpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 35e0c6f88..32ca35ca6 100755 --- a/README.md +++ b/README.md @@ -202,6 +202,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. * v1.0, 2014-10-09, [1.0 beta(1.0.0)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta) released. 59316 lines. * v1.0, 2014-10-08, fix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), always reap ts whatever audio or video packet. 0.9.223. * v1.0, 2014-10-08, fix [#162](https://github.com/winlinvip/simple-rtmp-server/issues/162), failed if no epoll. 0.9.222. diff --git a/trunk/src/app/srs_app_avc_aac.cpp b/trunk/src/app/srs_app_avc_aac.cpp index 752a5d9a5..9682a0f7b 100644 --- a/trunk/src/app/srs_app_avc_aac.cpp +++ b/trunk/src/app/srs_app_avc_aac.cpp @@ -473,6 +473,15 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample } else { NALUnitLength = stream->read_1bytes(); } + + // maybe stream is AnnexB format. + // see: https://github.com/winlinvip/simple-rtmp-server/issues/183 + if (NALUnitLength < 0) { + ret = ERROR_HLS_DECODE_ERROR; + srs_error("maybe stream is AnnexB format. ret=%d", ret); + return ret; + } + // NALUnit if (!stream->require(NALUnitLength)) { ret = ERROR_HLS_DECODE_ERROR; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 96db79391..b08f4a661 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "1" #define VERSION_MINOR "0" -#define VERSION_REVISION "0" +#define VERSION_REVISION "1" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS" From 6da21364f6a09a9beb178d41e281e3dcfd994f13 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 24 Oct 2014 09:55:58 +0800 Subject: [PATCH 04/26] update readme, rename wiki/xxx to wiki/v1_xxx --- README.md | 176 +++++++++++------------ trunk/CMakeLists.txt | 52 +++---- trunk/auto/depends.sh | 2 +- trunk/auto/options.sh | 4 +- trunk/conf/demo.19350.conf | 2 +- trunk/conf/demo.conf | 2 +- trunk/conf/dvr.segment.conf | 2 +- trunk/conf/dvr.session.conf | 2 +- trunk/conf/edge.conf | 2 +- trunk/conf/edge.token.traverse.conf | 2 +- trunk/conf/ffmpeg.transcode.conf | 2 +- trunk/conf/forward.master.conf | 2 +- trunk/conf/forward.slave.conf | 2 +- trunk/conf/full.conf | 2 +- trunk/conf/hls.conf | 2 +- trunk/conf/http.hls.conf | 2 +- trunk/conf/ingest.conf | 2 +- trunk/conf/origin.conf | 2 +- trunk/conf/realtime.conf | 2 +- trunk/conf/rtmp.conf | 2 +- trunk/conf/transcode2hls.audio.only.conf | 2 +- trunk/configure | 32 ++--- trunk/research/arm/jmp.cpp | 2 +- trunk/research/arm/jmp_sp.cpp | 2 +- trunk/research/arm/test.cpp | 2 +- trunk/research/librtmp/Makefile | 2 +- trunk/scripts/install.sh | 2 +- trunk/scripts/package.sh | 2 +- trunk/scripts/run.sh | 2 +- trunk/src/app/srs_app_config.cpp | 2 +- trunk/src/app/srs_app_reload.hpp | 2 +- trunk/src/main/srs_main_server.cpp | 2 +- trunk/src/utest/srs_utest_config.cpp | 2 +- 33 files changed, 161 insertions(+), 161 deletions(-) diff --git a/README.md b/README.md index 32ca35ca6..6807f5820 100755 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@ SRS定位是运营级的互联网直播服务器集群,追求更好的概念 其他[more...](http://www.ossrs.net/srs.release/releases/)
同类产品:[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) -获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/Git) +获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_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) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/Git) +获得源码(国内CSDN镜像): [https://code.csdn.net/winlinvip/srs-csdn](https://code.csdn.net/winlinvip/srs-csdn) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Git) ```bash git clone https://code.csdn.net/winlinvip/srs-csdn.git @@ -25,7 +25,7 @@ git clone https://code.csdn.net/winlinvip/srs-csdn.git 报告问题(BugReport): [https://github.com/winlinvip/simple-rtmp-server/issues/new](https://github.com/winlinvip/simple-rtmp-server/issues/new)
中文资料(Wiki): [https://github.com/winlinvip/simple-rtmp-server/wiki](https://github.com/winlinvip/simple-rtmp-server/wiki)
使用步骤(Usage): [https://github.com/winlinvip/simple-rtmp-server#usage](#usage)
-公用机器(LiveShow): [https://github.com/winlinvip/simple-rtmp-server/wiki/LiveShow](https://github.com/winlinvip/simple-rtmp-server/wiki/LiveShow)
+公用机器(LiveShow): [https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LiveShow](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LiveShow)
捐款(Donation): [GitHub](http://winlinvip.github.io/srs.release/donation/index.html) 或 [阿里云镜像](http://www.ossrs.net/srs.release/donation/index.html) ,查看 [捐献墙(Donations)](https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt)
@@ -34,18 +34,18 @@ git clone https://code.csdn.net/winlinvip/srs-csdn.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/DeliveryRTMP)/[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS), -[high-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance), single/multiple(plan) processes, edge/origin live server, -[x86/x64/arm](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm), +SRS is a simple, [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP)/[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), +[high-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), single/multiple(plan) processes, edge/origin live server, +[x86/x64/arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_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/Build). +minimum run. see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build). -SRS supports [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/RtmpUrlVhost), -rtmp([encoder push](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryRTMP), client/[edge](https://github.com/winlinvip/simple-rtmp-server/wiki/Edge) pull), [ingester(srs pull)](https://github.com/winlinvip/simple-rtmp-server/wiki/Ingest), -[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS), [HLS audio only](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS#hlsaudioonly), [transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG), -[forward](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG), [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback), [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPApi), -[http server](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPServer), [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/DVR). +SRS supports [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost), +rtmp([encoder push](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP), client/[edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) pull), [ingester(srs pull)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest), +[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), [HLS audio only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS#hlsaudioonly), [transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), +[forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi), +[http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer), [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR). 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)
@@ -70,7 +70,7 @@ 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) 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/Product#bigthanks). +* [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_Product#bigthanks). * Genes amd Mabbott for creating [st](https://github.com/winlinvip/state-threads)([state-threads](http://sourceforge.net/projects/state-threads/)). * Michael Talyanksy for introducing us to use st. * Roman Arutyunyan for creating [nginx-rtmp](https://github.com/arut/nginx-rtmp-module) for SRS to refer to. @@ -89,7 +89,7 @@ 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/Build) +Requires Centos6.x/Ubuntu12 32/64bits, others see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build)
 ./configure && make
@@ -102,24 +102,24 @@ cd simple-rtmp-server/trunk
 
See also: -* [Usage: How to delivery RTMP?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleRTMP) -* [Usage: How to delivery HLS?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHLS) -* [Usage: How to delivery HLS for other codec?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleTranscode2HLS) -* [Usage: How to transode RTMP stream by SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleFFMPEG) -* [Usage: How to forward stream to other server?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleForward) -* [Usage: How to deploy low lantency application?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleRealtime) -* [Usage: How to deploy SRS on ARM?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleARM) -* [Usage: How to ingest file/stream/device to SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleIngest) -* [Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHTTP) -* [Usage: How to show the demo of SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo) -* [Usage: Solution using SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/Sample) -* [Usage: Why SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/Product) +* [Usage: How to delivery RTMP?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRTMP) +* [Usage: How to delivery HLS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS) +* [Usage: How to delivery HLS for other codec?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleTranscode2HLS) +* [Usage: How to transode RTMP stream by SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleFFMPEG) +* [Usage: How to forward stream to other server?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward) +* [Usage: How to deploy low lantency application?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRealtime) +* [Usage: How to deploy SRS on ARM?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleARM) +* [Usage: How to ingest file/stream/device to SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest) +* [Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHTTP) +* [Usage: How to show the demo of SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo) +* [Usage: Solution using SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Sample) +* [Usage: Why SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Product) ## Wiki Please select your language: -* [English](https://github.com/winlinvip/simple-rtmp-server/wiki/ENHome) -* [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/CNHome) +* [English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_ENHome) +* [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CNHome) ## Donation @@ -136,40 +136,40 @@ Supported operating systems and hardware: ## Summary 1. 简洁稳定:Simple, also stable enough. -1. 高性能:[High-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance): single-thread, async socket, event/st-thread driven. -1. 高并发:[High-concurrency](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance), 1800 connections(500kbps), 900Mbps, CPU 90.2%, 41MB -1. RTMP源站:Support [RTMP Origin Server](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryRTMP). -1. CDN边缘(上下行加速):Support [RTMP Edge Server](https://github.com/winlinvip/simple-rtmp-server/wiki/Edge) for CDN, push/pull stream from any RTMP server +1. 高性能:[High-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance): single-thread, async socket, event/st-thread driven. +1. 高并发:[High-concurrency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), 1800 connections(500kbps), 900Mbps, CPU 90.2%, 41MB +1. RTMP源站:Support [RTMP Origin Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP). +1. CDN边缘(上下行加速):Support [RTMP Edge Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) for CDN, push/pull stream from any RTMP server 1. 单进程(无多进程):Support single process; no multiple processes. -1. 支持Vhost:Support [Vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/RtmpUrlVhost), support \_\_defaultVhost\_\_. -1. 直播(无点播):Support [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryRTMP) live streaming; no vod streaming. -1. 苹果HLS:Support Apple [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS) live streaming. -1. 支持纯音频HLS:Support [HLS audio-only](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS#hlsaudioonly) live streaming. -1. 支持Reload:Support [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/Reload) config to enable changes. -1. 支持GopCache:Support [cache last gop](https://github.com/winlinvip/simple-rtmp-server/wiki/LowLatency#gop-cache) for flash player to fast startup. +1. 支持Vhost:Support [Vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost), support \_\_defaultVhost\_\_. +1. 直播(无点播):Support [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP) live streaming; no vod streaming. +1. 苹果HLS:Support Apple [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS) live streaming. +1. 支持纯音频HLS:Support [HLS audio-only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS#hlsaudioonly) live streaming. +1. 支持Reload:Support [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) config to enable changes. +1. 支持GopCache:Support [cache last gop](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LowLatency#gop-cache) for flash player to fast startup. 1. 侦听多端口:Support listen at multiple ports. 1. 长时间推流:Support long time(>4.6hours) publish/play. -1. 转发流:Support [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/Forward) in master-slave mode. -1. 流转码:Support live stream [Transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG) by ffmpeg. -1. 支持FFMPEG滤镜:Support [ffmpeg](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG) filters(logo/overlay/crop), x264 params, copy/vn/an. -1. 只转码音频:Support audio [transcode](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG) only, speex/mp3 to aac -1. 支持HTTP回调:Support [http callback api hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback)(for authentication and injection). -1. 带宽测速:Support [bandwidth test](https://github.com/winlinvip/simple-rtmp-server/wiki/BandwidthTestTool) api and flash client. -1. 演示页面:Player, publisher(encoder), and [demo pages(jquery+bootstrap)](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo). -1. 视频会议演示:[Demo](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo) video meeting or chat(SRS+cherrypy+jquery+bootstrap). -1. 中文Wiki:Full documents in [wiki](https://github.com/winlinvip/simple-rtmp-server/wiki/CNHome), in Chineses. -1. 客户端库:Support RTMP(play-publish) library: [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp) -1. 支持ARM平台:Support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm)) with rtmp/ssl/hls/librtmp. -1. 支持Init.d脚本:Support [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/LinuxService) and packge script, log to file. -1. 支持ATC:Support [RTMP ATC](https://github.com/winlinvip/simple-rtmp-server/wiki/RTMP-ATC) for HLS/HDS to support backup(failover) -1. 支持HTTP-RESTful-API:Support [HTTP RESTful management api](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPApi). -1. 采集流:Support [Ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/Ingest) FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg). -1. 支持录制:Support [DVR](https://github.com/winlinvip/simple-rtmp-server/wiki/DVR), record live to flv file for vod. -1. 可追溯日志:Support [tracable log, session based log](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLog). -1. 支持FMS-Token穿越:Support DRM [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/DRM#tokentraverse) for fms origin authenticate. +1. 转发流:Support [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) in master-slave mode. +1. 流转码:Support live stream [Transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) by ffmpeg. +1. 支持FFMPEG滤镜:Support [ffmpeg](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) filters(logo/overlay/crop), x264 params, copy/vn/an. +1. 只转码音频:Support audio [transcode](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) only, speex/mp3 to aac +1. 支持HTTP回调:Support [http callback api hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback)(for authentication and injection). +1. 带宽测速:Support [bandwidth test](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_BandwidthTestTool) api and flash client. +1. 演示页面:Player, publisher(encoder), and [demo pages(jquery+bootstrap)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo). +1. 视频会议演示:[Demo](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo) video meeting or chat(SRS+cherrypy+jquery+bootstrap). +1. 中文Wiki:Full documents in [wiki](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CNHome), in Chineses. +1. 客户端库:Support RTMP(play-publish) library: [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp) +1. 支持ARM平台:Support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. +1. 支持Init.d脚本:Support [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService) and packge script, log to file. +1. 支持ATC:Support [RTMP ATC](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMP-ATC) for HLS/HDS to support backup(failover) +1. 支持HTTP-RESTful-API:Support [HTTP RESTful management api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi). +1. 采集流:Support [Ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest) FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg). +1. 支持录制:Support [DVR](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR), record live to flv file for vod. +1. 可追溯日志:Support [tracable log, session based log](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog). +1. 支持FMS-Token穿越:Support DRM [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM#tokentraverse) for fms origin authenticate. 1. 全面的Utest:Support system full utest on gtest. -1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHTTP) for hls(live/vod) -1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/FlvVodStream). +1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHTTP) for hls(live/vod) +1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FlvVodStream). 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). 1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/winlinvip/simple-rtmp-server/issues/92). 1. [no-plan] Support multiple processes, for both origin and edge @@ -188,17 +188,17 @@ Supported operating systems and hardware: * 2014-06-27, [Release v1.0-mainline5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline5), refine perf 3k+ clients, edge token traverse, [srs monitor](http://ossrs.net:1977), 30days online. 41573 lines.
* 2014-05-28, [Release v1.0-mainline4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline4), support heartbeat, tracable log, fix mem leak and bugs. 39200 lines.
* 2014-05-18, [Release v1.0-mainline3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline3), support mips, fms origin, json(http-api). 37594 lines.
-* 2014-04-28, [Release v1.0-mainline2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline2), support [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/DVR), android, [edge](https://github.com/winlinvip/simple-rtmp-server/wiki/Edge). 35255 lines.
-* 2014-04-07, [Release v1.0-mainline](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline), support [arm](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm), [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/LinuxService), http [server](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPServer)/[api](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPApi), [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleIngest). 30000 lines.
-* 2013-12-25, [Release v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9), support bandwidth test, player/encoder/chat [demos](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo). 20926 lines.
-* 2013-12-08, [Release v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8), support [http hooks callback](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback), update [st_load](https://github.com/winlinvip/st-load). 19186 lines.
-* 2013-12-03, [Release v0.7](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.7), support [live stream transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG). 17605 lines.
-* 2013-11-29, [Release v0.6](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.6), support [forward](https://github.com/winlinvip/simple-rtmp-server/wiki/Forward) stream to origin/edge. 16094 lines.
-* 2013-11-26, [Release v0.5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.5), support [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS), fragment and window. 14449 lines.
-* 2013-11-10, [Release v0.4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.4), support [reload](https://github.com/winlinvip/simple-rtmp-server/wiki/Reload) config, pause, longtime publish/play. 12500 lines.
-* 2013-11-04, [Release v0.3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.3), support [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/RtmpUrlVhost), refer, gop cache, listen multiple ports. 11773 lines.
-* 2013-10-25, [Release v0.2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.2), support [rtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/RTMPHandshake) flash publish, h264, time jitter correct. 10125 lines.
-* 2013-10-23, [Release v0.1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.1), support [rtmp FMLE/FFMPEG publish](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryRTMP), vp6. 8287 lines.
+* 2014-04-28, [Release v1.0-mainline2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline2), support [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR), android, [edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge). 35255 lines.
+* 2014-04-07, [Release v1.0-mainline](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline), support [arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm), [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService), http [server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer)/[api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi), [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest). 30000 lines.
+* 2013-12-25, [Release v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9), support bandwidth test, player/encoder/chat [demos](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo). 20926 lines.
+* 2013-12-08, [Release v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8), support [http hooks callback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), update [st_load](https://github.com/winlinvip/st-load). 19186 lines.
+* 2013-12-03, [Release v0.7](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.7), support [live stream transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG). 17605 lines.
+* 2013-11-29, [Release v0.6](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.6), support [forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) stream to origin/edge. 16094 lines.
+* 2013-11-26, [Release v0.5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.5), support [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), fragment and window. 14449 lines.
+* 2013-11-10, [Release v0.4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.4), support [reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) config, pause, longtime publish/play. 12500 lines.
+* 2013-11-04, [Release v0.3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.3), support [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost), refer, gop cache, listen multiple ports. 11773 lines.
+* 2013-10-25, [Release v0.2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.2), support [rtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMPHandshake) flash publish, h264, time jitter correct. 10125 lines.
+* 2013-10-23, [Release v0.1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.1), support [rtmp FMLE/FFMPEG publish](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP), vp6. 8287 lines.
* 2013-10-17, Created.
## History @@ -246,8 +246,8 @@ Supported operating systems and hardware: * v1.0, 2014-06-27, SRS online 30days with RTMP/HLS. * v1.0, 2014-06-25, fix [#108](https://github.com/winlinvip/simple-rtmp-server/issues/108), support config time jitter for encoder non-monotonical stream. 0.9.133 * v1.0, 2014-06-23, support report summaries in heartbeat. 0.9.132 -* v1.0, 2014-06-22, performance refine, support [3k+](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance#%E6%80%A7%E8%83%BD%E4%BE%8B%E8%A1%8C%E6%8A%A5%E5%91%8A4k) connections(270kbps). 0.9.130 -* v1.0, 2014-06-21, support edge [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/DRM#tokentraverse), fix [#104](https://github.com/winlinvip/simple-rtmp-server/issues/104). 0.9.129 +* v1.0, 2014-06-22, performance refine, support [3k+](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance#%E6%80%A7%E8%83%BD%E4%BE%8B%E8%A1%8C%E6%8A%A5%E5%91%8A4k) connections(270kbps). 0.9.130 +* v1.0, 2014-06-21, support edge [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM#tokentraverse), fix [#104](https://github.com/winlinvip/simple-rtmp-server/issues/104). 0.9.129 * v1.0, 2014-06-19, add connections count to api summaries. 0.9.127 * v1.0, 2014-06-19, add srs bytes and kbps to api summaries. 0.9.126 * v1.0, 2014-06-18, add network bytes to api summaries. 0.9.125 @@ -289,11 +289,11 @@ Supported operating systems and hardware: * v1.0, 2014-04-11, add speex1.2 to transcode flash encoder stream. 0.9.58 * v1.0, 2014-04-10, support reload ingesters(add/remov/update). 0.9.57 * v1.0, 2014-04-07, [1.0 mainline(0.9.55)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline) released. 30000 lines. -* v1.0, 2014-04-07, support [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/SampleIngest) file/stream/device. -* v1.0, 2014-04-05, support [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPApi) and [http server](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPServer). +* v1.0, 2014-04-07, support [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest) file/stream/device. +* v1.0, 2014-04-05, support [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi) and [http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer). * v1.0, 2014-04-03, implements http framework and api/v1/version. * v1.0, 2014-03-30, fix bug for st detecting epoll failed, force st to use epoll. -* v1.0, 2014-03-29, add wiki [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/RaspberryPi). +* v1.0, 2014-03-29, add wiki [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RaspberryPi). * v1.0, 2014-03-29, add release binary package for raspberry-pi. * v1.0, 2014-03-26, support RTMP ATC for HLS/HDS to support backup(failover). * v1.0, 2014-03-23, support daemon, default start in daemon. @@ -304,20 +304,20 @@ Supported operating systems and hardware: * v1.0, 2014-03-19, add vn/an for FFMPEG to drop video/audio for radio stream. * v1.0, 2014-03-19, refine handshake, client support complex handshake, add utest. * v1.0, 2014-03-16, fix bug on arm of st, the sp change from 20 to 8, for respberry-pi, @see [commit](https://github.com/winlinvip/simple-rtmp-server/commit/5a4373d4835758188b9a1f03005cea0b6ddc62aa) -* v1.0, 2014-03-16, support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm)) with rtmp/ssl/hls/librtmp. +* v1.0, 2014-03-16, support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. * v1.0, 2014-03-12, finish utest for amf0 codec. * v1.0, 2014-03-06, add gperftools for mem leak detect, mem/cpu profile. * v1.0, 2014-03-04, add gest framework for utest, build success. -* v1.0, 2014-03-02, add wiki [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp), [SRS for arm](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm), [product](https://github.com/winlinvip/simple-rtmp-server/wiki/Product) +* v1.0, 2014-03-02, add wiki [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp), [SRS for arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm), [product](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Product) * v1.0, 2014-03-02, srs-librtmp, client publish/play library like librtmp. * v1.0, 2014-03-01, modularity, extract core/kernel/rtmp/app/main module. * v1.0, 2014-02-28, support arm build(SRS/ST), add ssl to 3rdparty package. -* v1.0, 2014-02-28, add wiki [BuildArm](https://github.com/winlinvip/simple-rtmp-server/wiki/Build), [FFMPEG](https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG), [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/Reload) -* v1.0, 2014-02-27, add wiki [LowLatency](https://github.com/winlinvip/simple-rtmp-server/wiki/LowLatency), [HTTPCallback](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback), [ServerSideScript](https://github.com/winlinvip/simple-rtmp-server/wiki/ServerSideScript), [IDE](https://github.com/winlinvip/simple-rtmp-server/wiki/IDE) -* v1.0, 2014-01-19, add wiki [DeliveryHLS](https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS) -* v1.0, 2014-01-12, add wiki [HowToAskQuestion](https://github.com/winlinvip/simple-rtmp-server/wiki/HowToAskQuestion), [RtmpUrlVhost](https://github.com/winlinvip/simple-rtmp-server/wiki/RtmpUrlVhost) +* v1.0, 2014-02-28, add wiki [BuildArm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build), [FFMPEG](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) +* v1.0, 2014-02-27, add wiki [LowLatency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LowLatency), [HTTPCallback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), [ServerSideScript](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_ServerSideScript), [IDE](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE) +* v1.0, 2014-01-19, add wiki [DeliveryHLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS) +* v1.0, 2014-01-12, add wiki [HowToAskQuestion](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HowToAskQuestion), [RtmpUrlVhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost) * v1.0, 2014-01-11, fix jw/flower player pause bug, which send closeStream actually. -* v1.0, 2014-01-05, add wiki [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/Build), [Performance](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance), [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/Forward) +* v1.0, 2014-01-05, add wiki [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build), [Performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) * v1.0, 2014-01-01, change listen(512), chunk-size(60000), to improve performance. * v1.0, 2013-12-27, merge from wenjie, the bandwidth test feature. * v0.9, 2013-12-25, [v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9) released. 20926 lines. @@ -335,7 +335,7 @@ Supported operating systems and hardware: * v0.9, 2013-12-14, refine the thread model for the retry threads. * v0.9, 2013-12-10, auto install depends tools/libs on centos/ubuntu. * v0.8, 2013-12-08, [v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8) released. 19186 lines. -* v0.8, 2013-12-08, support [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback): on_connect/close/publish/unpublish/play/stop. +* v0.8, 2013-12-08, support [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback): on_connect/close/publish/unpublish/play/stop. * v0.8, 2013-12-08, support multiple http hooks for a event. * v0.8, 2013-12-07, support http callback hooks, on_connect. * v0.8, 2013-12-07, support network based cli and json result, add CherryPy 3.2.4. @@ -425,8 +425,8 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw 32 17 33 0 0 18| 0 410B| 169M 169M| 0 0 |4518 3788 -* See also: [Performance for x86/x64 Test Guide](https://github.com/winlinvip/simple-rtmp-server/wiki/Performance) -* See also: [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/RaspberryPi) +* See also: [Performance for x86/x64 Test Guide](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance) +* See also: [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RaspberryPi) ## Architecture @@ -500,7 +500,7 @@ Remark: to ingest any input to rtmp, push to SRS. -### [HDS/HLS origin backup](https://github.com/winlinvip/simple-rtmp-server/wiki/RTMP-ATC) +### [HDS/HLS origin backup](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMP-ATC)
                         +----------+        +----------+
@@ -512,10 +512,10 @@ to ingest any input to rtmp, push to SRS.
                  RTMP   +----------+ RTMP   +----------+
 
-### [RTMP cluster(origin/edge) Architecture](https://github.com/winlinvip/simple-rtmp-server/wiki/Edge) +### [RTMP cluster(origin/edge) Architecture](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) -Remark: cluster over edge, see [Edge](https://github.com/winlinvip/simple-rtmp-server/wiki/Edge) -Remark: cluster over forward, see [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/Forward) +Remark: cluster over edge, see [Edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) +Remark: cluster over forward, see [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward)
 +---------+       +-----------------+     +-----------------------+ 
diff --git a/trunk/CMakeLists.txt b/trunk/CMakeLists.txt
index a8545c557..fa80bcd47 100644
--- a/trunk/CMakeLists.txt
+++ b/trunk/CMakeLists.txt
@@ -21,31 +21,31 @@ IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/objs/st/libst.a)
     EXEC_PROGRAM(./configure)
 ENDIF(NOT EXISTS ${PROJECT_SOURCE_DIR}/objs/st/libst.a)
 
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
 MESSAGE(STATUS "use ./configure && make, @see https://github.com/winlinvip/simple-rtmp-server#usage")
 
diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh
index c145462a2..94e659cc7 100755
--- a/trunk/auto/depends.sh
+++ b/trunk/auto/depends.sh
@@ -311,7 +311,7 @@ if [ $SRS_EMBEDED_CPU = YES ]; then
         echo "st-1.9t for arm is ok.";
     else
         # TODO: FIXME: patch the bug.
-        # patch st for arm, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm#st-arm-bug-fix
+        # patch st for arm, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm#st-arm-bug-fix
         echo "build st-1.9t for arm"; 
         (
             rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && 
diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh
index 6b0f5f04d..024b22c34 100644
--- a/trunk/auto/options.sh
+++ b/trunk/auto/options.sh
@@ -73,7 +73,7 @@ SRS_MIPS_UBUNTU12=NO
 SRS_DEV=NO
 # dev, open main server feature for dev, no utest/research/librtmp
 SRS_FAST_DEV=NO
-# demo, for the demo of srs, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo
+# demo, for the demo of srs, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
 SRS_DEMO=NO
 # raspberry-pi, open hls/ssl/static
 SRS_PI=NO
@@ -172,7 +172,7 @@ Presets:
   --disable-all             disable all features, only support vp6 RTMP.
   --dev                     for dev, open all features, no nginx/gperf/gprof/arm.
   --fast-dev                for dev fast compile, the RTMP server, without librtmp/utest/research.
-  --demo                    for srs demo, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo
+  --demo                    for srs demo, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
   --full                    enable all features, no gperf/gprof/arm.
   
 Conflicts:
diff --git a/trunk/conf/demo.19350.conf b/trunk/conf/demo.19350.conf
index f5b37a6c1..e65001fe4 100644
--- a/trunk/conf/demo.19350.conf
+++ b/trunk/conf/demo.19350.conf
@@ -1,5 +1,5 @@
 # the config for srs demo
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/demo.conf b/trunk/conf/demo.conf
index 4396d4446..bf5468bd8 100644
--- a/trunk/conf/demo.conf
+++ b/trunk/conf/demo.conf
@@ -1,5 +1,5 @@
 # the config for srs demo
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/dvr.segment.conf b/trunk/conf/dvr.segment.conf
index d42029a43..865dc1ed8 100644
--- a/trunk/conf/dvr.segment.conf
+++ b/trunk/conf/dvr.segment.conf
@@ -1,5 +1,5 @@
 # the config for srs to dvr in segment mode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/DVR
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/dvr.session.conf b/trunk/conf/dvr.session.conf
index 265f0f1b7..c93059f46 100644
--- a/trunk/conf/dvr.session.conf
+++ b/trunk/conf/dvr.session.conf
@@ -1,5 +1,5 @@
 # the config for srs to dvr in session mode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/DVR
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/edge.conf b/trunk/conf/edge.conf
index 407d9ff85..c90a3ee5c 100644
--- a/trunk/conf/edge.conf
+++ b/trunk/conf/edge.conf
@@ -1,5 +1,5 @@
 # the config for srs origin-edge cluster
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/Edge
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/edge.token.traverse.conf b/trunk/conf/edge.token.traverse.conf
index bd6bc7513..c92ff61f4 100644
--- a/trunk/conf/edge.token.traverse.conf
+++ b/trunk/conf/edge.token.traverse.conf
@@ -1,5 +1,5 @@
 # the config for srs for token traverse authentication
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/DRM
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM
 # @see full.conf for detail config.
 
 listen              1935
diff --git a/trunk/conf/ffmpeg.transcode.conf b/trunk/conf/ffmpeg.transcode.conf
index 917934341..63a0a0975 100644
--- a/trunk/conf/ffmpeg.transcode.conf
+++ b/trunk/conf/ffmpeg.transcode.conf
@@ -1,5 +1,5 @@
 # the config for srs use ffmpeg to transcode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleFFMPEG
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleFFMPEG
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/forward.master.conf b/trunk/conf/forward.master.conf
index b0a6f51f2..9480e52de 100644
--- a/trunk/conf/forward.master.conf
+++ b/trunk/conf/forward.master.conf
@@ -1,5 +1,5 @@
 # the config for srs to forward
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleForward
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/forward.slave.conf b/trunk/conf/forward.slave.conf
index 1ff57db46..52649fd15 100644
--- a/trunk/conf/forward.slave.conf
+++ b/trunk/conf/forward.slave.conf
@@ -1,5 +1,5 @@
 # the config for srs to forward
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleForward
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf
index 09d046395..dbb9586da 100644
--- a/trunk/conf/full.conf
+++ b/trunk/conf/full.conf
@@ -406,7 +406,7 @@ vhost debug.srs.com {
     # it's strongly recommend to open the debug_srs_upnode,
     # when connect to upnode, it will take the debug info, 
     # for example, the id, source id, pid.
-    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLog
+    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog
     # default: on
     debug_srs_upnode    on;
 }
diff --git a/trunk/conf/hls.conf b/trunk/conf/hls.conf
index 9e4981548..9044956c2 100644
--- a/trunk/conf/hls.conf
+++ b/trunk/conf/hls.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/http.hls.conf b/trunk/conf/http.hls.conf
index 468a13a45..27dbfb44a 100644
--- a/trunk/conf/http.hls.conf
+++ b/trunk/conf/http.hls.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/ingest.conf b/trunk/conf/ingest.conf
index 651fbec8d..d82922fde 100644
--- a/trunk/conf/ingest.conf
+++ b/trunk/conf/ingest.conf
@@ -1,5 +1,5 @@
 # use ffmpeg to ingest file/stream/device to SRS
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleIngest
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/origin.conf b/trunk/conf/origin.conf
index da9296a2e..439e9071a 100644
--- a/trunk/conf/origin.conf
+++ b/trunk/conf/origin.conf
@@ -1,5 +1,5 @@
 # the config for srs origin-edge cluster
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/Edge
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/realtime.conf b/trunk/conf/realtime.conf
index b440762a5..3adf218d1 100644
--- a/trunk/conf/realtime.conf
+++ b/trunk/conf/realtime.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery realtime RTMP stream
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleRealtime
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRealtime
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/rtmp.conf b/trunk/conf/rtmp.conf
index c43c58386..96f232d29 100644
--- a/trunk/conf/rtmp.conf
+++ b/trunk/conf/rtmp.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery RTMP
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleRTMP
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRTMP
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/transcode2hls.audio.only.conf b/trunk/conf/transcode2hls.audio.only.conf
index b096ef2b1..e5fd8318b 100644
--- a/trunk/conf/transcode2hls.audio.only.conf
+++ b/trunk/conf/transcode2hls.audio.only.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/configure b/trunk/configure
index 71cb05cea..a985b7c05 100755
--- a/trunk/configure
+++ b/trunk/configure
@@ -134,7 +134,7 @@ BLACK="\\${BLACK}"
 
 echo -e "\${GREEN}build summary:\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsGperfSummaryColor}gperf @see: https://github.com/winlinvip/simple-rtmp-server/wiki/GPERF\${BLACK}"
+echo -e "     |${SrsGperfSummaryColor}gperf @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_GPERF\${BLACK}"
 echo -e "     |     ${SrsGperfMCSummaryColor}gmc @see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html\${BLACK}"
 echo -e "     |     ${SrsGperfMCSummaryColor}gmc: gperf memory check\${BLACK}"
 echo -e "     |             ${SrsGperfMCSummaryColor}env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./objs/srs -c conf/console.conf # start gmc\${BLACK}"
@@ -150,7 +150,7 @@ echo -e "     |             ${SrsGperfCPSummaryColor}rm -f gperf.srs.gcp*; ./obj
 echo -e "     |             ${SrsGperfCPSummaryColor}killall -2 srs # or CTRL+C to stop gcp\${BLACK}"
 echo -e "     |             ${SrsGperfCPSummaryColor}./objs/pprof --text objs/srs gperf.srs.gcp* # to analysis cpu profile\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsGprofSummaryColor}gprof @see: https://github.com/winlinvip/simple-rtmp-server/wiki/GPROF\${BLACK}"
+echo -e "     |${SrsGprofSummaryColor}gprof @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_GPROF\${BLACK}"
 echo -e "     |${SrsGprofSummaryColor}gprof: GNU profile tool, @see: http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html\${BLACK}"
 echo -e "     |     ${SrsGprofSummaryColor}rm -f gmon.out; ./objs/srs -c conf/console.conf # start gprof\${BLACK}"
 echo -e "     |     ${SrsGprofSummaryColor}killall -2 srs # or CTRL+C to stop gprof\${BLACK}"
@@ -160,7 +160,7 @@ echo -e "     |${SrsResearchSummaryColor}research: ./objs/research, api server,
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
 echo -e "     |${SrsUtestSummaryColor}utest: ./objs/srs_utest, the utest for srs\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp\${BLACK}"
+echo -e "     |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp\${BLACK}"
 echo -e "     |${SrsLibrtmpSummaryColor}librtmp: ./objs/include, ./objs/lib, the srs-librtmp library\${BLACK}"
 echo -e "     |     ${SrsLibrtmpSummaryColor}simple handshake: publish/play stream with simple handshake to server\${BLACK}"
 echo -e "     |     ${SrsLibrtmpSSLSummaryColor}complex handshake: it's not required for client, recommend disable it\${BLACK}"
@@ -171,30 +171,30 @@ echo -e "     |     ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/
 echo -e "     |     ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_bandwidth_check\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
 echo -e "     |\${GREEN}server: ./objs/srs -c conf/srs.conf, start the srs server\${BLACK}"
-echo -e "     |     ${SrsHlsSummaryColor}hls @see: https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS\${BLACK}"
+echo -e "     |     ${SrsHlsSummaryColor}hls @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS\${BLACK}"
 echo -e "     |     ${SrsHlsSummaryColor}hls: generate m3u8 and ts from rtmp stream\${BLACK}"
-echo -e "     |     ${SrsDvrSummaryColor}dvr @see: https://github.com/winlinvip/simple-rtmp-server/wiki/DVR\${BLACK}"
+echo -e "     |     ${SrsDvrSummaryColor}dvr @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR\${BLACK}"
 echo -e "     |     ${SrsDvrSummaryColor}dvr: record RTMP stream to flv files.\${BLACK}"
-echo -e "     |     ${SrsNginxSummaryColor}nginx @see: https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS\${BLACK}"
+echo -e "     |     ${SrsNginxSummaryColor}nginx @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS\${BLACK}"
 echo -e "     |     ${SrsNginxSummaryColor}nginx: delivery HLS stream by nginx\${BLACK}"
 echo -e "     |     ${SrsNginxSummaryColor}nginx: sudo ./objs/nginx/sbin/nginx\${BLACK}"
-echo -e "     |     ${SrsSslSummaryColor}ssl @see: https://github.com/winlinvip/simple-rtmp-server/wiki/RTMPHandshake\${BLACK}"
+echo -e "     |     ${SrsSslSummaryColor}ssl @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMPHandshake\${BLACK}"
 echo -e "     |     ${SrsSslSummaryColor}ssl: support RTMP complex handshake for client required, for instance, flash\${BLACK}"
-echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg @see: https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG\${BLACK}"
+echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG\${BLACK}"
 echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg: transcode, mux, ingest tool\${BLACK}"
 echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg: ./objs/ffmpeg/bin/ffmpeg\${BLACK}"
-echo -e "     |     ${SrsTranscodeSummaryColor}transcode @see: https://github.com/winlinvip/simple-rtmp-server/wiki/FFMPEG\${BLACK}"
+echo -e "     |     ${SrsTranscodeSummaryColor}transcode @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG\${BLACK}"
 echo -e "     |     ${SrsTranscodeSummaryColor}transcode: support transcoding RTMP stream\${BLACK}"
-echo -e "     |     ${SrsIngestSummaryColor}ingest @see: https://github.com/winlinvip/simple-rtmp-server/wiki/Ingest\${BLACK}"
+echo -e "     |     ${SrsIngestSummaryColor}ingest @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest\${BLACK}"
 echo -e "     |     ${SrsIngestSummaryColor}ingest: support ingest file/stream/device then push to SRS by RTMP stream\${BLACK}"
-echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback @see: https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPCallback\${BLACK}"
+echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback\${BLACK}"
 echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback: support http callback for authentication and event injection\${BLACK}"
-echo -e "     |     ${SrsHttpServerSummaryColor}http-server @see: https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPServer\${BLACK}"
+echo -e "     |     ${SrsHttpServerSummaryColor}http-server @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer\${BLACK}"
 echo -e "     |     ${SrsHttpServerSummaryColor}http-server: support http server to delivery http stream\${BLACK}"
-echo -e "     |     ${SrsHttpApiSummaryColor}http-api @see: https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPApi\${BLACK}"
+echo -e "     |     ${SrsHttpApiSummaryColor}http-api @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi\${BLACK}"
 echo -e "     |     ${SrsHttpApiSummaryColor}http-api: support http api to manage server\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "\${GREEN}binaries @see: https://github.com/winlinvip/simple-rtmp-server/wiki/Build\${BLACK}"
+echo -e "\${GREEN}binaries @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build\${BLACK}"
 
 echo "you can:"
 echo "      ./objs/srs -c conf/srs.conf"
@@ -286,7 +286,7 @@ install-api: install
 	@echo "     sudo ln -sf \$(SRS_PREFIX)/etc/init.d/srs-api /etc/init.d/srs-api"
 	@echo "     /etc/init.d/srs-api start"
 	@echo "     http://\$(shell bash auto/local_ip.sh):8085"
-	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/LinuxService"
+	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
 
 install:
 	@echo "mkdir \$(__REAL_INSTALL)"
@@ -308,7 +308,7 @@ install:
 	@echo "srs installed, to link and start srs:"
 	@echo "     sudo ln -sf \$(SRS_PREFIX)/etc/init.d/srs /etc/init.d/srs"
 	@echo "     /etc/init.d/srs start"
-	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/LinuxService"
+	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
 
 END
 
diff --git a/trunk/research/arm/jmp.cpp b/trunk/research/arm/jmp.cpp
index d8f4d4545..2b2a59913 100644
--- a/trunk/research/arm/jmp.cpp
+++ b/trunk/research/arm/jmp.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
  arm-linux-gnueabi-g++ -o jmp jmp.cpp -static
  arm-linux-gnueabi-strip jmp
 */
diff --git a/trunk/research/arm/jmp_sp.cpp b/trunk/research/arm/jmp_sp.cpp
index fa98b46f5..24ea4bc9b 100644
--- a/trunk/research/arm/jmp_sp.cpp
+++ b/trunk/research/arm/jmp_sp.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
  arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
  arm-linux-gnueabi-strip jmp_sp
 */
diff --git a/trunk/research/arm/test.cpp b/trunk/research/arm/test.cpp
index d21033be8..970d04283 100644
--- a/trunk/research/arm/test.cpp
+++ b/trunk/research/arm/test.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
  arm-linux-gnueabi-g++ -o test test.cpp -static
  arm-linux-gnueabi-strip test
 */
diff --git a/trunk/research/librtmp/Makefile b/trunk/research/librtmp/Makefile
index aeac262e5..af2b477cb 100755
--- a/trunk/research/librtmp/Makefile
+++ b/trunk/research/librtmp/Makefile
@@ -32,7 +32,7 @@ help:
 	@echo "Remark: srs Makefile will auto invoke this by --with/without-ssl, "
 	@echo "     that is, if user specified ssl(by --with-ssl), srs will make this by 'make ssl'"
 	@echo "     that is, if user not use ssl(by --without-ssl), use 'make nossl'"
-	@echo "     see: https://github.com/winlinvip/simple-rtmp-server/wiki/Build"
+	@echo "     see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_v1_Build"
 	@echo "Remark: before make this sample, user must make the srs, with/without ssl"
     
 clean:
diff --git a/trunk/scripts/install.sh b/trunk/scripts/install.sh
index 289475cfd..9f935e5dd 100755
--- a/trunk/scripts/install.sh
+++ b/trunk/scripts/install.sh
@@ -108,7 +108,7 @@ else
 fi
 
 echo ""
-echo "see: https://github.com/winlinvip/simple-rtmp-server/wiki/LinuxService"
+echo "see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
 echo "install success, you can:"
 echo -e "${GREEN}      sudo /etc/init.d/srs start${BLACK}"
 echo "srs root is ${INSTALL}"
diff --git a/trunk/scripts/package.sh b/trunk/scripts/package.sh
index 6141cb707..2a6072bf3 100755
--- a/trunk/scripts/package.sh
+++ b/trunk/scripts/package.sh
@@ -108,7 +108,7 @@ fi
 ok_msg "real os is ${os_name}-${os_major_version} ${os_release} ${os_machine}"
 
 # build srs
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/Build
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build
 ok_msg "start build srs"
 if [ $ARM = YES ]; then
     (
diff --git a/trunk/scripts/run.sh b/trunk/scripts/run.sh
index b54a378bf..2f0082e3b 100755
--- a/trunk/scripts/run.sh
+++ b/trunk/scripts/run.sh
@@ -51,4 +51,4 @@ echo -e "${GREEN}请在hosts中添加一行:${BLACK}"
 echo -e "${RED}    $ip demo.srs.com${BLACK}"
 echo -e "${GREEN}演示地址:${BLACK}"
 echo -e "${RED}    http://$ip:$port${BLACK}"
-echo -e "@see https://github.com/winlinvip/simple-rtmp-server/wiki/SampleDemo"
+echo -e "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo"
diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp
index fbb97b62a..84ed4ef57 100644
--- a/trunk/src/app/srs_app_config.cpp
+++ b/trunk/src/app/srs_app_config.cpp
@@ -48,7 +48,7 @@ using namespace std;
 
 using namespace _srs_internal;
 
-#define SRS_WIKI_URL_LOG "https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLog"
+#define SRS_WIKI_URL_LOG "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog"
 
 // '\n'
 #define __LF (char)0x0a
diff --git a/trunk/src/app/srs_app_reload.hpp b/trunk/src/app/srs_app_reload.hpp
index 3b98a7009..48b2715a0 100644
--- a/trunk/src/app/srs_app_reload.hpp
+++ b/trunk/src/app/srs_app_reload.hpp
@@ -36,7 +36,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * when reload callback, the config is updated yet.
 * 
 * features not support reload, 
-* @see: https://github.com/winlinvip/simple-rtmp-server/wiki/Reload#notsupportedfeatures
+* @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload#notsupportedfeatures
 */
 class ISrsReloadHandler
 {
diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp
index bd4f72f03..bd7f068f2 100644
--- a/trunk/src/main/srs_main_server.cpp
+++ b/trunk/src/main/srs_main_server.cpp
@@ -194,7 +194,7 @@ int main(int argc, char** argv)
     // for special features.
 #ifdef SRS_AUTO_HTTP_SERVER
     srs_warn("http server is dev feature, "
-        "@see https://github.com/winlinvip/simple-rtmp-server/wiki/HTTPServer#feature");
+        "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer#feature");
 #endif
     
     /**
diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp
index 0513340c8..c6b235fb1 100644
--- a/trunk/src/utest/srs_utest_config.cpp
+++ b/trunk/src/utest/srs_utest_config.cpp
@@ -505,7 +505,7 @@ std::string __full_conf = ""
     "    # it's strongly recommend to open the debug_srs_upnode,                                                                            \n"
     "    # when connect to upnode, it will take the debug info,                                                                             \n"
     "    # for example, the id, source id, pid.                                                                                             \n"
-    "    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLog                                                          \n"
+    "    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog                                                          \n"
     "    # default: on                                                                                                                      \n"
     "    debug_srs_upnode    on;                                                                                                            \n"
     "}                                                                                                                                      \n"

From 77d14ff752c68d170adbc606cc459ec538a63e56 Mon Sep 17 00:00:00 2001
From: winlin 
Date: Fri, 24 Oct 2014 10:01:00 +0800
Subject: [PATCH 05/26] update readme, rename wiki/xxx to wiki/v1_xxx

---
 README.md                   | 1 +
 trunk/src/core/srs_core.hpp | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6807f5820..9e9cc3490 100755
--- a/README.md
+++ b/README.md
@@ -202,6 +202,7 @@ Supported operating systems and hardware:
 * 2013-10-17, Created.
## History +* v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_xxx. 1.0.2. * v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. * v1.0, 2014-10-09, [1.0 beta(1.0.0)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta) released. 59316 lines. * v1.0, 2014-10-08, fix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), always reap ts whatever audio or video packet. 0.9.223. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index b08f4a661..44f8e2ebc 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "1" #define VERSION_MINOR "0" -#define VERSION_REVISION "1" +#define VERSION_REVISION "2" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS" From aa98ca60b970cf26ca00c7160cb448c2bb7ecab6 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 24 Oct 2014 10:34:00 +0800 Subject: [PATCH 06/26] fix #186, hotfix for bug #186, drop connect args when not object. 1.0.3. --- README.md | 1 + trunk/src/core/srs_core.hpp | 2 +- trunk/src/rtmp/srs_protocol_stack.cpp | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9e9cc3490..81483f655 100755 --- a/README.md +++ b/README.md @@ -202,6 +202,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v1.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 1.0.3. * v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_xxx. 1.0.2. * v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. * v1.0, 2014-10-09, [1.0 beta(1.0.0)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta) released. 59316 lines. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 44f8e2ebc..2715e5d0c 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "1" #define VERSION_MINOR "0" -#define VERSION_REVISION "2" +#define VERSION_REVISION "3" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS" diff --git a/trunk/src/rtmp/srs_protocol_stack.cpp b/trunk/src/rtmp/srs_protocol_stack.cpp index 66d3798f7..ce7222b6c 100644 --- a/trunk/src/rtmp/srs_protocol_stack.cpp +++ b/trunk/src/rtmp/srs_protocol_stack.cpp @@ -1864,11 +1864,23 @@ int SrsConnectAppPacket::decode(SrsStream* stream) if (!stream->empty()) { srs_freep(args); - args = SrsAmf0Any::object(); - if ((ret = args->read(stream)) != ERROR_SUCCESS) { + + // see: https://github.com/winlinvip/simple-rtmp-server/issues/186 + // the args maybe any amf0, for instance, a string. we should drop if not object. + SrsAmf0Any* any = NULL; + if ((ret = SrsAmf0Any::discovery(stream, &any)) != ERROR_SUCCESS) { srs_error("amf0 decode connect args failed. ret=%d", ret); return ret; } + srs_assert(any); + + // drop when not an AMF0 object. + if (!any->is_object()) { + srs_warn("drop the args, see: '4.1.1. connect', marker=%#x", any->marker); + srs_freep(any); + } else { + args = any->to_object(); + } } srs_info("amf0 decode connect packet success"); From d8e55d14cdcf6d5795824cd2bd77dff1879b0235 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 24 Oct 2014 11:10:41 +0800 Subject: [PATCH 07/26] rename EN/CN home --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 81483f655..14a365967 100755 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ cd simple-rtmp-server/trunk Please select your language: * [English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_ENHome) -* [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CNHome) +* [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home) ## Donation @@ -157,7 +157,7 @@ Supported operating systems and hardware: 1. 带宽测速:Support [bandwidth test](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_BandwidthTestTool) api and flash client. 1. 演示页面:Player, publisher(encoder), and [demo pages(jquery+bootstrap)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo). 1. 视频会议演示:[Demo](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo) video meeting or chat(SRS+cherrypy+jquery+bootstrap). -1. 中文Wiki:Full documents in [wiki](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CNHome), in Chineses. +1. 中文Wiki:Full documents in [wiki](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home), in Chineses. 1. 客户端库:Support RTMP(play-publish) library: [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp) 1. 支持ARM平台:Support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. 1. 支持Init.d脚本:Support [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService) and packge script, log to file. From fe59783d83f737b67c055d785bd92c6d4bc6c210 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 24 Oct 2014 11:28:50 +0800 Subject: [PATCH 08/26] add prefix wiki/v1_CN_ or wiki/v1_EN_ to wiki. --- README.md | 174 +++++++++++------------ trunk/CMakeLists.txt | 52 +++---- trunk/auto/depends.sh | 2 +- trunk/auto/options.sh | 4 +- trunk/conf/demo.19350.conf | 2 +- trunk/conf/demo.conf | 2 +- trunk/conf/dvr.segment.conf | 2 +- trunk/conf/dvr.session.conf | 2 +- trunk/conf/edge.conf | 2 +- trunk/conf/edge.token.traverse.conf | 2 +- trunk/conf/ffmpeg.transcode.conf | 2 +- trunk/conf/forward.master.conf | 2 +- trunk/conf/forward.slave.conf | 2 +- trunk/conf/full.conf | 2 +- trunk/conf/hls.conf | 2 +- trunk/conf/http.hls.conf | 2 +- trunk/conf/ingest.conf | 2 +- trunk/conf/origin.conf | 2 +- trunk/conf/realtime.conf | 2 +- trunk/conf/rtmp.conf | 2 +- trunk/conf/transcode2hls.audio.only.conf | 2 +- trunk/configure | 32 ++--- trunk/research/arm/jmp.cpp | 2 +- trunk/research/arm/jmp_sp.cpp | 2 +- trunk/research/arm/test.cpp | 2 +- trunk/research/librtmp/Makefile | 2 +- trunk/scripts/install.sh | 2 +- trunk/scripts/package.sh | 2 +- trunk/scripts/run.sh | 2 +- trunk/src/app/srs_app_config.cpp | 2 +- trunk/src/app/srs_app_reload.hpp | 2 +- trunk/src/main/srs_main_server.cpp | 2 +- trunk/src/utest/srs_utest_config.cpp | 2 +- 33 files changed, 160 insertions(+), 160 deletions(-) diff --git a/README.md b/README.md index 14a365967..1d7e9dfd1 100755 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@ SRS定位是运营级的互联网直播服务器集群,追求更好的概念 其他[more...](http://www.ossrs.net/srs.release/releases/)
同类产品:[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) -获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Git) +获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_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) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Git) +获得源码(国内CSDN镜像): [https://code.csdn.net/winlinvip/srs-csdn](https://code.csdn.net/winlinvip/srs-csdn) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git) ```bash git clone https://code.csdn.net/winlinvip/srs-csdn.git @@ -25,7 +25,7 @@ git clone https://code.csdn.net/winlinvip/srs-csdn.git 报告问题(BugReport): [https://github.com/winlinvip/simple-rtmp-server/issues/new](https://github.com/winlinvip/simple-rtmp-server/issues/new)
中文资料(Wiki): [https://github.com/winlinvip/simple-rtmp-server/wiki](https://github.com/winlinvip/simple-rtmp-server/wiki)
使用步骤(Usage): [https://github.com/winlinvip/simple-rtmp-server#usage](#usage)
-公用机器(LiveShow): [https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LiveShow](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LiveShow)
+公用机器(LiveShow): [https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LiveShow](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LiveShow)
捐款(Donation): [GitHub](http://winlinvip.github.io/srs.release/donation/index.html) 或 [阿里云镜像](http://www.ossrs.net/srs.release/donation/index.html) ,查看 [捐献墙(Donations)](https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt)
@@ -34,18 +34,18 @@ git clone https://code.csdn.net/winlinvip/srs-csdn.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_DeliveryRTMP)/[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), -[high-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), single/multiple(plan) processes, edge/origin live server, -[x86/x64/arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm), +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_Build). +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_RtmpUrlVhost), -rtmp([encoder push](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP), client/[edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) pull), [ingester(srs pull)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest), -[HLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), [HLS audio only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS#hlsaudioonly), [transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), -[forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi), -[http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer), [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR). +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). 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)
@@ -70,7 +70,7 @@ 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) 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_Product#bigthanks). +* [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). * Genes amd Mabbott for creating [st](https://github.com/winlinvip/state-threads)([state-threads](http://sourceforge.net/projects/state-threads/)). * Michael Talyanksy for introducing us to use st. * Roman Arutyunyan for creating [nginx-rtmp](https://github.com/arut/nginx-rtmp-module) for SRS to refer to. @@ -89,7 +89,7 @@ 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_Build) +Requires Centos6.x/Ubuntu12 32/64bits, others see [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build)
 ./configure && make
@@ -102,23 +102,23 @@ cd simple-rtmp-server/trunk
 
See also: -* [Usage: How to delivery RTMP?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRTMP) -* [Usage: How to delivery HLS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS) -* [Usage: How to delivery HLS for other codec?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleTranscode2HLS) -* [Usage: How to transode RTMP stream by SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleFFMPEG) -* [Usage: How to forward stream to other server?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward) -* [Usage: How to deploy low lantency application?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRealtime) -* [Usage: How to deploy SRS on ARM?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleARM) -* [Usage: How to ingest file/stream/device to SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest) -* [Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHTTP) -* [Usage: How to show the demo of SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo) -* [Usage: Solution using SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Sample) -* [Usage: Why SRS?](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Product) +* [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) ## Wiki Please select your language: -* [English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_ENHome) +* [English](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_EN_Home) * [Chinese](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home) ## Donation @@ -136,40 +136,40 @@ Supported operating systems and hardware: ## Summary 1. 简洁稳定:Simple, also stable enough. -1. 高性能:[High-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance): single-thread, async socket, event/st-thread driven. -1. 高并发:[High-concurrency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), 1800 connections(500kbps), 900Mbps, CPU 90.2%, 41MB -1. RTMP源站:Support [RTMP Origin Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP). -1. CDN边缘(上下行加速):Support [RTMP Edge Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) for CDN, push/pull stream from any RTMP server +1. 高性能:[High-performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance): single-thread, async socket, event/st-thread driven. +1. 高并发:[High-concurrency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance), 1800 connections(500kbps), 900Mbps, CPU 90.2%, 41MB +1. RTMP源站:Support [RTMP Origin Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP). +1. CDN边缘(上下行加速):Support [RTMP Edge Server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge) for CDN, push/pull stream from any RTMP server 1. 单进程(无多进程):Support single process; no multiple processes. -1. 支持Vhost:Support [Vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost), support \_\_defaultVhost\_\_. -1. 直播(无点播):Support [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP) live streaming; no vod streaming. -1. 苹果HLS:Support Apple [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS) live streaming. -1. 支持纯音频HLS:Support [HLS audio-only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS#hlsaudioonly) live streaming. -1. 支持Reload:Support [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) config to enable changes. -1. 支持GopCache:Support [cache last gop](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LowLatency#gop-cache) for flash player to fast startup. +1. 支持Vhost:Support [Vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RtmpUrlVhost), support \_\_defaultVhost\_\_. +1. 直播(无点播):Support [RTMP](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP) live streaming; no vod streaming. +1. 苹果HLS:Support Apple [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS) live streaming. +1. 支持纯音频HLS:Support [HLS audio-only](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS#hlsaudioonly) live streaming. +1. 支持Reload:Support [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Reload) config to enable changes. +1. 支持GopCache:Support [cache last gop](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LowLatency#gop-cache) for flash player to fast startup. 1. 侦听多端口:Support listen at multiple ports. 1. 长时间推流:Support long time(>4.6hours) publish/play. -1. 转发流:Support [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) in master-slave mode. -1. 流转码:Support live stream [Transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) by ffmpeg. -1. 支持FFMPEG滤镜:Support [ffmpeg](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) filters(logo/overlay/crop), x264 params, copy/vn/an. -1. 只转码音频:Support audio [transcode](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG) only, speex/mp3 to aac -1. 支持HTTP回调:Support [http callback api hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback)(for authentication and injection). -1. 带宽测速:Support [bandwidth test](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_BandwidthTestTool) api and flash client. -1. 演示页面:Player, publisher(encoder), and [demo pages(jquery+bootstrap)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo). -1. 视频会议演示:[Demo](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo) video meeting or chat(SRS+cherrypy+jquery+bootstrap). +1. 转发流:Support [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Forward) in master-slave mode. +1. 流转码:Support live stream [Transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG) by ffmpeg. +1. 支持FFMPEG滤镜:Support [ffmpeg](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG) filters(logo/overlay/crop), x264 params, copy/vn/an. +1. 只转码音频:Support audio [transcode](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG) only, speex/mp3 to aac +1. 支持HTTP回调:Support [http callback api hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback)(for authentication and injection). +1. 带宽测速:Support [bandwidth test](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_BandwidthTestTool) api and flash client. +1. 演示页面:Player, publisher(encoder), and [demo pages(jquery+bootstrap)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo). +1. 视频会议演示:[Demo](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo) video meeting or chat(SRS+cherrypy+jquery+bootstrap). 1. 中文Wiki:Full documents in [wiki](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Home), in Chineses. -1. 客户端库:Support RTMP(play-publish) library: [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp) -1. 支持ARM平台:Support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. -1. 支持Init.d脚本:Support [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService) and packge script, log to file. -1. 支持ATC:Support [RTMP ATC](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMP-ATC) for HLS/HDS to support backup(failover) -1. 支持HTTP-RESTful-API:Support [HTTP RESTful management api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi). -1. 采集流:Support [Ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest) FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg). -1. 支持录制:Support [DVR](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR), record live to flv file for vod. -1. 可追溯日志:Support [tracable log, session based log](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog). -1. 支持FMS-Token穿越:Support DRM [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM#tokentraverse) for fms origin authenticate. +1. 客户端库:Support RTMP(play-publish) library: [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp) +1. 支持ARM平台:Support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. +1. 支持Init.d脚本:Support [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LinuxService) and packge script, log to file. +1. 支持ATC:Support [RTMP ATC](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RTMP-ATC) for HLS/HDS to support backup(failover) +1. 支持HTTP-RESTful-API:Support [HTTP RESTful management api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi). +1. 采集流:Support [Ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Ingest) FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg). +1. 支持录制:Support [DVR](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR), record live to flv file for vod. +1. 可追溯日志:Support [tracable log, session based log](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLog). +1. 支持FMS-Token穿越:Support DRM [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DRM#tokentraverse) for fms origin authenticate. 1. 全面的Utest:Support system full utest on gtest. -1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHTTP) for hls(live/vod) -1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FlvVodStream). +1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHTTP) for hls(live/vod) +1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FlvVodStream). 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). 1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/winlinvip/simple-rtmp-server/issues/92). 1. [no-plan] Support multiple processes, for both origin and edge @@ -188,22 +188,22 @@ Supported operating systems and hardware: * 2014-06-27, [Release v1.0-mainline5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline5), refine perf 3k+ clients, edge token traverse, [srs monitor](http://ossrs.net:1977), 30days online. 41573 lines.
* 2014-05-28, [Release v1.0-mainline4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline4), support heartbeat, tracable log, fix mem leak and bugs. 39200 lines.
* 2014-05-18, [Release v1.0-mainline3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline3), support mips, fms origin, json(http-api). 37594 lines.
-* 2014-04-28, [Release v1.0-mainline2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline2), support [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR), android, [edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge). 35255 lines.
-* 2014-04-07, [Release v1.0-mainline](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline), support [arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm), [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService), http [server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer)/[api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi), [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest). 30000 lines.
-* 2013-12-25, [Release v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9), support bandwidth test, player/encoder/chat [demos](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo). 20926 lines.
-* 2013-12-08, [Release v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8), support [http hooks callback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), update [st_load](https://github.com/winlinvip/st-load). 19186 lines.
-* 2013-12-03, [Release v0.7](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.7), support [live stream transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG). 17605 lines.
-* 2013-11-29, [Release v0.6](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.6), support [forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) stream to origin/edge. 16094 lines.
-* 2013-11-26, [Release v0.5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.5), support [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS), fragment and window. 14449 lines.
-* 2013-11-10, [Release v0.4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.4), support [reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) config, pause, longtime publish/play. 12500 lines.
-* 2013-11-04, [Release v0.3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.3), support [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost), refer, gop cache, listen multiple ports. 11773 lines.
-* 2013-10-25, [Release v0.2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.2), support [rtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMPHandshake) flash publish, h264, time jitter correct. 10125 lines.
-* 2013-10-23, [Release v0.1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.1), support [rtmp FMLE/FFMPEG publish](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryRTMP), vp6. 8287 lines.
+* 2014-04-28, [Release v1.0-mainline2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline2), support [dvr](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR), android, [edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge). 35255 lines.
+* 2014-04-07, [Release v1.0-mainline](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline), support [arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm), [init.d](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LinuxService), http [server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer)/[api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi), [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleIngest). 30000 lines.
+* 2013-12-25, [Release v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9), support bandwidth test, player/encoder/chat [demos](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo). 20926 lines.
+* 2013-12-08, [Release v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8), support [http hooks callback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback), update [st_load](https://github.com/winlinvip/st-load). 19186 lines.
+* 2013-12-03, [Release v0.7](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.7), support [live stream transcoding](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG). 17605 lines.
+* 2013-11-29, [Release v0.6](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.6), support [forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Forward) stream to origin/edge. 16094 lines.
+* 2013-11-26, [Release v0.5](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.5), support [HLS(m3u8)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS), fragment and window. 14449 lines.
+* 2013-11-10, [Release v0.4](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.4), support [reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Reload) config, pause, longtime publish/play. 12500 lines.
+* 2013-11-04, [Release v0.3](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.3), support [vhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RtmpUrlVhost), refer, gop cache, listen multiple ports. 11773 lines.
+* 2013-10-25, [Release v0.2](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.2), support [rtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RTMPHandshake) flash publish, h264, time jitter correct. 10125 lines.
+* 2013-10-23, [Release v0.1](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.1), support [rtmp FMLE/FFMPEG publish](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryRTMP), vp6. 8287 lines.
* 2013-10-17, Created.
## History * v1.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 1.0.3. -* v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_xxx. 1.0.2. +* v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_CN_xxx. 1.0.2. * v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. * v1.0, 2014-10-09, [1.0 beta(1.0.0)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta) released. 59316 lines. * v1.0, 2014-10-08, fix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), always reap ts whatever audio or video packet. 0.9.223. @@ -248,8 +248,8 @@ Supported operating systems and hardware: * v1.0, 2014-06-27, SRS online 30days with RTMP/HLS. * v1.0, 2014-06-25, fix [#108](https://github.com/winlinvip/simple-rtmp-server/issues/108), support config time jitter for encoder non-monotonical stream. 0.9.133 * v1.0, 2014-06-23, support report summaries in heartbeat. 0.9.132 -* v1.0, 2014-06-22, performance refine, support [3k+](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance#%E6%80%A7%E8%83%BD%E4%BE%8B%E8%A1%8C%E6%8A%A5%E5%91%8A4k) connections(270kbps). 0.9.130 -* v1.0, 2014-06-21, support edge [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM#tokentraverse), fix [#104](https://github.com/winlinvip/simple-rtmp-server/issues/104). 0.9.129 +* v1.0, 2014-06-22, performance refine, support [3k+](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance#%E6%80%A7%E8%83%BD%E4%BE%8B%E8%A1%8C%E6%8A%A5%E5%91%8A4k) connections(270kbps). 0.9.130 +* v1.0, 2014-06-21, support edge [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DRM#tokentraverse), fix [#104](https://github.com/winlinvip/simple-rtmp-server/issues/104). 0.9.129 * v1.0, 2014-06-19, add connections count to api summaries. 0.9.127 * v1.0, 2014-06-19, add srs bytes and kbps to api summaries. 0.9.126 * v1.0, 2014-06-18, add network bytes to api summaries. 0.9.125 @@ -291,11 +291,11 @@ Supported operating systems and hardware: * v1.0, 2014-04-11, add speex1.2 to transcode flash encoder stream. 0.9.58 * v1.0, 2014-04-10, support reload ingesters(add/remov/update). 0.9.57 * v1.0, 2014-04-07, [1.0 mainline(0.9.55)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.mainline) released. 30000 lines. -* v1.0, 2014-04-07, support [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest) file/stream/device. -* v1.0, 2014-04-05, support [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi) and [http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer). +* v1.0, 2014-04-07, support [ingest](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleIngest) file/stream/device. +* v1.0, 2014-04-05, support [http api](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi) and [http server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer). * v1.0, 2014-04-03, implements http framework and api/v1/version. * v1.0, 2014-03-30, fix bug for st detecting epoll failed, force st to use epoll. -* v1.0, 2014-03-29, add wiki [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RaspberryPi). +* v1.0, 2014-03-29, add wiki [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RaspberryPi). * v1.0, 2014-03-29, add release binary package for raspberry-pi. * v1.0, 2014-03-26, support RTMP ATC for HLS/HDS to support backup(failover). * v1.0, 2014-03-23, support daemon, default start in daemon. @@ -306,20 +306,20 @@ Supported operating systems and hardware: * v1.0, 2014-03-19, add vn/an for FFMPEG to drop video/audio for radio stream. * v1.0, 2014-03-19, refine handshake, client support complex handshake, add utest. * v1.0, 2014-03-16, fix bug on arm of st, the sp change from 20 to 8, for respberry-pi, @see [commit](https://github.com/winlinvip/simple-rtmp-server/commit/5a4373d4835758188b9a1f03005cea0b6ddc62aa) -* v1.0, 2014-03-16, support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. +* v1.0, 2014-03-16, support ARM([debian armhf, v7cpu](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm)) with rtmp/ssl/hls/librtmp. * v1.0, 2014-03-12, finish utest for amf0 codec. * v1.0, 2014-03-06, add gperftools for mem leak detect, mem/cpu profile. * v1.0, 2014-03-04, add gest framework for utest, build success. -* v1.0, 2014-03-02, add wiki [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp), [SRS for arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm), [product](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Product) +* v1.0, 2014-03-02, add wiki [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp), [SRS for arm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm), [product](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Product) * v1.0, 2014-03-02, srs-librtmp, client publish/play library like librtmp. * v1.0, 2014-03-01, modularity, extract core/kernel/rtmp/app/main module. * v1.0, 2014-02-28, support arm build(SRS/ST), add ssl to 3rdparty package. -* v1.0, 2014-02-28, add wiki [BuildArm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build), [FFMPEG](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG), [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload) -* v1.0, 2014-02-27, add wiki [LowLatency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LowLatency), [HTTPCallback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback), [ServerSideScript](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_ServerSideScript), [IDE](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE) -* v1.0, 2014-01-19, add wiki [DeliveryHLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS) -* v1.0, 2014-01-12, add wiki [HowToAskQuestion](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HowToAskQuestion), [RtmpUrlVhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RtmpUrlVhost) +* v1.0, 2014-02-28, add wiki [BuildArm](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build), [FFMPEG](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG), [Reload](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Reload) +* v1.0, 2014-02-27, add wiki [LowLatency](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LowLatency), [HTTPCallback](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback), [ServerSideScript](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_ServerSideScript), [IDE](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE) +* v1.0, 2014-01-19, add wiki [DeliveryHLS](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS) +* v1.0, 2014-01-12, add wiki [HowToAskQuestion](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HowToAskQuestion), [RtmpUrlVhost](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RtmpUrlVhost) * v1.0, 2014-01-11, fix jw/flower player pause bug, which send closeStream actually. -* v1.0, 2014-01-05, add wiki [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build), [Performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance), [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) +* v1.0, 2014-01-05, add wiki [Build](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build), [Performance](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance), [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Forward) * v1.0, 2014-01-01, change listen(512), chunk-size(60000), to improve performance. * v1.0, 2013-12-27, merge from wenjie, the bandwidth test feature. * v0.9, 2013-12-25, [v0.9](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.9) released. 20926 lines. @@ -337,7 +337,7 @@ Supported operating systems and hardware: * v0.9, 2013-12-14, refine the thread model for the retry threads. * v0.9, 2013-12-10, auto install depends tools/libs on centos/ubuntu. * v0.8, 2013-12-08, [v0.8](https://github.com/winlinvip/simple-rtmp-server/releases/tag/0.8) released. 19186 lines. -* v0.8, 2013-12-08, support [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback): on_connect/close/publish/unpublish/play/stop. +* v0.8, 2013-12-08, support [http hooks](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback): on_connect/close/publish/unpublish/play/stop. * v0.8, 2013-12-08, support multiple http hooks for a event. * v0.8, 2013-12-07, support http callback hooks, on_connect. * v0.8, 2013-12-07, support network based cli and json result, add CherryPy 3.2.4. @@ -427,8 +427,8 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw 32 17 33 0 0 18| 0 410B| 169M 169M| 0 0 |4518 3788 -* See also: [Performance for x86/x64 Test Guide](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Performance) -* See also: [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RaspberryPi) +* See also: [Performance for x86/x64 Test Guide](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Performance) +* See also: [Performance for RaspberryPi](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RaspberryPi) ## Architecture @@ -502,7 +502,7 @@ Remark: to ingest any input to rtmp, push to SRS. -### [HDS/HLS origin backup](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMP-ATC) +### [HDS/HLS origin backup](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RTMP-ATC)
                         +----------+        +----------+
@@ -514,10 +514,10 @@ to ingest any input to rtmp, push to SRS.
                  RTMP   +----------+ RTMP   +----------+
 
-### [RTMP cluster(origin/edge) Architecture](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) +### [RTMP cluster(origin/edge) Architecture](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge) -Remark: cluster over edge, see [Edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge) -Remark: cluster over forward, see [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Forward) +Remark: cluster over edge, see [Edge](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge) +Remark: cluster over forward, see [Forward](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Forward)
 +---------+       +-----------------+     +-----------------------+ 
diff --git a/trunk/CMakeLists.txt b/trunk/CMakeLists.txt
index fa80bcd47..5d7ea46cc 100644
--- a/trunk/CMakeLists.txt
+++ b/trunk/CMakeLists.txt
@@ -21,31 +21,31 @@ IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/objs/st/libst.a)
     EXEC_PROGRAM(./configure)
 ENDIF(NOT EXISTS ${PROJECT_SOURCE_DIR}/objs/st/libst.a)
 
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
-MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
+MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_IDE#jetbrains")
 MESSAGE(STATUS "use ./configure && make, @see https://github.com/winlinvip/simple-rtmp-server#usage")
 
diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh
index 94e659cc7..05ccc196d 100755
--- a/trunk/auto/depends.sh
+++ b/trunk/auto/depends.sh
@@ -311,7 +311,7 @@ if [ $SRS_EMBEDED_CPU = YES ]; then
         echo "st-1.9t for arm is ok.";
     else
         # TODO: FIXME: patch the bug.
-        # patch st for arm, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm#st-arm-bug-fix
+        # patch st for arm, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm#st-arm-bug-fix
         echo "build st-1.9t for arm"; 
         (
             rm -rf ${SRS_OBJS}/st-1.9 && cd ${SRS_OBJS} && 
diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh
index 024b22c34..66d358edd 100644
--- a/trunk/auto/options.sh
+++ b/trunk/auto/options.sh
@@ -73,7 +73,7 @@ SRS_MIPS_UBUNTU12=NO
 SRS_DEV=NO
 # dev, open main server feature for dev, no utest/research/librtmp
 SRS_FAST_DEV=NO
-# demo, for the demo of srs, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
+# demo, for the demo of srs, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo
 SRS_DEMO=NO
 # raspberry-pi, open hls/ssl/static
 SRS_PI=NO
@@ -172,7 +172,7 @@ Presets:
   --disable-all             disable all features, only support vp6 RTMP.
   --dev                     for dev, open all features, no nginx/gperf/gprof/arm.
   --fast-dev                for dev fast compile, the RTMP server, without librtmp/utest/research.
-  --demo                    for srs demo, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
+  --demo                    for srs demo, @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo
   --full                    enable all features, no gperf/gprof/arm.
   
 Conflicts:
diff --git a/trunk/conf/demo.19350.conf b/trunk/conf/demo.19350.conf
index e65001fe4..0aada8e33 100644
--- a/trunk/conf/demo.19350.conf
+++ b/trunk/conf/demo.19350.conf
@@ -1,5 +1,5 @@
 # the config for srs demo
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/demo.conf b/trunk/conf/demo.conf
index bf5468bd8..191ff87f0 100644
--- a/trunk/conf/demo.conf
+++ b/trunk/conf/demo.conf
@@ -1,5 +1,5 @@
 # the config for srs demo
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/dvr.segment.conf b/trunk/conf/dvr.segment.conf
index 865dc1ed8..f29c28d30 100644
--- a/trunk/conf/dvr.segment.conf
+++ b/trunk/conf/dvr.segment.conf
@@ -1,5 +1,5 @@
 # the config for srs to dvr in segment mode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/dvr.session.conf b/trunk/conf/dvr.session.conf
index c93059f46..8b16b32eb 100644
--- a/trunk/conf/dvr.session.conf
+++ b/trunk/conf/dvr.session.conf
@@ -1,5 +1,5 @@
 # the config for srs to dvr in session mode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/edge.conf b/trunk/conf/edge.conf
index c90a3ee5c..a77986b6e 100644
--- a/trunk/conf/edge.conf
+++ b/trunk/conf/edge.conf
@@ -1,5 +1,5 @@
 # the config for srs origin-edge cluster
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/edge.token.traverse.conf b/trunk/conf/edge.token.traverse.conf
index c92ff61f4..bff8749f6 100644
--- a/trunk/conf/edge.token.traverse.conf
+++ b/trunk/conf/edge.token.traverse.conf
@@ -1,5 +1,5 @@
 # the config for srs for token traverse authentication
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DRM
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DRM
 # @see full.conf for detail config.
 
 listen              1935
diff --git a/trunk/conf/ffmpeg.transcode.conf b/trunk/conf/ffmpeg.transcode.conf
index 63a0a0975..04c434982 100644
--- a/trunk/conf/ffmpeg.transcode.conf
+++ b/trunk/conf/ffmpeg.transcode.conf
@@ -1,5 +1,5 @@
 # the config for srs use ffmpeg to transcode
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleFFMPEG
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleFFMPEG
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/forward.master.conf b/trunk/conf/forward.master.conf
index 9480e52de..8200b1c5f 100644
--- a/trunk/conf/forward.master.conf
+++ b/trunk/conf/forward.master.conf
@@ -1,5 +1,5 @@
 # the config for srs to forward
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleForward
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/forward.slave.conf b/trunk/conf/forward.slave.conf
index 52649fd15..ff2dd53ed 100644
--- a/trunk/conf/forward.slave.conf
+++ b/trunk/conf/forward.slave.conf
@@ -1,5 +1,5 @@
 # the config for srs to forward
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleForward
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleForward
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf
index dbb9586da..61c8b3d49 100644
--- a/trunk/conf/full.conf
+++ b/trunk/conf/full.conf
@@ -406,7 +406,7 @@ vhost debug.srs.com {
     # it's strongly recommend to open the debug_srs_upnode,
     # when connect to upnode, it will take the debug info, 
     # for example, the id, source id, pid.
-    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog
+    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLog
     # default: on
     debug_srs_upnode    on;
 }
diff --git a/trunk/conf/hls.conf b/trunk/conf/hls.conf
index 9044956c2..375bc3629 100644
--- a/trunk/conf/hls.conf
+++ b/trunk/conf/hls.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/http.hls.conf b/trunk/conf/http.hls.conf
index 27dbfb44a..8c2c4cdc9 100644
--- a/trunk/conf/http.hls.conf
+++ b/trunk/conf/http.hls.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/ingest.conf b/trunk/conf/ingest.conf
index d82922fde..12fa2b8e5 100644
--- a/trunk/conf/ingest.conf
+++ b/trunk/conf/ingest.conf
@@ -1,5 +1,5 @@
 # use ffmpeg to ingest file/stream/device to SRS
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleIngest
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleIngest
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/origin.conf b/trunk/conf/origin.conf
index 439e9071a..401c5cd25 100644
--- a/trunk/conf/origin.conf
+++ b/trunk/conf/origin.conf
@@ -1,5 +1,5 @@
 # the config for srs origin-edge cluster
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Edge
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Edge
 # @see full.conf for detail config.
 
 listen              19350;
diff --git a/trunk/conf/realtime.conf b/trunk/conf/realtime.conf
index 3adf218d1..6fd74b60e 100644
--- a/trunk/conf/realtime.conf
+++ b/trunk/conf/realtime.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery realtime RTMP stream
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRealtime
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRealtime
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/rtmp.conf b/trunk/conf/rtmp.conf
index 96f232d29..38212b79e 100644
--- a/trunk/conf/rtmp.conf
+++ b/trunk/conf/rtmp.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery RTMP
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleRTMP
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleRTMP
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/conf/transcode2hls.audio.only.conf b/trunk/conf/transcode2hls.audio.only.conf
index e5fd8318b..69eb9525c 100644
--- a/trunk/conf/transcode2hls.audio.only.conf
+++ b/trunk/conf/transcode2hls.audio.only.conf
@@ -1,5 +1,5 @@
 # the config for srs to delivery hls
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleHLS
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHLS
 # @see full.conf for detail config.
 
 listen              1935;
diff --git a/trunk/configure b/trunk/configure
index a985b7c05..632e2bf0f 100755
--- a/trunk/configure
+++ b/trunk/configure
@@ -134,7 +134,7 @@ BLACK="\\${BLACK}"
 
 echo -e "\${GREEN}build summary:\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsGperfSummaryColor}gperf @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_GPERF\${BLACK}"
+echo -e "     |${SrsGperfSummaryColor}gperf @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_GPERF\${BLACK}"
 echo -e "     |     ${SrsGperfMCSummaryColor}gmc @see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html\${BLACK}"
 echo -e "     |     ${SrsGperfMCSummaryColor}gmc: gperf memory check\${BLACK}"
 echo -e "     |             ${SrsGperfMCSummaryColor}env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./objs/srs -c conf/console.conf # start gmc\${BLACK}"
@@ -150,7 +150,7 @@ echo -e "     |             ${SrsGperfCPSummaryColor}rm -f gperf.srs.gcp*; ./obj
 echo -e "     |             ${SrsGperfCPSummaryColor}killall -2 srs # or CTRL+C to stop gcp\${BLACK}"
 echo -e "     |             ${SrsGperfCPSummaryColor}./objs/pprof --text objs/srs gperf.srs.gcp* # to analysis cpu profile\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsGprofSummaryColor}gprof @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_GPROF\${BLACK}"
+echo -e "     |${SrsGprofSummaryColor}gprof @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_GPROF\${BLACK}"
 echo -e "     |${SrsGprofSummaryColor}gprof: GNU profile tool, @see: http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html\${BLACK}"
 echo -e "     |     ${SrsGprofSummaryColor}rm -f gmon.out; ./objs/srs -c conf/console.conf # start gprof\${BLACK}"
 echo -e "     |     ${SrsGprofSummaryColor}killall -2 srs # or CTRL+C to stop gprof\${BLACK}"
@@ -160,7 +160,7 @@ echo -e "     |${SrsResearchSummaryColor}research: ./objs/research, api server,
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
 echo -e "     |${SrsUtestSummaryColor}utest: ./objs/srs_utest, the utest for srs\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "     |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLibrtmp\${BLACK}"
+echo -e "     |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLibrtmp\${BLACK}"
 echo -e "     |${SrsLibrtmpSummaryColor}librtmp: ./objs/include, ./objs/lib, the srs-librtmp library\${BLACK}"
 echo -e "     |     ${SrsLibrtmpSummaryColor}simple handshake: publish/play stream with simple handshake to server\${BLACK}"
 echo -e "     |     ${SrsLibrtmpSSLSummaryColor}complex handshake: it's not required for client, recommend disable it\${BLACK}"
@@ -171,30 +171,30 @@ echo -e "     |     ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/
 echo -e "     |     ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_bandwidth_check\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
 echo -e "     |\${GREEN}server: ./objs/srs -c conf/srs.conf, start the srs server\${BLACK}"
-echo -e "     |     ${SrsHlsSummaryColor}hls @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS\${BLACK}"
+echo -e "     |     ${SrsHlsSummaryColor}hls @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS\${BLACK}"
 echo -e "     |     ${SrsHlsSummaryColor}hls: generate m3u8 and ts from rtmp stream\${BLACK}"
-echo -e "     |     ${SrsDvrSummaryColor}dvr @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DVR\${BLACK}"
+echo -e "     |     ${SrsDvrSummaryColor}dvr @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DVR\${BLACK}"
 echo -e "     |     ${SrsDvrSummaryColor}dvr: record RTMP stream to flv files.\${BLACK}"
-echo -e "     |     ${SrsNginxSummaryColor}nginx @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_DeliveryHLS\${BLACK}"
+echo -e "     |     ${SrsNginxSummaryColor}nginx @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DeliveryHLS\${BLACK}"
 echo -e "     |     ${SrsNginxSummaryColor}nginx: delivery HLS stream by nginx\${BLACK}"
 echo -e "     |     ${SrsNginxSummaryColor}nginx: sudo ./objs/nginx/sbin/nginx\${BLACK}"
-echo -e "     |     ${SrsSslSummaryColor}ssl @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_RTMPHandshake\${BLACK}"
+echo -e "     |     ${SrsSslSummaryColor}ssl @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_RTMPHandshake\${BLACK}"
 echo -e "     |     ${SrsSslSummaryColor}ssl: support RTMP complex handshake for client required, for instance, flash\${BLACK}"
-echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG\${BLACK}"
+echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG\${BLACK}"
 echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg: transcode, mux, ingest tool\${BLACK}"
 echo -e "     |     ${SrsFfmpegSummaryColor}ffmpeg: ./objs/ffmpeg/bin/ffmpeg\${BLACK}"
-echo -e "     |     ${SrsTranscodeSummaryColor}transcode @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_FFMPEG\${BLACK}"
+echo -e "     |     ${SrsTranscodeSummaryColor}transcode @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FFMPEG\${BLACK}"
 echo -e "     |     ${SrsTranscodeSummaryColor}transcode: support transcoding RTMP stream\${BLACK}"
-echo -e "     |     ${SrsIngestSummaryColor}ingest @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Ingest\${BLACK}"
+echo -e "     |     ${SrsIngestSummaryColor}ingest @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Ingest\${BLACK}"
 echo -e "     |     ${SrsIngestSummaryColor}ingest: support ingest file/stream/device then push to SRS by RTMP stream\${BLACK}"
-echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPCallback\${BLACK}"
+echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPCallback\${BLACK}"
 echo -e "     |     ${SrsHttpCallbackSummaryColor}http-callback: support http callback for authentication and event injection\${BLACK}"
-echo -e "     |     ${SrsHttpServerSummaryColor}http-server @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer\${BLACK}"
+echo -e "     |     ${SrsHttpServerSummaryColor}http-server @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer\${BLACK}"
 echo -e "     |     ${SrsHttpServerSummaryColor}http-server: support http server to delivery http stream\${BLACK}"
-echo -e "     |     ${SrsHttpApiSummaryColor}http-api @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPApi\${BLACK}"
+echo -e "     |     ${SrsHttpApiSummaryColor}http-api @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPApi\${BLACK}"
 echo -e "     |     ${SrsHttpApiSummaryColor}http-api: support http api to manage server\${BLACK}"
 echo -e "     \${BLACK}+------------------------------------------------------------------------------------\${BLACK}"
-echo -e "\${GREEN}binaries @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build\${BLACK}"
+echo -e "\${GREEN}binaries @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build\${BLACK}"
 
 echo "you can:"
 echo "      ./objs/srs -c conf/srs.conf"
@@ -286,7 +286,7 @@ install-api: install
 	@echo "     sudo ln -sf \$(SRS_PREFIX)/etc/init.d/srs-api /etc/init.d/srs-api"
 	@echo "     /etc/init.d/srs-api start"
 	@echo "     http://\$(shell bash auto/local_ip.sh):8085"
-	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
+	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LinuxService"
 
 install:
 	@echo "mkdir \$(__REAL_INSTALL)"
@@ -308,7 +308,7 @@ install:
 	@echo "srs installed, to link and start srs:"
 	@echo "     sudo ln -sf \$(SRS_PREFIX)/etc/init.d/srs /etc/init.d/srs"
 	@echo "     /etc/init.d/srs start"
-	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
+	@echo "@see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LinuxService"
 
 END
 
diff --git a/trunk/research/arm/jmp.cpp b/trunk/research/arm/jmp.cpp
index 2b2a59913..d9469405d 100644
--- a/trunk/research/arm/jmp.cpp
+++ b/trunk/research/arm/jmp.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm
  arm-linux-gnueabi-g++ -o jmp jmp.cpp -static
  arm-linux-gnueabi-strip jmp
 */
diff --git a/trunk/research/arm/jmp_sp.cpp b/trunk/research/arm/jmp_sp.cpp
index 24ea4bc9b..1fb0be89d 100644
--- a/trunk/research/arm/jmp_sp.cpp
+++ b/trunk/research/arm/jmp_sp.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm
  arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
  arm-linux-gnueabi-strip jmp_sp
 */
diff --git a/trunk/research/arm/test.cpp b/trunk/research/arm/test.cpp
index 970d04283..1bad17d1c 100644
--- a/trunk/research/arm/test.cpp
+++ b/trunk/research/arm/test.cpp
@@ -1,5 +1,5 @@
 /*
-# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLinuxArm
+# see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLinuxArm
  arm-linux-gnueabi-g++ -o test test.cpp -static
  arm-linux-gnueabi-strip test
 */
diff --git a/trunk/research/librtmp/Makefile b/trunk/research/librtmp/Makefile
index af2b477cb..7e0dc35bc 100755
--- a/trunk/research/librtmp/Makefile
+++ b/trunk/research/librtmp/Makefile
@@ -32,7 +32,7 @@ help:
 	@echo "Remark: srs Makefile will auto invoke this by --with/without-ssl, "
 	@echo "     that is, if user specified ssl(by --with-ssl), srs will make this by 'make ssl'"
 	@echo "     that is, if user not use ssl(by --without-ssl), use 'make nossl'"
-	@echo "     see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_v1_Build"
+	@echo "     see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_v1_Build"
 	@echo "Remark: before make this sample, user must make the srs, with/without ssl"
     
 clean:
diff --git a/trunk/scripts/install.sh b/trunk/scripts/install.sh
index 9f935e5dd..54b0900a9 100755
--- a/trunk/scripts/install.sh
+++ b/trunk/scripts/install.sh
@@ -108,7 +108,7 @@ else
 fi
 
 echo ""
-echo "see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_LinuxService"
+echo "see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LinuxService"
 echo "install success, you can:"
 echo -e "${GREEN}      sudo /etc/init.d/srs start${BLACK}"
 echo "srs root is ${INSTALL}"
diff --git a/trunk/scripts/package.sh b/trunk/scripts/package.sh
index 2a6072bf3..901b342e6 100755
--- a/trunk/scripts/package.sh
+++ b/trunk/scripts/package.sh
@@ -108,7 +108,7 @@ fi
 ok_msg "real os is ${os_name}-${os_major_version} ${os_release} ${os_machine}"
 
 # build srs
-# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Build
+# @see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Build
 ok_msg "start build srs"
 if [ $ARM = YES ]; then
     (
diff --git a/trunk/scripts/run.sh b/trunk/scripts/run.sh
index 2f0082e3b..4f4849547 100755
--- a/trunk/scripts/run.sh
+++ b/trunk/scripts/run.sh
@@ -51,4 +51,4 @@ echo -e "${GREEN}请在hosts中添加一行:${BLACK}"
 echo -e "${RED}    $ip demo.srs.com${BLACK}"
 echo -e "${GREEN}演示地址:${BLACK}"
 echo -e "${RED}    http://$ip:$port${BLACK}"
-echo -e "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SampleDemo"
+echo -e "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleDemo"
diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp
index 84ed4ef57..a0facee1a 100644
--- a/trunk/src/app/srs_app_config.cpp
+++ b/trunk/src/app/srs_app_config.cpp
@@ -48,7 +48,7 @@ using namespace std;
 
 using namespace _srs_internal;
 
-#define SRS_WIKI_URL_LOG "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog"
+#define SRS_WIKI_URL_LOG "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLog"
 
 // '\n'
 #define __LF (char)0x0a
diff --git a/trunk/src/app/srs_app_reload.hpp b/trunk/src/app/srs_app_reload.hpp
index 48b2715a0..85d5be016 100644
--- a/trunk/src/app/srs_app_reload.hpp
+++ b/trunk/src/app/srs_app_reload.hpp
@@ -36,7 +36,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * when reload callback, the config is updated yet.
 * 
 * features not support reload, 
-* @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_Reload#notsupportedfeatures
+* @see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Reload#notsupportedfeatures
 */
 class ISrsReloadHandler
 {
diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp
index bd7f068f2..6cef9d9dd 100644
--- a/trunk/src/main/srs_main_server.cpp
+++ b/trunk/src/main/srs_main_server.cpp
@@ -194,7 +194,7 @@ int main(int argc, char** argv)
     // for special features.
 #ifdef SRS_AUTO_HTTP_SERVER
     srs_warn("http server is dev feature, "
-        "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_HTTPServer#feature");
+        "@see https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer#feature");
 #endif
     
     /**
diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp
index c6b235fb1..072a16a7a 100644
--- a/trunk/src/utest/srs_utest_config.cpp
+++ b/trunk/src/utest/srs_utest_config.cpp
@@ -505,7 +505,7 @@ std::string __full_conf = ""
     "    # it's strongly recommend to open the debug_srs_upnode,                                                                            \n"
     "    # when connect to upnode, it will take the debug info,                                                                             \n"
     "    # for example, the id, source id, pid.                                                                                             \n"
-    "    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_SrsLog                                                          \n"
+    "    # please see: https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLog                                                          \n"
     "    # default: on                                                                                                                      \n"
     "    debug_srs_upnode    on;                                                                                                            \n"
     "}                                                                                                                                      \n"

From e3e18b9915692e870d03b66921f514188bd79cfb Mon Sep 17 00:00:00 2001
From: winlin 
Date: Fri, 24 Oct 2014 13:17:11 +0800
Subject: [PATCH 09/26] for bug #186, read the args when discovery it. 1.0.4

---
 trunk/src/core/srs_core.hpp           | 2 +-
 trunk/src/rtmp/srs_protocol_stack.cpp | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp
index 2715e5d0c..0e83da968 100644
--- a/trunk/src/core/srs_core.hpp
+++ b/trunk/src/core/srs_core.hpp
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // current release version
 #define VERSION_MAJOR "1"
 #define VERSION_MINOR "0"
-#define VERSION_REVISION "3"
+#define VERSION_REVISION "4"
 #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
 // server info.
 #define RTMP_SIG_SRS_KEY "SRS"
diff --git a/trunk/src/rtmp/srs_protocol_stack.cpp b/trunk/src/rtmp/srs_protocol_stack.cpp
index ce7222b6c..ccaffb285 100644
--- a/trunk/src/rtmp/srs_protocol_stack.cpp
+++ b/trunk/src/rtmp/srs_protocol_stack.cpp
@@ -1869,11 +1869,17 @@ int SrsConnectAppPacket::decode(SrsStream* stream)
         // the args maybe any amf0, for instance, a string. we should drop if not object.
         SrsAmf0Any* any = NULL;
         if ((ret = SrsAmf0Any::discovery(stream, &any)) != ERROR_SUCCESS) {
-            srs_error("amf0 decode connect args failed. ret=%d", ret);
+            srs_error("amf0 find connect args failed. ret=%d", ret);
             return ret;
         }
         srs_assert(any);
         
+        // read the instance
+        if ((ret = any->read(stream)) != ERROR_SUCCESS) {
+            srs_error("amf0 decode connect args failed. ret=%d", ret);
+            return ret;
+        }
+        
         // drop when not an AMF0 object.
         if (!any->is_object()) {
             srs_warn("drop the args, see: '4.1.1. connect', marker=%#x", any->marker);

From 3c31e6db051b36cdfa71dd4985134a04b21c65ff Mon Sep 17 00:00:00 2001
From: winlin 
Date: Fri, 24 Oct 2014 13:22:35 +0800
Subject: [PATCH 10/26] for bug #186, read the args when discovery it. 1.0.4

---
 trunk/src/rtmp/srs_protocol_stack.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/trunk/src/rtmp/srs_protocol_stack.cpp b/trunk/src/rtmp/srs_protocol_stack.cpp
index ccaffb285..397095b5f 100644
--- a/trunk/src/rtmp/srs_protocol_stack.cpp
+++ b/trunk/src/rtmp/srs_protocol_stack.cpp
@@ -1877,6 +1877,7 @@ int SrsConnectAppPacket::decode(SrsStream* stream)
         // read the instance
         if ((ret = any->read(stream)) != ERROR_SUCCESS) {
             srs_error("amf0 decode connect args failed. ret=%d", ret);
+            srs_freep(any);
             return ret;
         }
         

From 74f7c32e81029aa54daa39a812d7ce0dc3fd99be Mon Sep 17 00:00:00 2001
From: winlin 
Date: Mon, 27 Oct 2014 11:35:09 +0800
Subject: [PATCH 11/26] update readme, add oschina mirror.

---
 README.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/README.md b/README.md
index 1d7e9dfd1..0a19548de 100755
--- a/README.md
+++ b/README.md
@@ -22,6 +22,12 @@ git clone https://github.com/winlinvip/simple-rtmp-server.git
 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) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git)
+
+```bash
+git clone https://git.oschina.net/winlinvip/srs.oschina.git
+```
+
 报告问题(BugReport): [https://github.com/winlinvip/simple-rtmp-server/issues/new](https://github.com/winlinvip/simple-rtmp-server/issues/new)
中文资料(Wiki): [https://github.com/winlinvip/simple-rtmp-server/wiki](https://github.com/winlinvip/simple-rtmp-server/wiki)
使用步骤(Usage): [https://github.com/winlinvip/simple-rtmp-server#usage](#usage)
From 2175102ea27fa581bd21fbefdd590e9a1b09b29f Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 27 Oct 2014 11:41:28 +0800 Subject: [PATCH 12/26] remove the sync script for mirror, which maybe updated. --- trunk/scripts/csdn.mirror.sh | 80 ------------------------------------ 1 file changed, 80 deletions(-) delete mode 100755 trunk/scripts/csdn.mirror.sh diff --git a/trunk/scripts/csdn.mirror.sh b/trunk/scripts/csdn.mirror.sh deleted file mode 100755 index 776e1e8c8..000000000 --- a/trunk/scripts/csdn.mirror.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -echo "更新CSDN镜像的脚本" - -# 创建CSDN镜像的过程如下: -# 1. 在CSDN上创建项目,从https://github.com/winlinvip/simple-rtmp-server拷贝过来。 -# 2. 在本地虚拟机上: -# git clone git@code.csdn.net:winlinvip/srs-csdn.git -# 3. 创建同步的branch: -# git remote add upstream https://github.com/winlinvip/simple-rtmp-server.git -# git fetch upstream -# git checkout upstream/master -b srs.master -# 4. 执行本同步更新脚本,更新。 -# bash scripts/csdn.mirror.sh - -echo "argv[0]=$0" -if [[ ! -f $0 ]]; then - echo "directly execute the scripts on shell."; - work_dir=`pwd` -else - echo "execute scripts in file: $0"; - work_dir=`dirname $0`; work_dir=`(cd ${work_dir} && pwd)` -fi -work_dir=`(cd ${work_dir}/.. && pwd)` -product_dir=$work_dir - -# allow start script from any dir -cd $work_dir - -. ${product_dir}/scripts/_log.sh -ret=$?; if [[ $ret -ne 0 ]]; then exit $ret; fi -ok_msg "导入脚本成功" - -git remote -v|grep code.csdn.net >/dev/null 2>&1 -ret=$?; if [[ 0 -ne $ret ]]; then - failed_msg "当前分支不是CSDN镜像"; - cat < Date: Thu, 6 Nov 2014 14:28:03 +0800 Subject: [PATCH 13/26] use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. --- README.md | 1 + trunk/src/core/srs_core.hpp | 15 +++++++++++---- trunk/src/libs/srs_librtmp.cpp | 6 +++--- trunk/src/main/srs_main_server.cpp | 12 +++++++++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 0a19548de..6aaffca38 100755 --- a/README.md +++ b/README.md @@ -208,6 +208,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v1.0, 2014-11-06, use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. * v1.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 1.0.3. * v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_CN_xxx. 1.0.2. * v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 0e83da968..1b0fb3e60 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -29,10 +29,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // current release version -#define VERSION_MAJOR "1" -#define VERSION_MINOR "0" -#define VERSION_REVISION "4" -#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION +#define VERSION_MAJOR 1 +#define VERSION_MINOR 0 +#define VERSION_REVISION 5 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" @@ -46,6 +45,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define RTMP_SIG_SRS_PRIMARY_AUTHROS "winlin,wenjie.zhao" #define RTMP_SIG_SRS_CONTRIBUTORS_URL RTMP_SIG_SRS_URL"/blob/master/AUTHORS.txt" #define RTMP_SIG_SRS_HANDSHAKE RTMP_SIG_SRS_KEY"("RTMP_SIG_SRS_VERSION")" +#define RTMP_SIG_SRS_RELEASE "https://github.com/winlinvip/simple-rtmp-server/tree/1.0release" +#define RTMP_SIG_SRS_HTTP_SERVER "https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_HTTPServer#feature" +#define RTMP_SIG_SRS_VERSION __SRS_XSTR(VERSION_MAJOR)"."__SRS_XSTR(VERSION_MINOR)"."__SRS_XSTR(VERSION_REVISION) + +// internal macros, covert macro values to str, +// see: read https://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification +#define __SRS_XSTR(v) __SRS_STR(v) +#define __SRS_STR(v) #v /** * the core provides the common defined macros, utilities, diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index c42056c5d..d1838f10e 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -491,17 +491,17 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data, int srs_version_major() { - return ::atoi(VERSION_MAJOR); + return VERSION_MAJOR; } int srs_version_minor() { - return ::atoi(VERSION_MINOR); + return VERSION_MINOR; } int srs_version_revision() { - return ::atoi(VERSION_REVISION); + return VERSION_REVISION; } int64_t srs_get_time_ms() diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index 6cef9d9dd..a178fee18 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -132,6 +132,13 @@ void show_macro_features() #endif } +void check_macro_features() +{ +#if VERSION_MAJOR > 1 + srs_warn("SRS %s is develop branch, please use %s instead", RTMP_SIG_SRS_VERSION, RTMP_SIG_SRS_RELEASE); +#endif +} + /** * main entrance. */ @@ -149,14 +156,12 @@ int main(int argc, char** argv) ProfilerStart("gperf.srs.gcp"); #endif -#ifdef SRS_AUTO_GPERF_MC - #ifdef SRS_AUTO_GPERF_MP +#if defined(SRS_AUTO_GPERF_MC) && defined(SRS_AUTO_GPERF_MP) srs_error("option --with-gmc confict with --with-gmp, " "@see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html\n" "Note that since the heap-checker uses the heap-profiling framework internally, " "it is not possible to run both the heap-checker and heap profiler at the same time"); return -1; - #endif #endif // never use srs log(srs_trace, srs_error, etc) before config parse the option, @@ -190,6 +195,7 @@ int main(int argc, char** argv) // features show_macro_features(); + check_macro_features(); // for special features. #ifdef SRS_AUTO_HTTP_SERVER From eba1740ed5e52035d8f0e22f10dd064413ab1850 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 13 Nov 2014 14:48:21 +0800 Subject: [PATCH 14/26] hotfix #200, deadloop when read/write 0 and ETIME. 1.0.6. --- README.md | 5 ++- trunk/src/app/srs_app_st_socket.cpp | 18 ++++++-- trunk/src/core/srs_core.hpp | 2 +- trunk/src/libs/srs_lib_simple_socket.cpp | 54 ++++++++++++++++-------- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 6aaffca38..2ae2b9435 100755 --- a/README.md +++ b/README.md @@ -208,10 +208,11 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v2.0, 2014-11-13, hotfix [#200](https://github.com/winlinvip/simple-rtmp-server/issues/200), deadloop when read/write 0 and ETIME. 1.0.6. * v1.0, 2014-11-06, use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. -* v1.0, 2014-10-24, fix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), hotfix for bug #186, drop connect args when not object. 1.0.3. +* v1.0, 2014-10-24, hotfix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), drop connect args when not object. 1.0.3. * v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_CN_xxx. 1.0.2. -* v1.0, 2014-10-19, fix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), hotfix for bug #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1. +* v1.0, 2014-10-19, hotfix [#183](https://github.com/winlinvip/simple-rtmp-server/issues/183), donot support AnnexB when decoding RTMP body for HLS. 1.0.1. * v1.0, 2014-10-09, [1.0 beta(1.0.0)](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta) released. 59316 lines. * v1.0, 2014-10-08, fix [#151](https://github.com/winlinvip/simple-rtmp-server/issues/151), always reap ts whatever audio or video packet. 0.9.223. * v1.0, 2014-10-08, fix [#162](https://github.com/winlinvip/simple-rtmp-server/issues/162), failed if no epoll. 0.9.222. diff --git a/trunk/src/app/srs_app_st_socket.cpp b/trunk/src/app/srs_app_st_socket.cpp index e1c8e63cf..92618fdfc 100644 --- a/trunk/src/app/srs_app_st_socket.cpp +++ b/trunk/src/app/srs_app_st_socket.cpp @@ -82,8 +82,10 @@ int SrsStSocket::read(void* buf, size_t size, ssize_t* nread) // On success a non-negative integer indicating the number of bytes actually read is returned // (a value of 0 means the network connection is closed or end of file is reached). + // Otherwise, a value of -1 is returned and errno is set to indicate the error. if (nb_read <= 0) { - if (errno == ETIME) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_read < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } @@ -110,8 +112,10 @@ int SrsStSocket::read_fully(void* buf, size_t size, ssize_t* nread) // On success a non-negative integer indicating the number of bytes actually read is returned // (a value less than nbyte means the network connection is closed or end of file is reached) + // Otherwise, a value of -1 is returned and errno is set to indicate the error. if (nb_read != (ssize_t)size) { - if (errno == ETIME) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_read < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } @@ -136,8 +140,11 @@ int SrsStSocket::write(void* buf, size_t size, ssize_t* nwrite) *nwrite = nb_write; } + // On success a non-negative integer equal to nbyte is returned. + // Otherwise, a value of -1 is returned and errno is set to indicate the error. if (nb_write <= 0) { - if (errno == ETIME) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_write < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } @@ -158,8 +165,11 @@ int SrsStSocket::writev(const iovec *iov, int iov_size, ssize_t* nwrite) *nwrite = nb_write; } + // On success a non-negative integer equal to nbyte is returned. + // Otherwise, a value of -1 is returned and errno is set to indicate the error. if (nb_write <= 0) { - if (errno == ETIME) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_write < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 1b0fb3e60..bd339e733 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 1 #define VERSION_MINOR 0 -#define VERSION_REVISION 5 +#define VERSION_REVISION 6 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" diff --git a/trunk/src/libs/srs_lib_simple_socket.cpp b/trunk/src/libs/srs_lib_simple_socket.cpp index 202155503..cc8476778 100644 --- a/trunk/src/libs/srs_lib_simple_socket.cpp +++ b/trunk/src/libs/srs_lib_simple_socket.cpp @@ -82,23 +82,27 @@ int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread) { int ret = ERROR_SUCCESS; - *nread = ::recv(fd, buf, size, 0); + ssize_t nb_read = ::recv(fd, buf, size, 0); + + if (nread) { + *nread = nb_read; + } // On success a non-negative integer indicating the number of bytes actually read is returned // (a value of 0 means the network connection is closed or end of file is reached). - if (*nread <= 0) { - if (errno == ETIME) { + if (nb_read <= 0) { + if (nb_read < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } - if (*nread == 0) { + if (nb_read == 0) { errno = ECONNRESET; } return ERROR_SOCKET_READ; } - recv_bytes += *nread; + recv_bytes += nb_read; return ret; } @@ -139,17 +143,25 @@ int SimpleSocketStream::writev(const iovec *iov, int iov_size, ssize_t* nwrite) { int ret = ERROR_SUCCESS; - *nwrite = ::writev(fd, iov, iov_size); + ssize_t nb_write = ::writev(fd, iov, iov_size); - if (*nwrite <= 0) { - if (errno == ETIME) { + if (nwrite) { + *nwrite = nb_write; + } + + // On success, the readv() function returns the number of bytes read; + // the writev() function returns the number of bytes written. On error, -1 is + // returned, and errno is set appropriately. + if (nb_write <= 0) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_write < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } return ERROR_SOCKET_WRITE; } - send_bytes += *nwrite; + send_bytes += nb_write; return ret; } @@ -165,21 +177,24 @@ int SimpleSocketStream::read_fully(void* buf, size_t size, ssize_t* nread) int ret = ERROR_SUCCESS; size_t left = size; - *nread = 0; + ssize_t nb_read = 0; while (left > 0) { - char* this_buf = (char*)buf + *nread; + char* this_buf = (char*)buf + nb_read; ssize_t this_nread; if ((ret = this->read(this_buf, left, &this_nread)) != ERROR_SUCCESS) { return ret; } - *nread += this_nread; + nb_read += this_nread; left -= this_nread; } - recv_bytes += *nread; + if (nread) { + *nread = nb_read; + } + recv_bytes += nb_read; return ret; } @@ -188,17 +203,22 @@ int SimpleSocketStream::write(void* buf, size_t size, ssize_t* nwrite) { int ret = ERROR_SUCCESS; - *nwrite = ::send(fd, (void*)buf, size, 0); + ssize_t nb_write = ::send(fd, (void*)buf, size, 0); - if (*nwrite <= 0) { - if (errno == ETIME) { + if (nwrite) { + *nwrite = nb_write; + } + + if (nb_write <= 0) { + // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 + if (nb_write < 0 && errno == ETIME) { return ERROR_SOCKET_TIMEOUT; } return ERROR_SOCKET_WRITE; } - send_bytes += *nwrite; + send_bytes += nb_write; return ret; } From 8878367505b1f80ff34e2ace1db4533c24fd5066 Mon Sep 17 00:00:00 2001 From: winlin Date: Sat, 15 Nov 2014 21:24:47 +0800 Subject: [PATCH 15/26] update readme for wiki --- README.md | 273 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 214 insertions(+), 59 deletions(-) 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 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 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 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/trunk
 
See 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:
+[http://winlinvip.github.io/srs.release/donation/index.html](http://winlinvip.github.io/srs.release/donation/index.html) OR
+[http://www.ossrs.net/srs.release/donation/index.html](http://www.ossrs.net/srs.release/donation/index.html) Donations:
-[https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt](https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt) +[https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt] +(https://github.com/winlinvip/simple-rtmp-server/blob/master/DONATIONS.txt) ## System Requirements Supported operating systems and hardware: @@ -176,6 +351,8 @@ Supported operating systems and hardware: 1. 全面的Utest:Support system full utest on gtest. 1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHTTP) for hls(live/vod) 1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FlvVodStream). +1. Stable [1.0release branch](https://github.com/winlinvip/simple-rtmp-server/tree/1.0release) and +[2.0dev branch](https://github.com/winlinvip/simple-rtmp-server/tree/master). 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). 1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/winlinvip/simple-rtmp-server/issues/92). 1. [no-plan] Support multiple processes, for both origin and edge @@ -208,7 +385,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History -* v2.0, 2014-11-13, hotfix [#200](https://github.com/winlinvip/simple-rtmp-server/issues/200), deadloop when read/write 0 and ETIME. 1.0.6. +* v1.0, 2014-11-13, hotfix [#200](https://github.com/winlinvip/simple-rtmp-server/issues/200), deadloop when read/write 0 and ETIME. 1.0.6. * v1.0, 2014-11-06, use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. * v1.0, 2014-10-24, hotfix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), drop connect args when not object. 1.0.3. * v1.0, 2014-10-24, rename wiki/xxx to wiki/v1_CN_xxx. 1.0.2. @@ -404,11 +581,12 @@ Supported operating systems and hardware: Performance benchmark history, on virtual box: -* 2014-07-12, SRS 0.9.156, 2700clients, 89%CPU, 61MB. [benchmark](https://github.com/winlinvip/simple-rtmp-server/commit/6d12280b7cc54c465b1caf8b1402149e77c4c7d9) +* 2013-11-28, SRS 0.5.0, 1800clients, 90%CPU, 41MB. [benchmark](https://github.com/winlinvip/simple-rtmp-server/commit/023e23bc8261bec15a70a7ae932098fb4f82b679) * 2014-07-12, SRS 0.9.156, 1800clients, 68%CPU, 38MB. [benchmark](https://github.com/winlinvip/simple-rtmp-server/commit/e2d273f4939348374bf9644df9d54c4293b39c1a) -* 2013-11-28, SRS 0.5.0, 1800clients, 90%CPU, 41MB. [benchmark](https://github.com/winlinvip/simple-rtmp-server/commit/023e23bc8261bec15a70a7ae932098fb4f82b679) +* 2014-07-12, SRS 0.9.156, 2700clients, 89%CPU, 61MB. [benchmark](https://github.com/winlinvip/simple-rtmp-server/commit/6d12280b7cc54c465b1caf8b1402149e77c4c7d9) +* 2014-11-11, SRS 1.0.5, 2700clients, 85%CPU, 66MB. (1.0 equals 2.0.12) -Latest benchmark: +Latest benchmark(2014-07-12): 1. 300 connections, 150Mbps, 500kbps, CPU 5.7%, MEM 9208KB. 1. 600 connections, 300Mbps, 500kbps, CPU 18.3%, MEM 13MB. @@ -582,30 +760,7 @@ Remark: (b) The CLI architecture is similar to this, instead, cli process will collect informations from all stream process, master process only send signals to child processes. - - -### (plan) CLI Architecture - -
-                       +---------+
-                    +--+ 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 From 2599165f905e45afb8cc80635ee26b769a1fe498 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 16 Nov 2014 12:11:11 +0800 Subject: [PATCH 16/26] update 1.0release readme, remove the unstable features. --- README.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/README.md b/README.md index 1d68f9874..e62766e3f 100755 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ 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)( +high-performance(2.7k+ 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) ), @@ -349,20 +349,8 @@ Supported operating systems and hardware: 1. 可追溯日志:Support [tracable log, session based log](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SrsLog). 1. 支持FMS-Token穿越:Support DRM [token traverse](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_DRM#tokentraverse) for fms origin authenticate. 1. 全面的Utest:Support system full utest on gtest. -1. (不稳定)内嵌HTTP服务器:[experiment] Support embeded [HTTP server](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_SampleHTTP) for hls(live/vod) -1. (不稳定)FLV点播流:[experiment] Support [vod stream(http flv/hls vod stream)](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_FlvVodStream). 1. Stable [1.0release branch](https://github.com/winlinvip/simple-rtmp-server/tree/1.0release) and [2.0dev branch](https://github.com/winlinvip/simple-rtmp-server/tree/master). -1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). -1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/winlinvip/simple-rtmp-server/issues/92). -1. [no-plan] Support multiple processes, for both origin and edge -1. [no-plan] Support adobe RTMFP(flash p2p) protocol. -1. [no-plan] Support adobe flash refer/token/swf verification. -1. [no-plan] Support adobe amf3 codec. -1. [no-plan] Support encryption: RTMPE/RTMPS, HLS DRM -1. [no-plan] Support RTMPT, http to tranverse firewalls -1. [no-plan] Support file source, transcoding file to live stream -1. [no-plan] Support RTP/RTSP server. ## Releases * 2014-10-09, [Release v1.0-beta](https://github.com/winlinvip/simple-rtmp-server/releases/tag/1.0.beta), all bug fixed, 1.0.0, 59316 lines.
From 7f987bb2a03a54738e7df5bc030b165966308716 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 16 Nov 2014 21:08:36 +0800 Subject: [PATCH 17/26] update readme, add qq group. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e62766e3f..0c3db62f4 100755 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ SRS定位是运营级的互联网直播服务器集群,追求更好的概念 下载发布版(国内阿里云镜像): [Centos6-x86_64](http://www.ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.0.zip) 其他[more...](http://www.ossrs.net/srs.release/releases/)
+QQ群: [365936885, by wenjie](http://jq.qq.com/?_wv=1027&k=SvTiJl)
同类产品:[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) 获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git) From a7faf5456791d62a749323f2396c8f06a02ba797 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 16 Nov 2014 21:11:10 +0800 Subject: [PATCH 18/26] update readme, add qq group. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c3db62f4..450ea400b 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ SRS定位是运营级的互联网直播服务器集群,追求更好的概念 下载发布版(国内阿里云镜像): [Centos6-x86_64](http://www.ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-1.0.0.zip) 其他[more...](http://www.ossrs.net/srs.release/releases/)
-QQ群: [365936885, by wenjie](http://jq.qq.com/?_wv=1027&k=SvTiJl)
+QQ群: 365936885, by wenjie
同类产品:[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) 获得源码(github): [https://github.com/winlinvip/simple-rtmp-server](https://github.com/winlinvip/simple-rtmp-server) [GIT使用方法](https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_Git) From c1e9aed0ac86ed2f2740c23996a03895f36a6c1b Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 18 Nov 2014 13:41:36 +0800 Subject: [PATCH 19/26] all wiki translated to English. 1.0.7 --- README.md | 1 + trunk/src/core/srs_core.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 450ea400b..b2170490c 100755 --- a/README.md +++ b/README.md @@ -374,6 +374,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v1.0, 2014-11-18, all wiki translated to English. 1.0.7. * v1.0, 2014-11-13, hotfix [#200](https://github.com/winlinvip/simple-rtmp-server/issues/200), deadloop when read/write 0 and ETIME. 1.0.6. * v1.0, 2014-11-06, use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. * v1.0, 2014-10-24, hotfix [#186](https://github.com/winlinvip/simple-rtmp-server/issues/186), drop connect args when not object. 1.0.3. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index bd339e733..c59e2f52e 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 1 #define VERSION_MINOR 0 -#define VERSION_REVISION 6 +#define VERSION_REVISION 7 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" From 32cf44e5bbeb192cb6a9bfae5c9f400d83c9e867 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 10:01:14 +0800 Subject: [PATCH 20/26] update PRIMARY, AUTHORS, CONTRIBUTORS rule --- AUTHORS.txt | 29 ++++++++++++++++------------- README.md | 20 +++++++++----------- 2 files changed, 25 insertions(+), 24 deletions(-) mode change 100755 => 100644 AUTHORS.txt diff --git a/AUTHORS.txt b/AUTHORS.txt old mode 100755 new mode 100644 index b148da659..ac4806f57 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,14 +1,17 @@ -Authors ordered by first contribution. +PRIMARY ordered by first contribution. +* winlin "Plan, arch, implement SRS1.0 and SRS2.0" -* winlin -* wenjie.zhao<740936897@qq.com> -* xiangcheng.liu -* naijia.liu -* alcoholyi -* byteman -* chad.wang -* suhetao -* Johnny -* karthikeyan -* StevenLiu -* zhengfl +AUTHORS ordered by first contribution. +* wenjie.zhao<740936897@qq.com> "The bandwidth test module" + +CONTRIBUTORS ordered by first contribution. +* xiangcheng.liu "Bug fixed" +* naijia.liu "Performance benchmark" +* alcoholyi "Bug fixed" +* byteman "Bug fixed" +* chad.wang "Bug fixed" +* suhetao "Bug fixed" +* Johnny "Create domain ossrs.net" +* karthikeyan "Bug fixed" +* StevenLiu "Build SRS on Darwin OSX" +* zhengfl "Bug fixed" diff --git a/README.md b/README.md index b2170490c..d8a28b341 100755 --- a/README.md +++ b/README.md @@ -162,19 +162,17 @@ StreamServers:[BLS](https://github.com/wenjiegit/Bull-Live-Server)/[BLE](https [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): -* winlin([winterserver](#)): [http://blog.csdn.net/win_lin](http://blog.csdn.net/win_lin) -* wenjie([wenjiegit](https://github.com/wenjiegit/simple-rtmp-server)): [http://blog.chinaunix.net/uid/25006789.html](http://blog.chinaunix.net/uid/25006789.html) -About the primary AUTHORS: -* Contribute important features to SRS. -* Names of all PRIMARY AUTHORS response in NetConnection.connect and metadata. -* Names of all CONTRIBUTORS response in api/v1/authors. +There are three types of people that have contributed to the SRS project: +* PRIMARY: Contribute important features and >10% code. Names of all +PRIMARY response in NetConnection.connect and metadata. +* AUTHORS: Contribute features and 1%~10% code. Names of all +PRIMARY response in NetConnection.connect and metadata. +* CONTRIBUTORS: Submit patches, report bugs, add translations, help answer +newbie questions, and generally make SRS that much better. -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) +About all PRIMARY, AUTHORS and CONTRIBUTORS, read +[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). From 44962c9142a53554cdf6bcba74d7d5ef6e3e4e85 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 10:06:26 +0800 Subject: [PATCH 21/26] update PRIMARY, AUTHORS, CONTRIBUTORS rule --- AUTHORS.txt | 5 +++++ trunk/src/app/srs_app_config.cpp | 3 ++- trunk/src/app/srs_app_edge.cpp | 6 ++++-- trunk/src/app/srs_app_forward.cpp | 3 ++- trunk/src/app/srs_app_http_api.cpp | 3 ++- trunk/src/app/srs_app_source.cpp | 3 ++- trunk/src/core/srs_core.hpp | 3 ++- trunk/src/main/srs_main_server.cpp | 3 ++- trunk/src/rtmp/srs_protocol_rtmp.cpp | 3 ++- 9 files changed, 23 insertions(+), 9 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index ac4806f57..07f3b07d0 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,3 +1,8 @@ +There are three types of people that have contributed to the SRS project: +1. PRIMARY: Contribute important features and >10% code. Names of all PRIMARY response in NetConnection.connect and metadata. +2. AUTHORS: Contribute features and 1%~10% code. Names of all PRIMARY response in NetConnection.connect and metadata. +3. CONTRIBUTORS: Submit patches, report bugs, add translations, help answer newbie questions, and generally make SRS that much better. + PRIMARY ordered by first contribution. * winlin "Plan, arch, implement SRS1.0 and SRS2.0" diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index a0facee1a..904d2cb39 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -1167,7 +1167,8 @@ void SrsConfig::print_help(char** argv) printf( RTMP_SIG_SRS_NAME" "RTMP_SIG_SRS_VERSION" "RTMP_SIG_SRS_COPYRIGHT"\n" "license: "RTMP_SIG_SRS_LICENSE"\n" - "Primary Authors: "RTMP_SIG_SRS_PRIMARY_AUTHROS"\n" + "Primary: "RTMP_SIG_SRS_PRIMARY"\n" + "Authors: "RTMP_SIG_SRS_AUTHROS"\n" "Build: "SRS_AUTO_BUILD_DATE" Configuration:"SRS_AUTO_USER_CONFIGURE"\n" "Features:"SRS_AUTO_CONFIGURE"\n""\n" "Usage: %s [-h?vV] [[-t] -c ]\n" diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index cb8d40404..b85585f45 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -230,7 +230,8 @@ int SrsEdgeIngester::connect_app(string ep_server, string ep_port) data->set("srs_site", SrsAmf0Any::str(RTMP_SIG_SRS_WEB)); data->set("srs_email", SrsAmf0Any::str(RTMP_SIG_SRS_EMAIL)); data->set("srs_copyright", SrsAmf0Any::str(RTMP_SIG_SRS_COPYRIGHT)); - data->set("srs_primary_authors", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY_AUTHROS)); + data->set("srs_primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); + data->set("srs_authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); // for edge to directly get the id of client. data->set("srs_pid", SrsAmf0Any::number(getpid())); data->set("srs_id", SrsAmf0Any::number(_srs_context->get_id())); @@ -661,7 +662,8 @@ int SrsEdgeForwarder::connect_app(string ep_server, string ep_port) data->set("srs_site", SrsAmf0Any::str(RTMP_SIG_SRS_WEB)); data->set("srs_email", SrsAmf0Any::str(RTMP_SIG_SRS_EMAIL)); data->set("srs_copyright", SrsAmf0Any::str(RTMP_SIG_SRS_COPYRIGHT)); - data->set("srs_primary_authors", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY_AUTHROS)); + data->set("srs_primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); + data->set("srs_authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); // for edge to directly get the id of client. data->set("srs_pid", SrsAmf0Any::number(getpid())); data->set("srs_id", SrsAmf0Any::number(_srs_context->get_id())); diff --git a/trunk/src/app/srs_app_forward.cpp b/trunk/src/app/srs_app_forward.cpp index 3a54dd618..39066fa7a 100644 --- a/trunk/src/app/srs_app_forward.cpp +++ b/trunk/src/app/srs_app_forward.cpp @@ -344,7 +344,8 @@ int SrsForwarder::connect_app(string ep_server, string ep_port) data->set("srs_site", SrsAmf0Any::str(RTMP_SIG_SRS_WEB)); data->set("srs_email", SrsAmf0Any::str(RTMP_SIG_SRS_EMAIL)); data->set("srs_copyright", SrsAmf0Any::str(RTMP_SIG_SRS_COPYRIGHT)); - data->set("srs_primary_authors", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY_AUTHROS)); + data->set("srs_primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); + data->set("srs_authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); // for edge to directly get the id of client. data->set("srs_pid", SrsAmf0Any::number(getpid())); data->set("srs_id", SrsAmf0Any::number(_srs_context->get_id())); diff --git a/trunk/src/app/srs_app_http_api.cpp b/trunk/src/app/srs_app_http_api.cpp index bbbcfab53..cd0ea5d17 100644 --- a/trunk/src/app/srs_app_http_api.cpp +++ b/trunk/src/app/srs_app_http_api.cpp @@ -490,7 +490,8 @@ int SrsApiAuthors::do_process_request(SrsStSocket* skt, SrsHttpMessage* req) ss << __SRS_JOBJECT_START << __SRS_JFIELD_ERROR(ERROR_SUCCESS) << __SRS_JFIELD_CONT << __SRS_JFIELD_ORG("data", __SRS_JOBJECT_START) - << __SRS_JFIELD_STR("primary_authors", RTMP_SIG_SRS_PRIMARY_AUTHROS) << __SRS_JFIELD_CONT + << __SRS_JFIELD_STR("primary", RTMP_SIG_SRS_PRIMARY) << __SRS_JFIELD_CONT + << __SRS_JFIELD_STR("authors", RTMP_SIG_SRS_AUTHROS) << __SRS_JFIELD_CONT << __SRS_JFIELD_STR("contributors_link", RTMP_SIG_SRS_CONTRIBUTORS_URL) << __SRS_JFIELD_CONT << __SRS_JFIELD_STR("contributors", SRS_AUTO_CONSTRIBUTORS) << __SRS_JOBJECT_END diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 64fd2d0e0..aab8a9513 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -957,7 +957,8 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) // add server info to metadata metadata->metadata->set("server", SrsAmf0Any::str(RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); - metadata->metadata->set("authors", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY_AUTHROS)); + metadata->metadata->set("primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); + metadata->metadata->set("authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); // version, for example, 1.0.0 // add version to metadata, please donot remove it, for debug. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index c59e2f52e..a1499d704 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -42,7 +42,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define RTMP_SIG_SRS_EMAIL "winlin@vip.126.com" #define RTMP_SIG_SRS_LICENSE "The MIT License (MIT)" #define RTMP_SIG_SRS_COPYRIGHT "Copyright (c) 2013-2014 winlin" -#define RTMP_SIG_SRS_PRIMARY_AUTHROS "winlin,wenjie.zhao" +#define RTMP_SIG_SRS_PRIMARY "winlin" +#define RTMP_SIG_SRS_AUTHROS "wenjie.zhao" #define RTMP_SIG_SRS_CONTRIBUTORS_URL RTMP_SIG_SRS_URL"/blob/master/AUTHORS.txt" #define RTMP_SIG_SRS_HANDSHAKE RTMP_SIG_SRS_KEY"("RTMP_SIG_SRS_VERSION")" #define RTMP_SIG_SRS_RELEASE "https://github.com/winlinvip/simple-rtmp-server/tree/1.0release" diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index a178fee18..fb185abcc 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -182,7 +182,8 @@ int main(int argc, char** argv) srs_trace("srs(simple-rtmp-server) "RTMP_SIG_SRS_VERSION); srs_trace("license: "RTMP_SIG_SRS_LICENSE); - srs_trace("authors: "RTMP_SIG_SRS_PRIMARY_AUTHROS); + srs_trace("primary: "RTMP_SIG_SRS_PRIMARY); + srs_trace("authors: "RTMP_SIG_SRS_AUTHROS); srs_trace("contributors: "SRS_AUTO_CONSTRIBUTORS); srs_trace("uname: "SRS_AUTO_UNAME); srs_trace("build: %s, %s", SRS_AUTO_BUILD_DATE, srs_is_little_endian()? "little-endian":"big-endian"); diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index 304b59a78..f9dd64518 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -908,7 +908,8 @@ int SrsRtmpServer::response_connect_app(SrsRequest *req, const char* server_ip) data->set("srs_site", SrsAmf0Any::str(RTMP_SIG_SRS_WEB)); data->set("srs_email", SrsAmf0Any::str(RTMP_SIG_SRS_EMAIL)); data->set("srs_copyright", SrsAmf0Any::str(RTMP_SIG_SRS_COPYRIGHT)); - data->set("srs_primary_authors", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY_AUTHROS)); + data->set("srs_primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY)); + data->set("srs_authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS)); if (server_ip) { data->set("srs_server_ip", SrsAmf0Any::str(server_ip)); From d672fae255c242be7f98811df72782fb23aaef93 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 10:07:41 +0800 Subject: [PATCH 22/26] update PRIMARY, AUTHORS, CONTRIBUTORS rule. 1.0.8 --- README.md | 1 + trunk/src/core/srs_core.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d8a28b341..225b23c15 100755 --- a/README.md +++ b/README.md @@ -372,6 +372,7 @@ Supported operating systems and hardware: * 2013-10-17, Created.
## History +* v1.0, 2014-11-25, update PRIMARY, AUTHORS, CONTRIBUTORS of SRS. 1.0.8. * v1.0, 2014-11-18, all wiki translated to English. 1.0.7. * v1.0, 2014-11-13, hotfix [#200](https://github.com/winlinvip/simple-rtmp-server/issues/200), deadloop when read/write 0 and ETIME. 1.0.6. * v1.0, 2014-11-06, use number for macro VERSION_MAJOR, VERSION_MINOR and VERSION_REVISION. 1.0.5. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index a1499d704..6e0ebacef 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 1 #define VERSION_MINOR 0 -#define VERSION_REVISION 7 +#define VERSION_REVISION 8 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" From db7af6259a1d0481cce6a9597597eb1a81356b0f Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 10:50:25 +0800 Subject: [PATCH 23/26] update PRIMARY, AUTHORS, CONTRIBUTORS rule --- .../players/srs_bwt/src/SrsBandwidth.as | 21 +++++++++------- .../players/srs_bwt/src/srs.bandwidth.js | 10 ++++---- trunk/research/players/srs_bwt/src/srs_bwt.as | 13 ++++++---- .../players/srs_player/src/srs_player.as | 24 +++++++++++++------ .../srs_publisher/src/srs_publisher.as | 17 +++++++++---- trunk/src/libs/srs_librtmp.cpp | 13 ++++++---- trunk/src/libs/srs_librtmp.hpp | 6 +++-- trunk/src/rtmp/srs_protocol_rtmp.cpp | 12 ++++++---- trunk/src/rtmp/srs_protocol_rtmp.hpp | 8 ++++--- 9 files changed, 80 insertions(+), 44 deletions(-) diff --git a/trunk/research/players/srs_bwt/src/SrsBandwidth.as b/trunk/research/players/srs_bwt/src/SrsBandwidth.as index 2df4420f6..68806ceee 100755 --- a/trunk/research/players/srs_bwt/src/SrsBandwidth.as +++ b/trunk/research/players/srs_bwt/src/SrsBandwidth.as @@ -88,9 +88,10 @@ package * "", otherwise empty string. * @param as_on_progress_change, function(percent:Number):void, where: * percent, the progress percent, 0 means 0%, 100 means 100%. - * @param as_on_srs_info, function(srs_server:String, srs_primary_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void, where: + * @param as_on_srs_info, function(srs_server:String, srs_primary:String, srs_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void, where: * srs_server: the srs server info. - * srs_primary_authors: the srs version info. + * srs_primary: the srs primary authors info. + * srs_authors: the srs authors info. * srs_id: the tracable log id, to direclty grep the log.. * srs_pid: the srs process id, to direclty grep the log. * srs_server_ip: the srs server ip, where client connected at. @@ -112,7 +113,7 @@ package * @param js_on_ready, function(js_id:String):void, callback when bandwidth tool is ready to run. * @param js_on_status_change, function(js_id:String, code:String, data:String):void * @param as_on_progress_change, function(js_id:String, percent:Number):void - * @param as_on_srs_info, function(js_id:String, srs_server:String, srs_primary_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void + * @param as_on_srs_info, function(js_id:String, srs_server:String, srs_primary:String, srs_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void * @param as_on_complete, function(js_id:String, start_time:Number, end_time:Number, play_kbps:Number, publish_kbps:Number, play_bytes:Number, publish_bytes:Number, play_time:Number, publish_time:Number):void * * the js export functions. @@ -268,7 +269,8 @@ package * srs debug infos */ private var srs_server:String = null; - private var srs_primary_authors:String = null; + private var srs_primary:String = null; + private var srs_authors:String = null; private var srs_id:String = null; private var srs_pid:String = null; private var srs_server_ip:String = null; @@ -486,8 +488,11 @@ package if (evt.info.data.hasOwnProperty("srs_server")) { srs_server = evt.info.data.srs_server; } - if (evt.info.data.hasOwnProperty("srs_primary_authors")) { - srs_primary_authors = evt.info.data.srs_primary_authors; + if (evt.info.data.hasOwnProperty("srs_primary")) { + srs_primary = evt.info.data.srs_primary; + } + if (evt.info.data.hasOwnProperty("srs_authors")) { + srs_authors = evt.info.data.srs_authors; } if (evt.info.data.hasOwnProperty("srs_id")) { srs_id = evt.info.data.srs_id; @@ -500,11 +505,11 @@ package } if (this.as_on_srs_info != null) { - this.as_on_srs_info(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip); + this.as_on_srs_info(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); } if (this.js_on_srs_info != null) { flash.external.ExternalInterface.call(this.js_on_srs_info, this.js_id, - srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip); + srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); } } if (evt.info.code) { diff --git a/trunk/research/players/srs_bwt/src/srs.bandwidth.js b/trunk/research/players/srs_bwt/src/srs.bandwidth.js index fff46d247..e7abef214 100755 --- a/trunk/research/players/srs_bwt/src/srs.bandwidth.js +++ b/trunk/research/players/srs_bwt/src/srs.bandwidth.js @@ -39,9 +39,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. bandwidth.on_update_status = function(status) { // console.log(status); } - bandwidth.on_srs_info = function(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip) { + bandwidth.on_srs_info = function(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip) { // console.log( - // "server:" + srs_server + ", authors:" + srs_primary_authors + + // "server:" + srs_server + ", primary:" + srs_primary + ", authors:" + srs_authors + // ", srs_id:" + srs_id + ", srs_pid:" + srs_pid + ", ip:" + srs_server_ip //); } @@ -160,7 +160,7 @@ SrsBandwidth.prototype.on_update_progress = function(percent) { } SrsBandwidth.prototype.on_update_status = function(status) { } -SrsBandwidth.prototype.on_srs_info = function(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip) { +SrsBandwidth.prototype.on_srs_info = function(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip) { } SrsBandwidth.prototype.on_complete = function(start_time, end_time, play_kbps, publish_kbps, play_bytes, publish_bytes, play_time, publish_time) { } @@ -233,11 +233,11 @@ function __srs_on_update_status(id, code, data) { bandwidth.status = status; bandwidth.on_update_status(status); } -function __srs_on_srs_info(id, srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip) { +function __srs_on_srs_info(id, srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip) { var bandwidth = __srs_find_bandwidth(id); bandwidth.status = status; bandwidth.server = srs_server_ip; - bandwidth.on_srs_info(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip); + bandwidth.on_srs_info(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); } function __srs_on_complete(id, start_time, end_time, play_kbps, publish_kbps, play_bytes, publish_bytes, play_time, publish_time) { var bandwidth = __srs_find_bandwidth(id); diff --git a/trunk/research/players/srs_bwt/src/srs_bwt.as b/trunk/research/players/srs_bwt/src/srs_bwt.as index 26a01115d..dc8eb95e7 100755 --- a/trunk/research/players/srs_bwt/src/srs_bwt.as +++ b/trunk/research/players/srs_bwt/src/srs_bwt.as @@ -101,8 +101,8 @@ package var as_on_progress_change:Function = function(percent:Number):void { self.on_progress(percent); }; - var as_on_srs_info:Function = function(srs_server:String, srs_primary_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void { - self.update_context_items(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip); + var as_on_srs_info:Function = function(srs_server:String, srs_primary, srs_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String):void { + self.update_context_items(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); }; var as_on_complete:Function = function(start_time:Number, end_time:Number, play_kbps:Number, publish_kbps:Number, play_bytes:Number, publish_bytes:Number, play_time:Number, publish_time:Number):void { self.on_complete(start_time, end_time, play_kbps, publish_kbps, play_bytes, publish_bytes, play_time, publish_time); @@ -130,7 +130,7 @@ package trace("progress:" + percent + "%"); } private function update_context_items( - srs_server:String, srs_primary_authors:String, + srs_server:String, srs_primary:String, srs_authors:String, srs_id:String, srs_pid:String, srs_server_ip:String ):void { // for context menu @@ -138,8 +138,11 @@ package if (srs_server != null) { customItems.push(new ContextMenuItem("Server: " + srs_server)); } - if (srs_primary_authors != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary_authors)); + if (srs_primary != null) { + customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + } + if (srs_authors != null) { + customItems.push(new ContextMenuItem("Authors: " + srs_authors)); } if (srs_server_ip != null) { customItems.push(new ContextMenuItem("SrsIp: " + srs_server_ip)); diff --git a/trunk/research/players/srs_player/src/srs_player.as b/trunk/research/players/srs_player/src/srs_player.as index a8fa5ec2c..e69f2c97e 100755 --- a/trunk/research/players/srs_player/src/srs_player.as +++ b/trunk/research/players/srs_player/src/srs_player.as @@ -152,8 +152,11 @@ package if (srs_server != null) { obj.server = srs_server; } - if (srs_primary_authors != null) { - obj.contributor = srs_primary_authors; + if (srs_primary != null) { + obj.contributor = srs_primary; + } + if (srs_authors != null) { + obj.contributor = srs_authors; } var code:int = flash.external.ExternalInterface.call(js_on_player_metadata, js_id, obj); @@ -267,7 +270,8 @@ package // srs infos private var srs_server:String = null; - private var srs_primary_authors:String = null; + private var srs_primary:String = null; + private var srs_authors:String = null; private var srs_id:String = null; private var srs_pid:String = null; private var srs_server_ip:String = null; @@ -277,8 +281,11 @@ package if (srs_server != null) { customItems.push(new ContextMenuItem("Server: " + srs_server)); } - if (srs_primary_authors != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary_authors)); + if (srs_primary != null) { + customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + } + if (srs_authors != null) { + customItems.push(new ContextMenuItem("Authors: " + srs_authors)); } if (srs_server_ip != null) { customItems.push(new ContextMenuItem("SrsIp: " + srs_server_ip)); @@ -318,8 +325,11 @@ package if (evt.info.data.hasOwnProperty("srs_server")) { srs_server = evt.info.data.srs_server; } - if (evt.info.data.hasOwnProperty("srs_primary_authors")) { - srs_primary_authors = evt.info.data.srs_primary_authors; + if (evt.info.data.hasOwnProperty("srs_primary")) { + srs_primary = evt.info.data.srs_primary; + } + if (evt.info.data.hasOwnProperty("srs_authors")) { + srs_authors = evt.info.data.srs_authors; } if (evt.info.data.hasOwnProperty("srs_id")) { srs_id = evt.info.data.srs_id; diff --git a/trunk/research/players/srs_publisher/src/srs_publisher.as b/trunk/research/players/srs_publisher/src/srs_publisher.as index 03c7d3918..2669e708b 100755 --- a/trunk/research/players/srs_publisher/src/srs_publisher.as +++ b/trunk/research/players/srs_publisher/src/srs_publisher.as @@ -136,7 +136,8 @@ package // srs infos private var srs_server:String = null; - private var srs_primary_authors:String = null; + private var srs_primary:String = null; + private var srs_authors:String = null; private var srs_id:String = null; private var srs_pid:String = null; private var srs_server_ip:String = null; @@ -146,8 +147,11 @@ package if (srs_server != null) { customItems.push(new ContextMenuItem("Server: " + srs_server)); } - if (srs_primary_authors != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary_authors)); + if (srs_primary != null) { + customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + } + if (srs_authors != null) { + customItems.push(new ContextMenuItem("Authors: " + srs_authors)); } if (srs_server_ip != null) { customItems.push(new ContextMenuItem("SrsIp: " + srs_server_ip)); @@ -217,8 +221,11 @@ package if (evt.info.data.hasOwnProperty("srs_server")) { srs_server = evt.info.data.srs_server; } - if (evt.info.data.hasOwnProperty("srs_primary_authors")) { - srs_primary_authors = evt.info.data.srs_primary_authors; + if (evt.info.data.hasOwnProperty("srs_primary")) { + srs_primary = evt.info.data.srs_primary; + } + if (evt.info.data.hasOwnProperty("srs_authors")) { + srs_authors = evt.info.data.srs_authors; } if (evt.info.data.hasOwnProperty("srs_id")) { srs_id = evt.info.data.srs_id; diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index d1838f10e..33aaa10a4 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -264,12 +264,14 @@ int srs_connect_app(srs_rtmp_t rtmp) } int srs_connect_app2(srs_rtmp_t rtmp, - char srs_server_ip[128],char srs_server[128], char srs_primary_authors[128], + char srs_server_ip[128],char srs_server[128], + char srs_primary[128], char srs_authors[128], char srs_version[32], int* srs_id, int* srs_pid ) { srs_server_ip[0] = 0; srs_server[0] = 0; - srs_primary_authors[0] = 0; + srs_primary[0] = 0; + srs_authors[0] = 0; srs_version[0] = 0; *srs_id = 0; *srs_pid = 0; @@ -284,16 +286,17 @@ int srs_connect_app2(srs_rtmp_t rtmp, context->param ); - std::string sip, sserver, sauthors, sversion; + std::string sip, sserver, sprimary, sauthors, sversion; if ((ret = context->rtmp->connect_app2(context->app, tcUrl, NULL, true, - sip, sserver, sauthors, sversion, *srs_id, *srs_pid)) != ERROR_SUCCESS) { + sip, sserver, sprimary, sauthors, sversion, *srs_id, *srs_pid)) != ERROR_SUCCESS) { return ret; } snprintf(srs_server_ip, 128, "%s", sip.c_str()); snprintf(srs_server, 128, "%s", sserver.c_str()); - snprintf(srs_primary_authors, 128, "%s", sauthors.c_str()); + snprintf(srs_primary, 128, "%s", sprimary.c_str()); + snprintf(srs_authors, 128, "%s", sauthors.c_str()); snprintf(srs_version, 32, "%s", sversion.c_str()); return ret; diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index 8db2adbd3..59bef9574 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -107,13 +107,15 @@ int srs_connect_app(srs_rtmp_t rtmp); * SRS debug info: * @param srs_server_ip, 128bytes, debug info, server ip client connected at. * @param srs_server, 128bytes, server info. -* @param srs_primary_authors, 128bytes, primary authors. +* @param srs_primary, 128bytes, primary authors. +* @param srs_authors, 128bytes, authors. * @param srs_version, 32bytes, server version. * @param srs_id, int, debug info, client id in server log. * @param srs_pid, int, debug info, server pid in log. */ int srs_connect_app2(srs_rtmp_t rtmp, - char srs_server_ip[128], char srs_server[128], char srs_primary_authors[128], + char srs_server_ip[128], char srs_server[128], + char srs_primary[128], char srs_authors[128], char srs_version[32], int* srs_id, int* srs_pid ); diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index f9dd64518..68adfe164 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -447,8 +447,9 @@ int SrsRtmpClient::connect_app(string app, string tc_url, int SrsRtmpClient::connect_app2( string app, string tc_url, SrsRequest* req, bool debug_srs_upnode, - string& srs_server_ip, string& srs_server, string& srs_primary_authors, - string& srs_version, int& srs_id, int& srs_pid + string& srs_server_ip, string& srs_server, string& srs_primary, + string& srs_authors, string& srs_version, int& srs_id, + int& srs_pid ){ int ret = ERROR_SUCCESS; @@ -513,8 +514,11 @@ int SrsRtmpClient::connect_app2( SrsAmf0EcmaArray* arr = data->to_ecma_array(); SrsAmf0Any* prop = NULL; - if ((prop = arr->ensure_property_string("srs_primary_authors")) != NULL) { - srs_primary_authors = prop->to_str(); + if ((prop = arr->ensure_property_string("srs_primary")) != NULL) { + srs_primary = prop->to_str(); + } + if ((prop = arr->ensure_property_string("srs_authors")) != NULL) { + srs_authors = prop->to_str(); } if ((prop = arr->ensure_property_string("srs_version")) != NULL) { srs_version = prop->to_str(); diff --git a/trunk/src/rtmp/srs_protocol_rtmp.hpp b/trunk/src/rtmp/srs_protocol_rtmp.hpp index fcf224f30..4379b9c18 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.hpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.hpp @@ -259,14 +259,16 @@ public: * SRS debug info: * @param srs_server_ip, debug info, server ip client connected at. * @param srs_server, server info. - * @param srs_primary_authors, primary authors. + * @param srs_primary, primary authors. + * @param srs_authors, authors. * @param srs_id, int, debug info, client id in server log. * @param srs_pid, int, debug info, server pid in log. */ virtual int connect_app2( std::string app, std::string tc_url, SrsRequest* req, bool debug_srs_upnode, - std::string& srs_server_ip, std::string& srs_server, std::string& srs_primary_authors, - std::string& srs_version, int& srs_id, int& srs_pid + std::string& srs_server_ip, std::string& srs_server, std::string& srs_primary, + std::string& srs_authors, std::string& srs_version, int& srs_id, + int& srs_pid ); /** * create a stream, then play/publish data over this stream. From cd0ab5fb435508e205419518e20ef031308cfc80 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 10:50:59 +0800 Subject: [PATCH 24/26] update PRIMARY, AUTHORS, CONTRIBUTORS rule --- .../players/srs_bwt/release/srs_bwt.swf | Bin 6474 -> 6533 bytes trunk/research/players/srs_bwt/src/srs_bwt.as | 2 +- .../players/srs_player/release/srs_player.swf | Bin 5572 -> 5636 bytes .../srs_publisher/release/srs_publisher.swf | Bin 5585 -> 5643 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/trunk/research/players/srs_bwt/release/srs_bwt.swf b/trunk/research/players/srs_bwt/release/srs_bwt.swf index 79d45e5855731230b642b36ee60b2ef7e16f9d7a..756ac76bb8387d04aee5685720bfe80e8bbc3438 100755 GIT binary patch literal 6533 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 literal 6474 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 literal 5572 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 Sg-;EW|Jh?1(EkI{gxBU>uAg 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 literal 5585 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 From d91a9dfa9d4ae66ec3e30a446cbf4478ca79a2ba Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 25 Nov 2014 11:10:54 +0800 Subject: [PATCH 25/26] udpate the srs_bwt. --- trunk/research/players/srs_bwt.html | 4 ++-- .../players/srs_bwt/release/srs_bwt.swf | Bin 6533 -> 6528 bytes trunk/research/players/srs_bwt/src/srs_bwt.as | 2 +- .../players/srs_player/release/srs_player.swf | Bin 5636 -> 5637 bytes .../players/srs_player/src/srs_player.as | 2 +- .../srs_publisher/release/srs_publisher.swf | Bin 5643 -> 5640 bytes .../srs_publisher/src/srs_publisher.as | 2 +- 7 files changed, 5 insertions(+), 5 deletions(-) diff --git a/trunk/research/players/srs_bwt.html b/trunk/research/players/srs_bwt.html index 78574adda..09f26aac3 100644 --- a/trunk/research/players/srs_bwt.html +++ b/trunk/research/players/srs_bwt.html @@ -63,9 +63,9 @@ bandwidth.on_update_status = function(status) { $("#check_status").text(status); } - bandwidth.on_srs_info = function(srs_server, srs_primary_authors, srs_id, srs_pid, srs_server_ip) { + bandwidth.on_srs_info = function(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip) { $("#check_info").text( - "server:" + srs_server + ", authors:" + srs_primary_authors + + "server:" + srs_server + ", primary:" + srs_primary + ", authors:" + srs_authors + ", srs_id:" + srs_id + ", srs_pid:" + srs_pid + ", ip:" + srs_server_ip ); } diff --git a/trunk/research/players/srs_bwt/release/srs_bwt.swf b/trunk/research/players/srs_bwt/release/srs_bwt.swf index 756ac76bb8387d04aee5685720bfe80e8bbc3438..0bc6df727a029ef3899acb8af36641be1e64d275 100755 GIT binary patch literal 6528 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 literal 6533 zcmV;08G7bJS5pqQEdT&`0kv8QbR0*SuIlcYnx2tHqiZZ#KE{r0S@u{Ojc)mfWlQ7O zNo>b*4uTaiN4IC<(TtcwwgU;uVRDBY#33Pvb03hCgyfMd;aUg;*s)Cl@39ZqC3eiI zhQ}`K!bba5SI_8(0zCGu-s}Ib{{O%J`s=U1db+>TL8AOSA@0WrsiS0|vYrs~iRw2g zA?q_Sy>ItG$aiownacLzZbMT%mmBMAZ9Q<{K+A#lmUL!cYg=z`Z)+gf8Vs(5#oFwl zR4#mQZ7O?4(?-+5fR>GB5@WeUI_2XI!;y48x1p)Y@*0bloQ~x)Nz-L4+NveBQ7x6r zwzjpj!BH&Qr>8Tc;oQdX*jO?V4Rd#`2iIof>FE9g;c;!Po(yN>>szM{d7oS&m((`) z$I=na7fNaeeI363>Hem*FyY3r=|DHmm}Z#wZi%KxTgNi#SU!rFbht7*&+NiojO8QA zL^iHvHs(|NQ|SXK(`s7EZK4@1oJ-HPD9X4#8BXoXhxch42X~mgOZR4s;heT{M|#{B z?DYGBfwm422A8gH<=LH)ZA*d$+(_J>eEp7{Yj^bz4PCf%_W&tWV3lY64R}t=>&X^r zYHI3Yrwo-HmtueLVqsPG=8xamhMIW8nayNJA_sEh^_oHzArO(G#6w!R@qLsPC9S*r z_M*Kvqh+;lCK}&6mJA=#Ag~O;qwCgLH!b08*-$3CIh=|eNW^k+HBxNZvN&(=6oWV+m_mfP_wRRKATIAn(c}i zJ-DEDX!p>`R~|e0%s-ua>BiH~-g)xnM^7GpSsBY`BBGg&*ACt_v+jU{5`{8scBNsQIx$1t)sV$EzM!4v325SiRaE-|V(v=kN{4V5p} z$o|M!w#?dl=8e-7M-Jt*Y`-U)l&vt-Y2_!O}3$C6r3tDKX<#(`ELzsU~Yn&|{5S1nz@OlU*P_Rp9 z8*M{jWx~;1Vq6o34YT#LoGcPLv0?hmeZckM9A=cM!W2toA(oiW+FS+9iL0%o7uS-n zyCo9KUpayTm{nf(5mZKc%n{0`5Mw&!Or#RI1UAKG8tNyd+b-p6>;i=^v#i{rT^zPn z+!lwl3ar{Pnpt#K$Kop0!$dncmPSF$iHRFp8XlV~JUw`|XwNFTTGf-jINKaXqd;Ss8)wE*u4-=9xhHOKF?4t}R^=J;inUyq3OGPzOyG8)sy``UWjJ6rK?c;&57Y8l&)v%RJ*B;~^reUUqT)QGcrBbeStZ!k9#k-Tm&ZoElGow& zco#SpFOY2gb#x(JxOw50g#!x*7lx!VD%qJsb-K#R-4$Dzq%dk@5Xp>5Dx*#&xtLPH zq)H}LF{PSGHB72yHZPOvm{iYf3z>Zpla?^Llu64NTh8biOj^mLCPtf?w3^X2M*EmV znY5ls8<@0_NoT5?sJfM^XHj(&<6 z>>|cK#Ms4*eVDPmOuB^8k1z>?>P-3=lRnO*%b9cqvwxB@4%o9;1c_2B*{C>&0Ay^c=z#rUr4DZPQ-NKJOLV7CbNDZy?P>^8w}7witf zK27i8-9Ibt?xl3eW>qCrl{VpRnv%Xvr2Zy~KYKrss8rKW98_M=PgJTb>?clYThvcn z)Lz$5$|zghPs*tSui=I< zBSv>YmycA{5MuNch811WZ3W#PVp6jQ?u@>IFJ!09#(H>>6j^odg_jM5z$7gv8zwQ@ zW@9593_Em(u7;h)nf%73yY#Yfxv_cJz1>YF+;1COj)y8pvoUa7_Y7D18&+Jl)#@Gj?oiV4gYm%-Z@k#2ZAZsO%78#^f0SVaR=#>yY zPehc6En*KXvNs!-qBm1jr*mME2FdcS52!|mDCR7!y5IUeRxzg_M&ml;ZdhCqR~zAMDwT%If$UGpk0Qx zhPDmuaNGwtCV^?DZr-SUqVYj(QR#YCUNu&U(^8 zT+O7Dlr@tsQr=9uiMyHfkcwua%GhgXBD4d1Q|u%Mjf16yd&~IPG5w4qRSU6^K0e&* zA1Ua4M?<}+$;&Yh+=SMlJwZ_xPVQzI++0bypH<{aYFtIpCvxnlKPoz1%?(`&9_@dk zu)M~!Ttlv*yrel@D{-XoOBh*DDCONXoV>Ie&ajQe;3%49`#-YO#j_nQf5B==*AE9m{y zcmN4I#`EiWoDkJ`i03b5=KEplxrjpaC>Nzo(PPvz$VE?Z(U>WEl6rz%^f@m2s44n9 z^(^J0XSgVH{HQ-G*5X;}VO;(^m*-5=7pUhCeApMcC=b(dVfqsF{41Bg%;g76(^shH z+Youafn*(}$A0KPXgo+yECkZBf_QEw#DB=gzPyXJ5$JPo;Jw7AY_|_%0i!VWsCOCM#=K4B;YVnuuA^=4=w8h^$UZS%g zstpb=6&nToBxkb>GvZ9^L_l!4-?G668=$yz?s!@djJ9ftab?mC7(+qvsKej84v{% zyjUpCg)-li)J~RgC3L>J8}4;a+akj89WF~C>2hc zUmZGt2DgR#SaLNyj_=WMB&i7;qVCeHFO|;u%qjSNxy&J765v{<#Rar<3!;mJqx%&e zX49;}ir~ik^H4Lw@th*+V1YK}v%YUt5mQRbIROM&AIxrnVGX8$EdoGP`p*po+-Va* zE6RXBici=@Xo$kx!Z9ZZGdccQyqSY~wX>C64u1`^r9((xsmIc}I_^$vEz{$Yxq9@S zq4v&Jhp_el|6}%OG64kCjj4;M&F{onz_oM7;2w@y?>T?yedsi^QsbXD@5M5hQy#V` z|7KtISG({!;ZV0Lmd}_6C?mk16C6t%4=2%{RaG3ZZ2Q|V^Fs64=Hrh!AC@5J_Z6LQ zaQS^j=NslrG}flH5LIUFz}GaM+&1rAW@mi%`dhH;>c69-RU7VNu=wmw=E5!$4Hj*M zqZl$KP{z~7?e}1MfxpA|tO}c_g2uF1Y2NcM*vt`^&og75xfx}sT41)8>G-?Cn^WW_ zoUd|Be#D7#zwB`8Y)4GfU0K4SaegJ?azX-IVoN<070E^Upk*sGA+I6)0>L zSmq`~kH_i=jtyc-Ewg0api6VAFtZ`1%a@>iUh~<5noBSvLuJt<&Y!HudE>ke=8W=> z9V<*9B+Ncwn02hMX5R5W;q1->sa=^g4p?%B{;y{#e;s#R{6Qg_ z8?<=D(>$-$e7^$L0nq%vB=6t)e--%)208*tFbGsE*wNOl1Od&>JYeW<3%1QY?^1e$ zo$U%=VWqdTt=9%Pt+&nA)*Wc?;It-*u`mAH)uy2mvnS-%TBZ1 z6%3-?)y=itJ?)@9?OY3t5wzFr+uMb)dID|G_5jCI@_3w}+0hP@o~{mb?d^oiV4y45 zZ40&qg6*I@K+xVU8zzaMg2B$VPSD=o4qLFJrxP}v9T+g!+1rU;-R&K)>;=jR+SSqX zH_*iH?f|gU-i|V$iL$rB+vE*+H`>lxAUn2kJW*y;GC@QtjW9`K5+Fo@AC@!z>EmX! zg3(Gws~Gh%TFqz;qqU4KV6=|WdL}Pq)IIVqhZ*gF8P8UmV% zjoUqpp3msT3<0ZQMx%^sOx~v^sCp??_fs`V)lsUZsG6qg80<4@mNGS`?xkvus(EK>H*LL>Os(h>LJiW>SdspG3gUbx)wdJ$8{sF2dPS>T7Xt25LsSR%m2LA-{J|t zub#@P>Y7^bg1UNI<2_?y8L3%8NX=S;yUqM=0Ikj)6N8|;OnSk@AgQ^COFzt8G2YU7 zE6!UV>j~BE7-k)-6z=nf;}MEQNbP( z>|wzk5$sXH9uw?w!JZK8Nx_~H>~n&BUa+SHdq%Kl1$$1g=jjVPOJ5LoFH+jxsX7U5 zx|oBl%7^=bMB4WD6NTDsn@BC8%x*FVGnwiznNu~H%ejdFQYtGmS-Hz(?sAh=xJ~A% zFj=L?WL1?WtKI=tRz_=f30}KfaPJ<$7hE8C-9>`e`!H{Yo64^ETRbiR8D(rAh3RzDs1kBQ8%;Ro-}s;&;Xsd}70?Vsrn_Wo!W| zJ;1T(K}aRpt=PUyA-+Pu%vW%j8Kgo2@yH;R3P_a=q}mQr!$4{sAYK(@ffJ<81yWyj zg>f}491GhxSQb&jcH=Mw;>?Us(!zfr*833u6HW>C5!x;WLb{^E-d1@eS}sf0yx1@D=`U z<6Gb>{XNDT;7$Hs<2&H1{C&oo;LZMZ#&^M2pU=W;jPIl68}{pdeJxysS`gX4aM7_) zD+WG>5M(oi<2+paU?{dGM0iZ+uy{1NJ)`n3cIYKj(h^=lINwy@M>Y z>+L!Xbs)4;2+e7R_AVa_KO>5*5@VgV#yTw-zu*d|!W7#JJjK7XG`}>X_>~#OuR+g~ ze*?N(`7P*>&5(>=S#kZ^it9JvUHPbD{1%PweAH$bQX|Pn?Z)qDbh`TxS4R+)49Zyvgf z*Ki#o|1(ebU(8%wD01;XTn`*qv3&&kD{)3ONe9W5cszvYRiIm?t7YRVS>*R>aGu}8 zGSB9RgokToUif`hIM>M{x3Zbr8{|UcdNYn2WsFm4a>gm0Wc1k;|HSF%4malH04(9S2! zNFu1R#d5Rp6b3KF65n8ajt}aVv2J(qb^E+EyU&}md)l1cGoa_m&w}n&o&z1Sy&xM; zTl0O!n(wpV=DIzHhPiGp$YR~TAeYwdMS14BeNlejy1gP7@Lzw}ut>_qW>Q||@m27> zum<71hVYE9VnQ2G3H%W7Yw|G8@HT|b#H_!LP6Si>XWqr*aw@i8@+p1On$kBBdV+on z^it^!(EakaL6gdNKu2wFf~M@>1x>T>fsQ%8FB{*&TsC3TyaC>iMg2DTW?r1%L1POq z&NtB*;6?adGzRlHsQ4Zlp?uU~d>@Ui`KW3X5U=X1_9EP4a^bjjTo-ZRpiK>_IA}Wo zg9=|Y-nEP$$o$y}1__>C##{0n`^C;?<42fi%*@V@W%2m>DW7tsDl4{^WlZ@UYs&A) z#z}d&;h27wzRld@?;@tN{Ch*&>G{%*PT6HRZWR;nk)6Q{rS*2bi4|N=b z9*kVR>Sh>Ci7ZcX3D5F`GEX0V1bVf?=f6#4;~K@x#x}lfJq!4byG|)II?RQ*Uh(ws zBa(J_|D@>jw*OW~^vOij_RPECOsH}MyYDg}?#v#@-(Df|(0 zIk`LKMIXMo{hS0F diff --git a/trunk/research/players/srs_bwt/src/srs_bwt.as b/trunk/research/players/srs_bwt/src/srs_bwt.as index c2d6aca26..4fd5fdead 100755 --- a/trunk/research/players/srs_bwt/src/srs_bwt.as +++ b/trunk/research/players/srs_bwt/src/srs_bwt.as @@ -139,7 +139,7 @@ package customItems.push(new ContextMenuItem("Server: " + srs_server)); } if (srs_primary != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + customItems.push(new ContextMenuItem("Primary: " + srs_primary)); } if (srs_authors != null) { customItems.push(new ContextMenuItem("Authors: " + srs_authors)); diff --git a/trunk/research/players/srs_player/release/srs_player.swf b/trunk/research/players/srs_player/release/srs_player.swf index 8d2cdecf9dcb4a41c6fa789973933c62596e18c0..a6754aedc1d366627420c97d4fccd8575326a80b 100755 GIT binary patch literal 5637 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 literal 5636 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 diff --git a/trunk/research/players/srs_player/src/srs_player.as b/trunk/research/players/srs_player/src/srs_player.as index e69f2c97e..8fbf2bb8d 100755 --- a/trunk/research/players/srs_player/src/srs_player.as +++ b/trunk/research/players/srs_player/src/srs_player.as @@ -282,7 +282,7 @@ package customItems.push(new ContextMenuItem("Server: " + srs_server)); } if (srs_primary != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + customItems.push(new ContextMenuItem("Primary: " + srs_primary)); } if (srs_authors != null) { customItems.push(new ContextMenuItem("Authors: " + srs_authors)); diff --git a/trunk/research/players/srs_publisher/release/srs_publisher.swf b/trunk/research/players/srs_publisher/release/srs_publisher.swf index e26e554643b74bf5773817a7e6dc3724afbb56fd..15e92bba00b5c8a97fe7b1bd856108049b5e0905 100755 GIT binary patch literal 5640 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 literal 5643 zcmV+m7WC;uS5pp{Bme+-0fkx#d=tmj-#5F`Y9(Lz;%=5;f=z@EVH<2Pu>gxBU>uAg z5M*T~?OGzbqLqB4mqQ>2DLF`hgj@y!Ioc%jYtnwnm$qNiTMpZifZwbwMaOAqdkzST$w3APAqX_#OztvUJ#J z-?Yl74##5&vmLpP`H@T})!xuBG&EE{w5UFr9%yK4Yinz0^fY)p3lXu<97$xf;e`ov z?)>GH^4mId8J+3D*Wqog7p>EpFA**woD3pweXx zG`bf=J1@ZvTrQN9Wv6#S0Th|7eP;ceU0^PW(K2X>l(zgDPq}B zuhYI+;$5|>YgJ(L#z608@9M5Y3Z)_3_f+cc^yVYuFq z7SlK2njGEe=SuJTF2yW}Tq~1_j6R&%peM2pZYmpfg(ie$k!V<7k&VVOYZGg6ZKjk? zCNs`hQVZ+pwFx8XOlfH?u4gdB_Km@vdMHDp;gX1EZX8PVq?0K#XhyG@ zEL_Dy!hNF4)S?*rOD2QX;_A~{C=(sjIdJA={Ujr^xQ=gqJKGVe*D@hImbRT{0DZ-+ zAJ5?%V6)HX~oeb33>OTl%(kYY14r%E`Y2^axQ?|rKW8=*jhW>WhXWVDLgSvavseV9gII3b zCx928B55!g4a(h3cY9g6Yxesb4J)*{N-gLbZC~RISx`-=^6?hkVvJ&~A7P`)kYtAH7MFj|DYzbVt zY4fJj+K6+*xNpT>1~~F^m{ZWbD1@XksA0Nh(dLyrnt+&;SLxLU?SGaaJBmFDNKf zp!BBA9#(-_b;tTTsHZXAC}~%vRMw2R*aYclTuYCX^>FIVW+KV7*{(9B#yMqN%4$Bh z6^N!}oMUaOU6q-kC}uOx84b6qb}GQ6p?YK&Fn!@39Z$DxDvY}y$QQi;R+6|`)~#nS zBDxlD=kb)HSnEodRLf*dcKBUdBAFP8C$naarxI1T^aR#Fd_EKgp<%7^V)kcEg4gFq z)~}2uO+8$cKLBiVrm`>fE^j*!VxU=k`6}mFshq%kgn1tx13mm@;|?EE4gM`+n_G>>pj92`5pqRaRs6LOc9$!MX7mk!Fi$jugU#Y$GI zM0^)Qg9{&cc)x}9;f;pf%m#5Sa=wZ?`MSChJ*9Bq^QxLgdw^A4Il${}CEoVw3=Ll% zLA#1uPTw#4M8ltHf){C)3PZW|$o&^)j3!r)i z-yS*(-m{4ds)-7<1zWT*mF07YEt!t2{=i5c8MS;8j@=B^Ube~VDm@X^!&nlS4b@qv zMopC=T={IJm7sW1rZ|#`6gsX!Nei;sYo%qA<}WJl^xJ>EQ?8ud+N+b&A8CP$%9m?dmk9tDOjQ9XtJ@4jW6% z5;mw{yhC=YX*AuT)OtLPEsbk#s4JcXkf_#)S7!{11fD2oZ!((*ucRrCCt&^hZ5uZB zc5RYUp|~dXtlZ$Gy)5nZ*?N1rx~?uY=*!CN(bGM6?dX}hiwCZ7f-X28u3=AWGybM9 z@VqOuAHzE+rtr=4rOZkyyHX$V(FxeKIjF^4T)mY(B#L-{4SPovb7n;pZ_kXL=kgIQ zilC*!Yd{=KwJyM9R=4!Dy47%!Ub2*3Q;(qWLs5u)y`1+@isRGFwFWWxV5BZf8@y|~ z9V@)OUF+9&ciEWp_U>#vsHa6EWr_pIlw?M4&|%ny&)#T84szF;CN`Os6E#97uBD5u zyZDAX@-EQ(l1}9d@^h&UHB5YTg~% zy`Cpx$5gt!Ewsk0ORCElawNxY;GL@h{5KZ`^v6zESunDhGSx5o5kzKTSiPY5W zLAHe|T3Qj;+JqxoTRl?KVme|81utnqSzA*heh}hm^fXDHmc~U=bK{c5Qgd5dtJLCY zZkAeFny^Q$w6x;bme!Uwsbz7a2S3fISkl-eE%r3F+L}DgZ65r#H8_ExW{-VLM(h+TFlPFGQJN$Hay zgCv7ZMwuwfM3KQM6PHZNWNC^_Dr8bAOI0$dmdRAvHccioWHM7Gvt%+`CLfc@C9-{v zOy(*o+PPeD<9DG_kKYER5x-4}2fvGyX8g9uWvwz)+PT(MdvYh|)dh7B_5mZ3)`SIK0PT-Ga-tupDCNkF!RWYA^%fD92CcFGWwAt6Ib zCPA5Glx-l3S!EcMIiTpEL_paIN(z(&C^7V5M23&c@Cg|{EyFI5D{n&C9+1h+*lxl8 ztspyY!?qXuw^uPB=Y|P$_rHf6>MJxx$J95U&8hRwr^nj z7PkMu_H9spg1EAC*nb(@E1>+8j{6xXKL=2Lf$de~?Z1MVpu9$r|B2e)VS5+b@3Ec7 zW}!EKLi%Ua{{`uPVS5joM<&fO`6c%LhKRo-{cmjli|zlgy^n2_$OL5RaUzRP5LtQ> z+h?(Tj!Y2*f`9%g5};mMIa(~#UoDXOws!yMw(XQ^NQL^eAk-5?_{eB6{q8EZ)wj2` zRaJc+cI}7z;V|rleIV3-0R*vr^Wv)S!05B^9Ey;usrm!uO7{ZP*ZdERmZI6V8_6gg zMd!Y37lE6|Zo?-bgLia?mjDa_`ST*9filT&F*yeI-hfbkN!0l$l(bp-Y(TdXB zDQrgSJb>y$fIZi>ok9)LqW(@{G1B6sPiP||l*EyWB9x|(N+Oh9h14d(lubzOB9z;` z0)dK!UO|M)9)0~x&(!6dPP>BB=_@#$;pKE@C#SPEdIdYo_IL#+e5~0k zxZsj&yh0JES9^tGm~**TD1l2K2Cq;GbMeoUWf+)MAds4QQv?8qBIX)bqgVvRx#AC^ zwItVQ&Cm4-5wL10Ay!*%tzfn14Dn!jr65>KbAHK?3|r2y`(#pA=0I6TPW9QL&bk6E z5m8c{uLGLu$~B&cVxj9iltA}+C?)-t?}EV&QfI9}vwp=;45#L@)>5X(C^Cw*66?yG zzjR%xpp{wcb4HnOicn{D=Ztcr!l)drI&1ZucB{T>I9Tq)>96unb=Rz$3Zk_+ciNby zO}F}x&d_FBTaeDuW?Ng4eoVW>+KyD!=2+Jty;PfP_4{j#8s9u&wC0=@IAdH^UWVqb z_0Kov`)iF_qt3SgR~5>g@m-Eo_q%h(!WzNnM$Zjgs%R4x=e=~PF}l<)VemZoV91L5 z8;k~{@nHE3w3hHUxv%s!;rJvUA7zorropFFk0JuYRug?c6!XcWsKRqfey?WGjqoDQ>T4Pq&n;4=$s^>b4$^;QJ~Ik z6Gq`YY==>>ZUi)P4I0^jMwo?Nz)j4iCVWf8I_oAt6Sjhh-FXwcnTg$C?V%>Fz0kzX zc@vk6o4AFVuuDX7zDh%M7qbx*_Jg$_{7c>8bxUCj(B<6&Ib)exQGvm_7fzwdKz zz7CAqLDVki+CxkmMSfg+KWeYw+QUqH9rEMa2T|L}wGT0E9QkqWBdGOq?HJQ0kssF{ zMePc%J;t=xBR{S^4*oKu?3A|BIzg8y3*dCxag{Gq&LI+)Yc|dO-2`QO2nNeMWvnu~ zc(`vR2vQ``RrFU0^{>Fz1!r-K2H_RZg;Q}1ax~K2&T-V6(0|1^>dMF!)>{*()Hv#G=wC68S|3?q{dNMC7)QMW{oZlZhKSet-2^H& zj(QjRJI7JokxuJ8_&54CVomsC0p8`lp>h^3^iSY#_BEsC&*1OzUu9h7{-m!5PuE{y zwe{Wv_*0d$5&YKz_-_=v$=Ku`1&01RqW^CKeIryz2!9`?yGVbpf3v^O=v%iLBE8m4 z#NTW5_6gb+Yd7oqeTL82+UcOh5jS@)@n205{%yuK|8`@$?`k|2xkHR96|cZm2er$$&MyAKnP7y|f&0fDp&PMhp3IzdzMBp%YO3qp3x#{0l_ z5_C{U7su_C)Wl^SFgbNN9Va@RiHkY}rMQG&TikXY_JeQ|GxvS~N)7{|WG{%6>;vf} zSf8i)`~Vt=!I=9&81qMr2r`l{iu@zvyp8g#EPVlT6s+yEo@G6PmHRo?6R~!Gk@X}E ztS_;iO(WLxkYk(wV!?CkD|9~l!SZU1>Q}K(ODRfh#&y0J(6w1#V+gf!J|bR%T+WEQ zAEhFMjJc1)80#ijwWW#lbxeY9Q$tvuQ6-_Fc|fCMeTR;cxuNe;LrM4JRD_U%A<399 z^gT56BQ}JdW4uP|=y2n*!SWjPBu5RT+)rN2z-KW&*P|6A5-)f?pUX{zMY^e}E|&e&Na;HQvAWKY~-JwOnQjyZf8 z%%TS|aU4Mb+J&q@+Jr$tY!kK%QkCErY*oSz!M<47Cdf6ykl<(+Tm;_~+i=1o1RoVg z(NOPTIgRo$+ErO*Kgzo_laJG`Zy1m636fK_Uh8ob^zrib1nn~2lT_DdeU6sUBGIlm zchM62G|q4yo(17)eA+(;K*>J9$KZMRB8bl;`4UJk5bGIo`d~Rd$|uQc>sfMIt)$Fz z$UIMK9A-$eULZBqX2@o}NQ?Hrg8O-}zD&l>7$alue}l20H0FL0tgn!Y7sH8RfR9-m>s4YgpnY`de6j(nYr)xml1=d*_iejl)asEuiP@F4-;vBBJ6zF#^ z5K6ua;%i902h!_Ez7MuHko*AbZzB02$iGJNBXGQhBnQgdNKS$C9VDm0^&YWaE`;tC zjMmSYpJ(_YenCU^V_--2RaCx)%A3G_7Ai{w!M_^}{BIBJDZ{HO&)p1r_F$}EN8l~6 z2c!K4@!tw(jN8C>D?m16x85ZFwll_F2-=VO+Q1CS)~|`b{fu!t_}an!OYnULphhtE zp~_*s^bkgP&sXCs_Y7?LM%c6#evhg=4X(*I7@Y zX6`BDFdRK)JOIbCXRW8j(>Y^KNsAzyhra@OMzo$m%p9sl%wfcwvraO5DAf+*4ZxT) z+5=EF4c+_#V^34fvw7HD)LCCFjG>dGog+2mnD!vn`2vW^AK>zbz0^C02Ja;d9=)f8moRpR0bUZVZ=m5Zgx7%Y2p#av0x#f$ z`Y7Ow`ddumI|f*uzE91S5&ZGw%Qd3G>39QI8C8w`6JVTxM*m}AJci_PFdj$p1Q<^s lIS$700=Zh4&HhCmr4Qq&Xsx{B!~eIDPW(&4{{wBZ%Gt7q05$*s diff --git a/trunk/research/players/srs_publisher/src/srs_publisher.as b/trunk/research/players/srs_publisher/src/srs_publisher.as index 2669e708b..40f02eae1 100755 --- a/trunk/research/players/srs_publisher/src/srs_publisher.as +++ b/trunk/research/players/srs_publisher/src/srs_publisher.as @@ -148,7 +148,7 @@ package customItems.push(new ContextMenuItem("Server: " + srs_server)); } if (srs_primary != null) { - customItems.push(new ContextMenuItem("PrimaryAuthors: " + srs_primary)); + customItems.push(new ContextMenuItem("Primary: " + srs_primary)); } if (srs_authors != null) { customItems.push(new ContextMenuItem("Authors: " + srs_authors)); From be53b10ed360759528f488823fbc1b79e1eade41 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 27 Nov 2014 08:04:39 +0800 Subject: [PATCH 26/26] refine log position --- trunk/scripts/_log.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trunk/scripts/_log.sh b/trunk/scripts/_log.sh index a91a2c820..3c09982f3 100755 --- a/trunk/scripts/_log.sh +++ b/trunk/scripts/_log.sh @@ -8,7 +8,7 @@ RED="\\e[31m" GREEN="\\e[32m" YELLOW="\\e[33m" BLACK="\\e[0m" -POS="\\e[110G" +POS="\\e[100G" # if need to log to file, change the log path. if [[ ! $log ]]; then