Giter Site home page Giter Site logo

chenyaoshun / simple-rtmp-server Goto Github PK

View Code? Open in Web Editor NEW

This project forked from liminwang/simple-rtmp-server

0.0 2.0 0.0 157.03 MB

SRS is industrial-strength live streaming cluster, for the best conceptual integrity and the simplest implementation.

License: MIT License

CMake 0.14% Shell 4.69% Python 1.99% HTML 3.57% C++ 82.71% Makefile 0.04% Prolog 0.15% C 1.79% JavaScript 2.07% ActionScript 2.84%

simple-rtmp-server's Introduction

#Simple-RTMP-Server

SRS/1.0,开发代号:HuKaiqun

SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。

下载发布版(github): Centos6-x86_64 其他more...
下载发布版(国内阿里云镜像): Centos6-x86_64 其他more...
腾讯QQ和微信:Contact
同类产品:BLS/BLE, NGINX-RTMP, CRTMPD, RED5, WOWZA, FMS/AMS

获得源码(github): https://github.com/winlinvip/simple-rtmp-server GIT使用方法

git clone https://github.com/winlinvip/simple-rtmp-server.git

获得源码(国内CSDN镜像): https://code.csdn.net/winlinvip/srs-csdn GIT使用方法

git clone https://code.csdn.net/winlinvip/srs-csdn.git

获得源码(国内OSChina镜像): http://git.oschina.net/winlinvip/srs.oschina GIT使用方法

git clone https://git.oschina.net/winlinvip/srs.oschina.git

报告问题(BugReport): https://github.com/winlinvip/simple-rtmp-server/issues/new
中文资料(Wiki): https://github.com/winlinvip/simple-rtmp-server/wiki
使用步骤(Usage): https://github.com/winlinvip/simple-rtmp-server#usage
公用机器(LiveShow): https://github.com/winlinvip/simple-rtmp-server/wiki/v1_CN_LiveShow
捐款(Donation): GitHub阿里云镜像 ,查看 捐献墙(Donations)

About

SRS(SIMPLE RTMP Server) over state-threads created in 2013.10.

SRS delivers rtmp/hls live on x86/x64/arm/mips linux, supports origin/edge/vhost and transcode/ingest and dvr/forward and http-api/http-callback/reload, introduces tracable session-oriented log, exports client srs-librtmp, provides EN/CN wiki and the most simple architecture.

SRS focus on small problem domain, which is the most complex for all software(see OOAD). Because of lack of deveoper resource, SRS only provides features which is the most popular for internet. SRS is simple for and only for problem domain is simplified.

SRS is a simple, RTMP( CN, EN ), HLS( CN, EN ), high-performance(2.7k+ clients)( CN, EN ), single processes, edge/origin live server, x86/x64/arm( CN, EN ), compile depends on st( CN, EN )(required), ssl and http-parser, use nginx, ffmpeg and cherrypy as external tools. that is, only need st to run srs for minimum run. see Build( CN, EN ).

SRS supports vhost( CN, EN ), rtmp(encoder push( CN, EN ), client/edge( CN, EN, ) pull), ingester(srs pull)( CN, EN ), HLS( CN, EN ), HLS audio only( CN, EN ), transcoding( CN, EN ), forward( CN, EN ), http hooks( CN, EN ), http api( CN, EN ), http server( CN, EN ), dvr( CN, EN ) and SRS-librtmp( CN, EN ).

SRS-librtmp( CN, EN ) is a client library, only depends on c++ and socket, with examples( CN, EN )(to play, publish, ingest flv/rtmp, inject flv, SRS-librtmp( CN, EN ) provides apis to support RTMP, FLV and AMF0.

WebSite: http://ossrs.net
Release: http://winlinvip.github.io/srs.release
Blog: http://blog.csdn.net/win_lin
CSDN mirror: https://code.csdn.net/winlinvip/srs-csdn
See also: https://github.com/winlinvip/simple-rtmp-server
Github DEMO: demo with your SRS
Wiki: https://github.com/winlinvip/simple-rtmp-server/wiki
StreamServers:BLS/BLE, NGINX-RTMP, CRTMPD, RED5, WOWZA, FMS/AMS

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.

About all PRIMARY, AUTHORS and CONTRIBUTORS, read AUTHORS.txt.

A big THANK YOU goes to:

Mirrors

Github: https://github.com/winlinvip/simple-rtmp-server, the GIT usage( CN, EN )

git clone https://github.com/winlinvip/simple-rtmp-server.git

CSDN: https://code.csdn.net/winlinvip/srs-csdn , the GIT usage( CN, EN )

git clone https://code.csdn.net/winlinvip/srs-csdn.git

OSChina: http://git.oschina.net/winlinvip/srs.oschina , the GIT usage( CN, EN )

git clone https://git.oschina.net/winlinvip/srs.oschina.git

Gitlab: https://gitlab.com/winlinvip/srs-gitlab , the GIT usage( CN, EN )

git clone https://gitlab.com/winlinvip/srs-gitlab.git

Usage

Step 1: get SRS

git clone https://github.com/winlinvip/simple-rtmp-server &&
cd simple-rtmp-server/trunk

Step 2: build SRS, Requires Centos6.x/Ubuntu12 32/64bits, others see Build( CN, EN ).

./configure && make

Step 3: start SRS

./objs/srs -c conf/srs.conf

See also:

  • Usage: How to delivery RTMP?( CN, EN )
  • Usage: How to delivery HLS?( CN, EN )
  • Usage: How to delivery HLS for other codec?( CN, EN )
  • Usage: How to transode RTMP stream by SRS?( CN, EN )
  • Usage: How to forward stream to other server?( CN, EN )
  • Usage: How to deploy low lantency application?( CN, EN )
  • Usage: How to deploy SRS on ARM?( CN, EN )
  • Usage: How to ingest file/stream/device to SRS?( CN, EN )
  • Usage: How to use SRS-HTTP-server to delivery HTTP/HLS stream?( CN, EN )
  • Usage: How to show the demo of SRS?( CN, EN )
  • Usage: Solution using SRS?( CN, EN )
  • Usage: Why SRS?( CN, EN )

Wiki

SRS 1.0 wiki

Please select your language:

Donation

Donation:
http://winlinvip.github.io/srs.release/donation/index.html OR
http://www.ossrs.net/srs.release/donation/index.html

Donations:
[https://github.com/winlinvip/simple-rtmp-server/blob/develop/DONATIONS.txt] (https://github.com/winlinvip/simple-rtmp-server/blob/develop/DONATIONS.txt)

System Requirements

Supported operating systems and hardware:

  • All Linux , both 32 and 64 bits
  • All hardware with x86/x86_64/arm/mips cpu.

Summary

  1. 简洁稳定:Simple, also stable enough.
  2. 高性能:High-performance: single-thread, async socket, event/st-thread driven.
  3. 高并发:High-concurrency, 1800 connections(500kbps), 900Mbps, CPU 90.2%, 41MB
  4. RTMP源站:Support RTMP Origin Server.
  5. CDN边缘(上下行加速):Support RTMP Edge Server for CDN, push/pull stream from any RTMP server
  6. 单进程(无多进程):Support single process; no multiple processes.
  7. 支持Vhost:Support Vhost, support __defaultVhost__.
  8. 直播(无点播):Support RTMP live streaming; no vod streaming.
  9. 苹果HLS:Support Apple HLS(m3u8) live streaming.
  10. 支持纯音频HLS:Support HLS audio-only live streaming.
  11. 支持Reload:Support Reload config to enable changes.
  12. 支持GopCache:Support cache last gop for flash player to fast startup.
  13. 侦听多端口:Support listen at multiple ports.
  14. 长时间推流:Support long time(>4.6hours) publish/play.
  15. 转发流:Support Forward in master-slave mode.
  16. 流转码:Support live stream Transcoding by ffmpeg.
  17. 支持FFMPEG滤镜:Support ffmpeg filters(logo/overlay/crop), x264 params, copy/vn/an.
  18. 只转码音频:Support audio transcode only, speex/mp3 to aac
  19. 支持HTTP回调:Support http callback api hooks(for authentication and injection).
  20. 带宽测速:Support bandwidth test api and flash client.
  21. 演示页面:Player, publisher(encoder), and demo pages(jquery+bootstrap).
  22. 视频会议演示:Demo video meeting or chat(SRS+cherrypy+jquery+bootstrap).
  23. 中文Wiki:Full documents in wiki, in Chineses.
  24. 客户端库:Support RTMP(play-publish) library: srs-librtmp
  25. 支持ARM平台:Support ARM(debian armhf, v7cpu) with rtmp/ssl/hls/librtmp.
  26. 支持Init.d脚本:Support init.d and packge script, log to file.
  27. 支持ATC:Support RTMP ATC for HLS/HDS to support backup(failover)
  28. 支持HTTP-RESTful-API:Support HTTP RESTful management api.
  29. 采集流:Support Ingest FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg).
  30. 支持录制:Support DVR, record live to flv file for vod.
  31. 可追溯日志:Support tracable log, session based log.
  32. 支持FMS-Token穿越:Support DRM token traverse for fms origin authenticate.
  33. 全面的Utest:Support system full utest on gtest.
  34. Stable 1.0release branch and 2.0dev branch.

Releases

History

  • v1.0, 2015-03-19, 1.0r3 release(1.0.30) released. 59511 lines.
  • v1.0, 2015-03-17, remove the osx for 1.0.30.
  • v1.0, 2015-02-17, the join maybe failed, should use a variable to ensure thread terminated. 1.0.28.
  • v1.0, 2015-02-12, 1.0r2 release(1.0.27) released. 59507 lines.
  • v1.0, 2015-02-11, dev code HuKaiqun for 1.0.27.
  • v1.0, 2015-02-10, for #310, the aac profile must be object plus one. 1.0.26
  • v1.0, 2015-01-25, hotfix #268, refine the pcr start at 0, dts/pts plus delay. 1.0.25
  • v1.0, 2015-01-25, hotfix #151, refine pcr=dts-800ms and use dts/pts directly. 1.0.24
  • v1.0, 2015-01-23, hotfix #151, use absolutely overflow to make jwplayer happy. 1.0.23
  • v1.0, 2015-01-17, hotfix #290, use iformat only for rtmp input. 1.0.22
  • v1.0, 2015-01-15, 1.0r1 release(1.0.21) released. 59472 lines.
  • v1.0, 2015-01-08, hotfix #281, fix hls bug ignore type-9 send aud. 1.0.20
  • v1.0, 2015-01-03, hotfix to remove the pageUrl for http callback. 1.0.19
  • v1.0, 2015-01-02, hotfix #207, trim the last 0 of log. 1.0.18
  • v1.0, 2015-01-02, hotfix #216, http-callback post in application/json content-type. 1.0.17
  • v1.0, 2015-01-01, hotfix #270, memory leak for http client post. 1.0.16
  • v1.0, 2014-12-29, hotfix #267, the forward dest ep should use server. 1.0.15
  • v1.0, 2014-12-29, hotfix #268, the hls pcr is negative when startup. 1.0.14
  • v1.0, 2014-12-26, use master as main stable branch with hotfixes. 1.0.13
  • v1.0, 2014-12-22, hotfix #264, ignore NALU when sequence header to make HLS happy. 1.0.12
  • v1.0, 2014-12-20, hotfix #264, support disconnect publish connect when hls error. 1.0.11
  • v1.0, 2014-12-05, 1.0 release(1.0.10) released. 59391 lines.
  • v1.0, 2014-12-02, hotfix #239, traverse the token before response connect. 1.0.10.
  • 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, 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, 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, hotfix #183, donot support AnnexB when decoding RTMP body for HLS. 1.0.1.
  • v1.0, 2014-10-09, 1.0 beta(1.0.0) released. 59316 lines.
  • v1.0, 2014-10-08, fix #151, always reap ts whatever audio or video packet. 0.9.223.
  • v1.0, 2014-10-08, fix #162, failed if no epoll. 0.9.222.
  • v1.0, 2014-09-30, fix #180, crash for multiple edge publishing the same stream. 0.9.220.
  • v1.0, 2014-09-26, fix hls bug, refine config and log, according to clion of jetbrains. 0.9.216.
  • v1.0, 2014-09-25, fix #177, dvr segment add config dvr_wait_keyframe. 0.9.213.
  • v1.0, 2014-08-28, fix #167, add openssl includes to utest. 0.9.209.
  • v1.0, 2014-08-27, max connections is 32756, for st use mmap default. 0.9.209
  • v1.0, 2014-08-24, fix #150, forward should forward the sequence header when retry. 0.9.208.
  • v1.0, 2014-08-22, for #165, refine dh wrapper, ensure public key is 128bytes. 0.9.206.
  • v1.0, 2014-08-19, for #160, support forward/edge to flussonic, disable debug_srs_upnode to make flussonic happy. 0.9.201.
  • v1.0, 2014-08-17, for #155, refine for osx, with ssl/http, disable statistics. 0.9.198.
  • v1.0, 2014-08-06, fix #148, simplify the RTMP handshake key generation. 0.9.191.
  • v1.0, 2014-08-06, fix #147, support identify the srs edge. 0.9.190.
  • v1.0, 2014-08-03, 1.0 mainline7(0.9.189) released. 57432 lines.
  • v1.0, 2014-08-03, fix #79, fix the reload remove edge assert bug. 0.9.189.
  • v1.0, 2014-08-03, fix #57, use lock(acquire/release publish) to avoid duplicated publishing. 0.9.188.
  • v1.0, 2014-08-03, fix #85, fix the segment-dvr sequence header missing. 0.9.187.
  • v1.0, 2014-08-03, fix #145, refine ffmpeg log, check abitrate for libaacplus. 0.9.186.
  • v1.0, 2014-08-03, fix #143, fix retrieve sys stat bug for all linux. 0.9.185.
  • v1.0, 2014-08-02, fix #138, fix http hooks bug, regression bug. 0.9.184.
  • v1.0, 2014-08-02, fix #142, fix tcp stat slow bug, use /proc/net/sockstat instead, refer to 'ss -s'. 0.9.183.
  • v1.0, 2014-07-31, fix #141, support tun0(vpn network device) ip retrieve. 0.9.179.
  • v1.0, 2014-07-27, support partially build on OSX(Darwin). 0.9.177
  • v1.0, 2014-07-27, api connections add udp, add disk iops. 0.9.176
  • v1.0, 2014-07-26, complete config utest. 0.9.173
  • v1.0, 2014-07-26, fix #124, gop cache support disable video in publishing. 0.9.171.
  • v1.0, 2014-07-23, fix #121, srs_info detail log compile failed. 0.9.168.
  • v1.0, 2014-07-19, fix #119, use iformat and oformat for ffmpeg transcode. 0.9.163.
  • v1.0, 2014-07-13, 1.0 mainline6(0.9.160) released. 50029 lines.
  • v1.0, 2014-07-13, refine the bandwidth check/test, add as/js library, use srs-librtmp for linux tool. 0.9.159
  • v1.0, 2014-07-12, complete rtmp stack utest. 0.9.156
  • v1.0, 2014-07-06, fix #81, fix HLS codec info, IOS ok. 0.9.153.
  • v1.0, 2014-07-06, fix #103, support all aac sample rate. 0.9.150.
  • v1.0, 2014-07-05, complete kernel utest. 0.9.149
  • v1.0, 2014-06-30, fix #111, always use 31bits timestamp. 0.9.143.
  • v1.0, 2014-06-28, response the call message with null. 0.9.137
  • v1.0, 2014-06-28, fix #110, thread start segment fault, thread cycle stop destroy thread. 0.9.136
  • v1.0, 2014-06-27, fix #109, fix the system jump time, adjust system startup time. 0.9.135
  • v1.0, 2014-06-27, 1.0 mainline5(0.9.134) released. 41573 lines.
  • v1.0, 2014-06-27, SRS online 30days with RTMP/HLS.
  • v1.0, 2014-06-25, fix #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+ connections(270kbps). 0.9.130
  • v1.0, 2014-06-21, support edge token traverse, fix #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
  • v1.0, 2014-06-14, fix #98, workaround for librtmp ping(fmt=1,cid=2 fresh stream). 0.9.124
  • v1.0, 2014-05-29, support flv inject and flv http streaming with start=bytes. 0.9.122
  • v1.0, 2014-05-28, 1.0 mainline4(0.9.120) released. 39200 lines.
  • v1.0, 2014-05-27, fix #87, add source id for full trackable log. 0.9.120
  • v1.0, 2014-05-27, fix #84, unpublish when edge disconnect. 0.9.119
  • v1.0, 2014-05-27, fix #89, config to /dev/null to disable ffmpeg log. 0.9.117
  • v1.0, 2014-05-25, fix #76, allow edge vhost to add or remove. 0.9.114
  • v1.0, 2014-05-24, Johnny contribute ossrs.net. karthikeyan start to translate wiki to English.
  • v1.0, 2014-05-22, fix #78, st joinable thread must be stop by other threads, 0.9.113
  • v1.0, 2014-05-22, support amf0 StrictArray(0x0a). 0.9.111.
  • v1.0, 2014-05-22, support flv parser, add amf0 to librtmp. 0.9.110
  • v1.0, 2014-05-22, fix #74, add tcUrl for http callback on_connect, 0.9.109
  • v1.0, 2014-05-19, support http heartbeat, 0.9.107
  • v1.0, 2014-05-18, 1.0 mainline3(0.9.105) released. 37594 lines.
  • v1.0, 2014-05-18, support http api json, to PUT/POST. 0.9.105
  • v1.0, 2014-05-17, fix #72, also need stream_id for send_and_free_message. 0.9.101
  • v1.0, 2014-05-17, rename struct to class. 0.9.100
  • v1.0, 2014-05-14, fix #67 pithy print, stage must has a age. 0.9.98
  • v1.0, 2014-05-13, fix mem leak for delete[] SharedPtrMessage array. 0.9.95
  • v1.0, 2014-05-12, refine the kbps calc module. 0.9.93
  • v1.0, 2014-05-12, fix bug #64: install_dir=DESTDIR+PREFIX
  • v1.0, 2014-05-08, fix #36: never directly use *(int32_t*) for arm.
  • v1.0, 2014-05-08, fix #60: support aggregate message
  • v1.0, 2014-05-08, fix #59, edge support FMS origin server. 0.9.92
  • v1.0, 2014-05-06, fix #50, ubuntu14 build error.
  • v1.0, 2014-05-04, support mips linux.
  • v1.0, 2014-04-30, fix bug #34: convert signal to io thread. 0.9.85
  • v1.0, 2014-04-29, refine RTMP protocol completed, to 0.9.81
  • v1.0, 2014-04-28, 1.0 mainline2(0.9.79) released. 35255 lines.
  • v1.0, 2014-04-28, support full edge RTMP server. 0.9.79
  • v1.0, 2014-04-27, support basic edge(play/publish) RTMP server. 0.9.78
  • v1.0, 2014-04-25, add donation page. 0.9.76
  • v1.0, 2014-04-21, support android app to start srs for internal edge. 0.9.72
  • v1.0, 2014-04-19, support tool over srs-librtmp to ingest flv/rtmp. 0.9.71
  • v1.0, 2014-04-17, support dvr(record live to flv file for vod). 0.9.69
  • 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) released. 30000 lines.
  • v1.0, 2014-04-07, support ingest file/stream/device.
  • v1.0, 2014-04-05, support http api and http server.
  • 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.
  • 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.
  • v1.0, 2014-03-22, support make install/install-api and uninstall.
  • v1.0, 2014-03-22, add ./etc/init.d/srs, refine to support make clean then make.
  • v1.0, 2014-03-21, write pid to ./objs/srs.pid.
  • v1.0, 2014-03-20, refine hls code, support pure audio HLS.
  • 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
  • v1.0, 2014-03-16, support ARM(debian armhf, v7cpu) 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, SRS for arm, 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, FFMPEG, Reload
  • v1.0, 2014-02-27, add wiki LowLatency, HTTPCallback, ServerSideScript, IDE
  • v1.0, 2014-01-19, add wiki DeliveryHLS
  • v1.0, 2014-01-12, add wiki HowToAskQuestion, RtmpUrlVhost
  • v1.0, 2014-01-11, fix jw/flower player pause bug, which send closeStream actually.
  • v1.0, 2014-01-05, add wiki Build, Performance, 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 released. 20926 lines.
  • v0.9, 2013-12-25, fix the bitrate bug(in Bps), use enhanced microphone.
  • v0.9, 2013-12-22, demo video meeting or chat(SRS+cherrypy+jquery+bootstrap).
  • v0.9, 2013-12-22, merge from wenjie, support banwidth test.
  • v0.9, 2013-12-22, merge from wenjie: support set chunk size at vhost level
  • v0.9, 2013-12-21, add players for play and publish.
  • v0.9, 2013-12-15, ensure the HLS(ts) is continous when republish stream.
  • v0.9, 2013-12-15, fix the hls reload bug, feed it the sequence header.
  • v0.9, 2013-12-15, refine protocol, use int64_t timestamp for ts and jitter.
  • v0.9, 2013-12-15, support set the live queue length(in seconds), drop when full.
  • v0.9, 2013-12-15, fix the forwarder reconnect bug, feed it the sequence header.
  • v0.9, 2013-12-15, support reload the hls/forwarder/transcoder.
  • 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 released. 19186 lines.
  • v0.8, 2013-12-08, support http hooks: 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.
  • v0.8, 2013-12-07, update http/hls/rtmp load test tool st_load, use SRS rtmp sdk.
  • v0.8, 2013-12-06, support max_connections, drop if exceed.
  • v0.8, 2013-12-05, support log_dir, write ffmpeg log to file.
  • v0.8, 2013-12-05, fix the forward/hls/encoder bug.
  • v0.7, 2013-12-03, v0.7 released. 17605 lines.
  • v0.7, 2013-12-01, support dead-loop detect for forwarder and transcoder.
  • v0.7, 2013-12-01, support all ffmpeg filters and params.
  • v0.7, 2013-11-30, support live stream transcoder by ffmpeg.
  • v0.7, 2013-11-30, support --with/without -ffmpeg, build ffmpeg-2.1.
  • v0.7, 2013-11-30, add ffmpeg-2.1, x264-core138, lame-3.99.5, libaacplus-2.0.2.
  • v0.6, 2013-11-29, v0.6 released. 16094 lines.
  • v0.6, 2013-11-29, add performance summary, 1800 clients, 900Mbps, CPU 90.2%, 41MB.
  • v0.6, 2013-11-29, support forward stream to other edge server.
  • v0.6, 2013-11-29, support forward stream to other origin server.
  • v0.6, 2013-11-28, fix memory leak bug, aac decode bug.
  • v0.6, 2013-11-27, support --with or --without -hls and -ssl options.
  • v0.6, 2013-11-27, support AAC 44100HZ sample rate for iphone, adjust the timestamp.
  • v0.5, 2013-11-26, v0.5 released. 14449 lines.
  • v0.5, 2013-11-24, support HLS(m3u8), fragment and window.
  • v0.5, 2013-11-24, support record to ts file for HLS.
  • v0.5, 2013-11-21, add ts_info tool to demux ts file.
  • v0.5, 2013-11-16, add rtmp players(OSMF/jwplayer5/jwplayer6).
  • v0.4, 2013-11-10, v0.4 released. 12500 lines.
  • v0.4, 2013-11-10, support config and reload the pithy print.
  • v0.4, 2013-11-09, support reload config(vhost and its detail).
  • v0.4, 2013-11-09, support reload config(listen and chunk_size) by SIGHUP(1).
  • v0.4, 2013-11-09, support longtime(>4.6hours) publish/play.
  • v0.4, 2013-11-09, support config the chunk_size.
  • v0.4, 2013-11-09, support pause for live stream.
  • v0.3, 2013-11-04, v0.3 released. 11773 lines.
  • v0.3, 2013-11-04, support refer/play-refer/publish-refer.
  • v0.3, 2013-11-04, support vhosts specified config.
  • v0.3, 2013-11-02, support listen multiple ports.
  • v0.3, 2013-11-02, support config file in nginx-conf style.
  • v0.3, 2013-10-29, support pithy print log message specified by stage.
  • v0.3, 2013-10-28, support librtmp without extended-timestamp in 0xCX chunk packet.
  • v0.3, 2013-10-27, support cache last gop for client fast startup.
  • v0.2, 2013-10-25, v0.2 released. 10125 lines.
  • v0.2, 2013-10-25, support flash publish.
  • v0.2, 2013-10-25, support h264/avc codec by rtmp complex handshake.
  • v0.2, 2013-10-24, support time jitter detect and correct algorithm
  • v0.2, 2013-10-24, support decode codec type to cache the h264/avc sequence header.
  • v0.1, 2013-10-23, v0.1 released. 8287 lines.
  • v0.1, 2013-10-23, support basic amf0 codec, simplify the api using c-style api.
  • v0.1, 2013-10-23, support shared ptr msg for zero memory copy.
  • v0.1, 2013-10-22, support vp6 codec with rtmp protocol specified simple handshake.
  • v0.1, 2013-10-20, support multiple flash client play live streaming.
  • v0.1, 2013-10-20, support FMLE/FFMPEG publish live streaming.
  • v0.1, 2013-10-18, support rtmp message2chunk protocol(send_message).
  • v0.1, 2013-10-17, support rtmp chunk2message protocol(recv_message).

Performance

Performance benchmark history, on virtual box:

  • 2013-11-28, SRS 0.5.0, 1800clients, 90%CPU, 41MB. benchmark
  • 2014-07-12, SRS 0.9.156, 1800clients, 68%CPU, 38MB. benchmark
  • 2014-07-12, SRS 0.9.156, 2700clients, 89%CPU, 61MB. benchmark
  • 2014-11-11, SRS 1.0.5, 2700clients, 85%CPU, 66MB. (1.0 equals 2.0.12)

Latest benchmark(2014-07-12):

  1. 300 connections, 150Mbps, 500kbps, CPU 5.7%, MEM 9208KB.
  2. 600 connections, 300Mbps, 500kbps, CPU 18.3%, MEM 13MB.
  3. 900 connections, 450Mbps, 500kbps, CPU 27.9%, MEM 20MB.
  4. 1200 connections, 600Mbps, 500kbps, CPU 43.9%, MEM 26MB.
  5. 1500 connections, 750Mbps, 500kbps, CPU 55.2%, MEM 32MB.
  6. 1800 connections, 900Mbps, 500kbps, CPU 68.8%, MEM 38MB.
  7. 2100 connections, 1050Mbps, 500kbps, CPU 75.7%, MEM 46MB.
  8. 2400 connections, 1200Mbps, 500kbps, CPU 83.7%, MEM 54MB.
  9. 2700 connections, 1350Mbps, 500kbps, CPU 89.9%, MEM 61MB.
[winlin@dev6 srs]$ dstat
----total-cpu-usage---- -dsk/total- ---net/lo-- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
 29  17  39   0   0  15|   0  5325B| 163M  163M|   0     0 |4331  3386 
 30  16  38   0   0  16|   0  5325B| 160M  160M|   0     0 |4252  3332 
 30  15  37   0   0  17|   0  7646B| 169M  169M|   0     0 |4015  2886 
 30  17  36   0   0  17|   0  1638B| 197M  197M|   0     0 |4021  3037 
 31  17  35   0   0  17|   0   410B| 204M  204M|   0     0 |4181  3243 
 33  17  32   0   0  18|   0  2185B| 191M  191M|   0     0 |4305  3592 
 31  15  36   0   0  18|   0  1229B| 127M  127M|   0     0 |4446  3822 
 34  18  30   0   0  18|   0     0 | 231M  231M|   0     0 |4461  3691 
 32  17  33   0   0  18|   0   410B| 169M  169M|   0     0 |4518  3788 

Architecture

SRS always use the most simple architecture to support complex transaction.

  • System arch: the system structure and arch.
  • Modularity arch: the main modularity of SRS.
  • Stream arch: the stream dispatch arch of SRS.
  • RTMP cluster arch: the RTMP origin and edge cluster arch.
  • Multiple processes arch (by wenjie): the multiple process of SRS.
  • CLI arch: the cli arch for SRS, api to manage SRS.
  • Bandwidth specification: the bandwidth test specification of SRS.

System Architecture

+------------------------------------------------------+
|             SRS(Simple RTMP Server)                  |
+---------------+---------------+-----------+----------+
|   API/hook    |   Transcoder  |    HLS    |   RTMP   |
|  http-parser  |  FFMPEG/x264  |  NGINX/ts | protocol |
+---------------+---------------+-----------+----------+
|              Network(state-threads)                  |
+------------------------------------------------------+
|      All Linux(RHEL,CentOS,Ubuntu,Fedora...)         |
+------------------------------------------------------+

Modularity Architecture

+------------------------------------------------------+
|             Main(srs/bandwidth/librtmp)              |
+------------------------------------------------------+
|           App(Server/Client application)             |
+------------------------------------------------------+
|               RTMP(Protocol stack)                   |
+------------------------------------------------------+
|      Kernel(depends on Core, provides error/log)     |
+------------------------------------------------------+
|         Core(depends only on system apis)            |
+------------------------------------------------------+

Stream Architecture

                   +---------+              +----------+
                   + Publish +              +  Deliver |
                   +---|-----+              +----|-----+
+----------------------+-------------------------+----------------+
|     Input            | SRS(Simple RTMP Server) |     Output     |
+----------------------+-------------------------+----------------+
|    Encoder(1)        |   +-> RTMP protocol ----+-> Flash Player |
|  (FMLE,FFMPEG, -rtmp-+->-+-> HLS/NGINX --------+-> m3u8 player  |
|  Flash,XSPLIT,       |   +-> Fowarder ---------+-> RTMP Server  |
|  ......)             |   +-> Transcoder -------+-> RTMP Server  |
|                      |   +-> DVR --------------+-> FILE         |
|                      |   +-> BandwidthTest ----+-> Flash/StLoad |
+----------------------+                         |                |
|  MediaSource(2)      |                         |                |
|  (RTSP,FILE,         |                         |                |
|   HTTP,HLS,    ------+->-- Ingester ----(rtmp)-+-> SRS          |
|   Device,            |                         |                |
|   ......)            |                         |                |
+----------------------+-------------------------+----------------+

Remark:
(1) Encoder: encoder must push RTMP stream to SRS server.
(2) MediaSource: any media source, which can be ingest by ffmpeg.
(3) Ingester: SRS will fork a process to run ffmpeg(or your application) 
to ingest any input to rtmp, push to SRS.
                        +----------+        +----------+
               +--ATC->-+  server  +--ATC->-+ packager +-+   +---------+
+----------+   | RTMP   +----------+ RTMP   +----------+ |   | Reverse |    +-------+
| encoder  +->-+                                         +->-+  Proxy  +-->-+  CDN  +
+----------+   |        +----------+        +----------+ |   | (nginx) |    +-------+
               +--ATC->-+  server  +--ATC->-+ packager +-+   +---------+
                 RTMP   +----------+ RTMP   +----------+

Remark: cluster over edge, see Edge Remark: cluster over forward, see Forward

+---------+       +-----------------+     +-----------------------+ 
+ Encoder +--+-->-+  SRS(RTMP Edge) +--->-+     (RTMP Origin)     | 
+---------+  |    +-----------------+     |   SRS/FMS/NGINX-RTMP  |
             |                            |    Red5/HELIX/CRTMP   |
             +-------------------------->-+         ......        |
                                          +-----------------------+ 
Schema#1: Any RTMP encoder push RTMP stream to RTMP (origin/edge)server,
    where SRS RTMP Edge server will forward stream to origin.


+-------------+    +-----------------+      +--------------------+
| RTMP Origin +-->-+  SRS(RTMP Edge) +--+->-+  Client(RTMP/HLS)  |
+-------------+    +-----------------+  |   |  Flash/IOS/Android |
                                        |   +--------------------+
                                        |
                                        |   +-----------------+
                                        +->-+  SRS(RTMP Edge) +
                                            +-----------------+
Schema#2: SRS RTMP Edge server pull stream from origin (or upstream SRS 
    RTMP Edge server), then delivery to Client.

Bandwidth Test Workflow

   +------------+                    +----------+
   |  Client    |                    |  Server  |
   +-----+------+                    +-----+----+
         |                                 |
         |   connect vhost------------->   |
         |   <-----------result(success)   |
         |                                 |
         |   <----------call(start play)   |
         |   result(playing)---------->    |
         |   <-------------data(playing)   |
         |   <-----------call(stop play)   |
         |   result(stopped)---------->    |
         |                                 |
         |   <-------call(start publish)   |
         |   result(publishing)------->    |
         |   data(publishing)--------->    |
         |   <--------call(stop publish)   |
         |   result(stopped)(1)------->    |
         |                                 |
         |   <--------------------report   |
         |   final(2)----------------->    |
         |           <END>                 |
         
@See: class SrsBandwidth comments.

Beijing, 2013.10
Winlin

simple-rtmp-server's People

Contributors

winlinvip avatar t-bagwell avatar liuxc0116 avatar wenjiegit avatar niesongsong avatar zhengfl avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.