#Simple-RTMP-Server
SRS/2.0, ZhouGuowen
SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。
SRS is industrial-strength live streaming cluster, for the best conceptual integrity and the simplest implementation.
Why SRS?
- Completely rewrite HLS following m3u8/ts spec, and HLS support h.264+aac/mp3.
- High efficient RTMP deliverying support 7k+ concurrency, vhost based, both origin and edge.
- Embeded simplified media HTTP server for HLS, api and HTTP flv/ts/mp3/aac streaming.
- Variety input: RTMP, pull by ingest file or stream(HTTP/RTMP/RTSP), push by stream caster RTSP/MPEGTS-over-UDP.
- Popular internet delivery: RTMP/HDS for flash, HLS for mobile(IOS/IPad/MAC/Android), HTTP flv/ts/mp3/aac streaming for user prefered.
- Enhanced DVR and hstrs: segment/session/append plan, customer path and HTTP callback. the hstrs(http stream trigger rtmp source) enable the http-flv stream standby util encoder start publish, similar to rtmp, which will trigger edge to fetch from origin.
- Multiple feature: transcode, forward, ingest, http hooks, dvr, hls, rtsp, http streaming, http api, refer, log, bandwith test and srs-librtmp.
- Best maintainess: simple arch over state-threads(coroutine), single thread, single process and for linux/osx platform, common server x86-64/i386/arm/mips cpus, rich comments, strictly follows RTMP/HLS/RTSP spec.
- Easy to use: both English and Chinese wiki, typically config files in trunk/conf, traceable and session based log, linux service script and install script.
- MIT license, open source with product management and evolution.
Enjoy it!
About
SRS(Simple RTMP Server) over state-threads created in 2013.10.
SRS delivers rtmp/hls/http/hds live on x86/x64/arm/mips linux/osx, 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, with stream caster to push MPEGTS-over-UDP/RTSP to SRS, provides EN/CN wiki and the most simple architecture.
AUTHORS
There are two types of people that have contributed to the SRS project:
- AUTHORS: Contribute important features. 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:
- All friends of SRS for big supports.
- Genes amd Mabbott for creating st(state-threads).
- Michael Talyanksy for introducing us to use st.
- Roman Arutyunyan for creating nginx-rtmp for SRS to refer to.
- Joyent for creating http-parser for http-api for SRS.
- Igor Sysoev for creating nginx for SRS to refer to.
- FFMPEG and libx264 group for SRS to use to transcode.
- Guido van Rossum for creating Python for api-server for SRS.
Usage
Step 1: get SRS
git clone https://github.com/zhao-xiang/srs && cd srs/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 RTMP Cluster?(CN, EN)
- Usage: How to delivery HTTP FLV Live Streaming?(CN, EN)
- Usage: How to delivery HTTP FLV Live Streaming Cluster?(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 (CN, EN)
- Usage: How to publish h.264 raw stream to CN, EN)
- Usage: Solution using SRS?(CN, EN)
- Usage: Why SRS?(CN, EN)
Wiki
SRS 1.0 wiki
Please select your language:
SRS 2.0 wiki
Please select your language:
Features
- Simple, also stable enough.
- High-performance(CN, EN): single-thread, async socket, event/st-thread driven.
- High-concurrency(CN, EN), 6000+ connections(500kbps), 900Mbps, CPU 90.2%, 41MB
- Support RTMP Origin Server(CN,EN)
- Support RTMP Edge Server(CN, EN) for CDN, push/pull stream from any RTMP server
- Support single process; no multiple processes.
- Support Vhost(CN, EN), support __defaultVhost__.
- Support RTMP(CN, EN) live streaming; no vod streaming.
- Support Apple HLS(m3u8)(CN, EN) live streaming.
- Support HLS audio-only(CN, EN) live streaming.
- Support Reload(CN, EN) config to enable changes.
- Support cache last gop(CN, EN) for flash player to fast startup.
- Support listen at multiple ports.
- Support long time(>4.6hours) publish/play.
- Support Forward(CN, EN) in master-slave mode.
- Support live stream Transcoding(CN, EN) by ffmpeg.
- Support ffmpeg(CN, EN) filters(logo/overlay/crop), x264 params, copy/vn/an.
- Support audio transcode(CN, EN) only, speex/mp3 to aac
- Support http callback api hooks(CN, EN)(for authentication and injection).
- Support bandwidth test(CN, EN) api and flash client.
- Player, publisher(encoder), and demo pages(jquery+bootstrap)(CN,EN).
- Demo(CN, EN) video meeting or chat(SRS+cherrypy+jquery+bootstrap).
- Full documents in wiki(CN, EN), both Chinese and English.
- Support RTMP(play-publish) library: srs-librtmp(CN, EN)
- Support ARM cpu arch(CN, EN) with rtmp/ssl/hls/librtmp.
- Support init.d(CN, EN) and packge script, log to file.
- Support RTMP ATC(CN, EN) for HLS/HDS to support backup(failover)
- Support HTTP RESTful management api(CN, EN).
- Support Ingest(CN, EN) FILE/HTTP/RTMP/RTSP(RTP, SDP) to RTMP using external tools(e.g ffmepg).
- Support DVR(CN, EN), record live to flv file for vod.
- Support tracable log, session based log(CN, EN).
- Support DRM token traverse(CN, EN) for fms origin authenticate.
- Support system full utest on gtest.
- Support embeded HTTP server(CN, EN) for hls(live/vod)
- Support vod stream(http flv/hls vod stream)(CN, EN).
- Stable 1.0release branch.
- Support publish h264 raw stream(CN, EN) by srs-librtmp.
- Support 6k+ clients, 3Gbps per process.
- Suppport [English wiki][v1_EN_Home).
- Research and simplify st, bug #182.
- Support compile srs-librtmp on windows, bug #213.
- Support 10k+ clients, 4Gbps per process.
- Support publish aac adts raw stream(CN, EN) by srs-librtmp.
- Support 0.1s+ latency, read bug #257.
- Support allow/deny publish/play for all or specified ip(CN, EN).
- Support custom dvr path and http callback, read bug #179 and bug #274.
- Support rtmp remux to http flv/mp3/aac/ts live stream, read bug #293(CN, EN).
- Support HLS(h.264+mp3) streaming, read bug #301.
- Rewrite HLS(h.264+aac/mp3) streaming, read bug #304.
- [dev] Realease 2.0release branch.
- [experiment] Support Adobe HDS(f4m)(CN, EN) dynamic streaming.
- [experiment] Support push MPEG-TS over UDP to SRS, read bug #250.
- [experiment] Support push RTSP to SRS, read bug #133.
- [experiment] Support push flv stream over HTTP POST to SRS, read [wiki](CN, EN).
- [experiment] Support srs-dolphin, the multiple-process SRS.
- [experiment] Support remote console, read srs-ngb.
Compare
Compare SRS with other media server.
Stream Delivery
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
RTMP | Stable | Stable | Stable | Stable | Stable |
HLS | Stable | Stable | X | Stable | Stable |
HDS | Experiment | X | X | Stable | Stable |
HTTP FLV | Stable | X | X | X | X |
HLS(aonly) | Stable | X | X | Stable | Stable |
HTTP Server | Stable | Stable | X | X | Stable |
Cluster
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
RTMP Edge | Stable | X | X | Stable | X |
RTMP Backup | Stable | X | X | X | X |
VHOST | Stable | X | X | Stable | Stable |
Reload | Stable | X | X | X | X |
Forward | Stable | X | X | X | X |
ATC | Stable | X | X | X | X |
Stream Service
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
DVR | Stable | Stable | X | X | Stable |
Transcode | Stable | X | X | X | Stable |
HTTP API | Stable | Stable | X | X | Stable |
HTTP hooks | Stable | X | X | X | X |
GopCache | Stable | X | X | Stable | X |
Security | Stable | Stable | X | X | Stable |
Token Traverse | Stable | X | X | Stable | X |
Efficiency
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
Concurrency | 7.5k | 3k | 2k | 2k | 3k |
MultipleProcess | Experiment | Stable | X | X | X |
RTMP Latency | 0.1s | 3s | 3s | 3s | 3s |
HLS Latency | 10s | 30s | X | 30s | 30s |
Stream Caster
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
Ingest | Stable | X | X | X | X |
Push MPEGTS | Experiment | X | X | X | Stable |
Push RTSP | Experiment | X | Stable | X | Stable |
Push HTTP FLV | Experiment | X | X | X | X |
Debug System
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
BW check | Stable | X | X | X | X |
Tracable Log | Stable | X | X | X | X |
Docs
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
Demos | Stable | X | X | X | X |
WIKI(EN+CN) | Stable | EN only | X | X | Stable |
Others
Feature | SRS | NGINX | CRTMPD | FMS | WOWZA |
---|---|---|---|---|---|
ARM/MIPS | Stable | Stable | X | X | X |
Client Library | Stable | X | X | X | X |
Remark:
- Concurrency: The concurrency of single process.
- MultipleProcess: SRS is single process, while srs-dolphin is a MultipleProcess SRS.
- HLS aonly: The HLS audio only streaming delivery.
- BW check: The bandwidth check.
- Security: To allow or deny stream publish or play.
- Reload: Nginx supports reload, but not nginx-rtmp.
Releases
- 2015-12-23, Release v2.0a3, 2.0 alpha3, 2.0.205, 89544 lines.
- 2015-10-08, Release v2.0a2, 2.0 alpha2, 2.0.195, 89358 lines.
- 2015-09-14, Release v2.0a1, 2.0 alpha1, 2.0.189, 89269 lines.
- 2015-08-23, Release v2.0a0, 2.0 alpha0, 2.0.185, 89022 lines.
- 2015-05-23, Release v1.0r4, bug fixed, 1.0.32, 59509 lines.
- 2015-03-19, Release v1.0r3, bug fixed, 1.0.30, 59511 lines.
- 2015-02-12, Release v1.0r2, bug fixed, 1.0.27, 59507 lines.
- 2015-01-15, Release v1.0r1, bug fixed, 1.0.21, 59472 lines.
- 2014-12-05, Release v1.0r0, all bug fixed, 1.0.10, 59391 lines.
- 2014-10-09, Release v1.0-beta, all bug fixed, 1.0.0, 59316 lines.
- 2014-08-03, Release v1.0-mainline7, config utest, all bug fixed. 57432 lines.
- 2014-07-13, Release v1.0-mainline6, core/kernel/rtmp utest, refine bandwidth(as/js/srslibrtmp library). 50029 lines.
- 2014-06-27, Release v1.0-mainline5, refine perf 3k+ clients, edge token traverse, srs monitor, 30days online. 41573 lines.
- 2014-05-28, Release v1.0-mainline4, support heartbeat, tracable log, fix mem leak and bugs. 39200 lines.
- 2014-05-18, Release v1.0-mainline3, support mips, fms origin, json(http-api). 37594 lines.
- 2014-04-28, Release v1.0-mainline2, support dvr, android, edge. 35255 lines.
- 2014-04-07, Release v1.0-mainline, support arm, init.d, http [server][v1_CN_HTTPServer]/api, ingest. 30000 lines.
- 2013-12-25, Release v0.9, support bandwidth test, player/encoder/chat demos. 20926 lines.
- 2013-12-08, Release v0.8, support http hooks callback, update SB. 19186 lines.
- 2013-12-03, Release v0.7, support live stream transcoding. 17605 lines.
- 2013-11-29, Release v0.6, support forward stream to origin/edge. 16094 lines.
- 2013-11-26, Release v0.5, support HLS(m3u8), fragment and window. 14449 lines.
- 2013-11-10, Release v0.4, support reload config, pause, longtime publish/play. 12500 lines.
- 2013-11-04, Release v0.3, support vhost, refer, gop cache, listen multiple ports. 11773 lines.
- 2013-10-25, Release v0.2, support [rtmp][v1_CN_RTMPHandshake] flash publish, h264, time jitter correct. 10125 lines.
- 2013-10-23, Release v0.1, support rtmp FMLE/FFMPEG publish, vp6. 8287 lines.
- 2013-10-17, Created.
History
- v2.0, 2016-01-13, fix http reader bug, support infinite chunkted. 2.0.209
- v2.0, 2016-01-09, merge #559 fix memory leak bug. 2.0.208
- v2.0, 2016-01-09, merge #558 add tcUrl for on_publish.
- v2.0, 2016-01-05, add keyword XCORE for coredump to identify the version. 2.0.207
- v2.0, 2015-12-23, 2.0 alpha3(2.0.205) released. 89544 lines.
- v2.0, 2015-12-22, for #509 always alloc big object at heap. 2.0.205
- v2.0, 2015-12-22, for #418 ignore null connect props to make RED5 happy. 2.0.204
- v2.0, 2015-12-22, for #546 thread terminate normally dispose bug. 2.0.203
- v2.0, 2015-12-22, for #541 failed when chunk size too small. 2.0.202
- v2.0, 2015-12-15, default hls_on_error to continue. 2.0.201
- v2.0, 2015-11-16, for #518 fix fd leak bug when fork. 2.0.200
- v2.0, 2015-11-05, for #511 fix bug for restart thread. 2.0.199
- v2.0, 2015-11-02, for #515 use srs_freepa and SrsAutoFreeA for array. 2.0.198
- v2.0, 2015-10-28, for ExoPlayer #828, remove duration for live.
- v2.0, 2015-10-28, for ExoPlayer #828, add av tag in flv header. 2.0.197
- v2.0, 2015-10-27, for #512 partial hotfix the hls pure audio. 2.0.196
- v2.0, 2015-10-08, 2.0 alpha2(2.0.195) released. 89358 lines.
- v2.0, 2015-10-04, for #448 fix the bug of response of http hooks. 2.0.195
- v2.0, 2015-10-01, for #497 response error when client not found to kickoff. 2.0.194
- v2.0, 2015-10-01, for #495 decrease the srs-librtmp size. 2.0.193
- v2.0, 2015-09-23, for #485 error when arm glibc 2.15+ or not i386/x86_64/amd64. 2.0.192
- v2.0, 2015-09-23, for #485 srs for respberrypi and cubieboard. 2.0.191
- v2.0, 2015-09-21, fix #484 hotfix the openssl build script 2.0.190
- v2.0, 2015-09-14, 2.0 alpha1(2.0.189) released. 89269 lines.
- v2.0, 2015-09-14, fix #474 config to donot parse width/height from sps. 2.0.189
- v2.0, 2015-09-14, for #474 always release publish for source.
- v2.0, 2015-09-14, for #458 http hooks use source thread cid. 2.0.188
- v2.0, 2015-09-14, for #475 fix http hooks crash for st context switch. 2.0.187
- v2.0, 2015-09-09, support reload utc_time. 2.0.186
- v2.0, 2015-08-23, 2.0 alpha0(2.0.185) released. 89022 lines.
- v2.0, 2015-08-22, HTTP API support JSONP by specifies the query string callback=xxx.
- v2.0, 2015-08-20, fix #380, srs-librtmp send sequence header when sps or pps changed.
- v2.0, 2015-08-18, close #454, support obs restart publish. 2.0.184
- v2.0, 2015-08-14, use reduce_sequence_header for stream control.
- v2.0, 2015-08-14, use send_min_interval for stream control. 2.0.183
- v2.0, 2015-08-12, enable the SRS_PERF_TCP_NODELAY and add config tcp_nodelay. 2.0.182
- v2.0, 2015-08-11, for #442 support kickoff connected client. 2.0.181
- v2.0, 2015-07-21, for #169 support default values for transcode. 2.0.180
- v2.0, 2015-07-21, fix #435 add pageUrl for HTTP callback on_play.
- v2.0, 2015-07-20, refine the hls, ignore packet when no sequence header. 2.0.179
- v2.0, 2015-07-16, for #441 use 30s timeout for first msg. 2.0.178
- v2.0, 2015-07-14, refine hls disable the time jitter, support not mix monotonically increase. 2.0.177
- v2.0, 2015-07-01, fix #433 fix the sps parse bug. 2.0.176
- v2.0, 2015-06-10, fix #425 refine the time jitter, correct (-inf,-250)+(250,+inf) to 10ms. 2.0.175
- v2.0, 2015-06-10, fix #424 fix aggregate timestamp bug. 2.0.174
- v2.0, 2015-06-06, fix #421 drop video for unkown RTMP header.
- v2.0, 2015-06-05, fix #420 remove ts for hls ram mode.
- v2.0, 2015-05-30, fix #209 cleanup hls when stop and timeout. 2.0.173.
- v2.0, 2015-05-29, fix #409 support pure video hls. 2.0.172.
- v2.0, 2015-05-28, support srs-dolphin, the multiple-process SRS.
- v2.0, 2015-05-24, fix #404 register handler then start http thread. 2.0.167.
- v2.0, 2015-05-23, refine the thread, protocol, kbps code. 2.0.166
- v2.0, 2015-05-23, fix #391 copy request for async call.
- v2.0, 2015-05-22, fix #397 the USER_HZ maybe not 100. 2.0.165
- v2.0, 2015-05-22, for #400, parse when got entire http header, by feilong. 2.0.164.
- v2.0, 2015-05-19, merge from bravo system, add the rtmfp to bms(commercial srs). 2.0.163.
- v2.0, 2015-05-10, support push flv stream over HTTP POST to SRS.
- v2.0, 2015-04-20, support ingest hls live stream to RTMP.
- v2.0, 2015-04-15, for #383, support mix_correct algorithm. 2.0.161.
- v2.0, 2015-04-13, for #381, support reap hls/ts by gop or not. 2.0.160.
- v2.0, 2015-04-10, enhanced on_hls_notify, support HTTP GET when reap ts.
- v2.0, 2015-04-10, refine the hls deviation for floor algorithm.
- v2.0, 2015-04-08, for #375, fix hls bug, keep cc continous between ts files. 2.0.159.
- v2.0, 2015-04-04, for #304, rewrite annexb mux for ts, refer to apple sample. 2.0.157.
- v2.0, 2015-04-03, enhanced avc decode, parse the sps get width+height. 2.0.156.
- v2.0, 2015-04-03, for #372, support transform vhost of edge 2.0.155.
- v2.0, 2015-03-30, for #366, config hls to disable cleanup of ts. 2.0.154.
- v2.0, 2015-03-31, support server cycle handler. 2.0.153.
- v2.0, 2015-03-31, support on_hls for http hooks. 2.0.152.
- v2.0, 2015-03-31, enhanced hls, support deviation for duration. 2.0.151.
- v2.0, 2015-03-30, for #351, support config the m3u8/ts path for hls. 2.0.149.
- v2.0, 2015-03-17, for #155, osx(darwin) support demo with nginx and ffmpeg. 2.0.143.
- v2.0, 2015-03-15, start 2.0release branch, 80773 lines.
- v2.0, 2015-03-14, fix #324, support hstrs(http stream trigger rtmp source) edge mode. 2.0.140.
- v2.0, 2015-03-14, for #324, support hstrs(http stream trigger rtmp source) origin mode. 2.0.139.
- v2.0, 2015-03-12, fix #328, support adobe hds. 2.0.138.
- v2.0, 2015-03-10, fix #155, support osx(darwin) for mac pro. 2.0.137.
- v2.0, 2015-03-08, fix #316, http api provides stream/vhost/srs/server bytes, codec and count. 2.0.136.
- v2.0, 2015-03-08, fix #310, refine aac LC, support aac HE/HEv2. 2.0.134.
- v2.0, 2015-03-06, for #322, fix http-flv stream bug, support multiple streams. 2.0.133.
- v2.0, 2015-03-06, refine http request parse. 2.0.132.
- v2.0, 2015-03-01, for #179, revert dvr http api. 2.0.128.
- v2.0, 2015-02-24, for #304, fix hls bug, write pts/dts error. 2.0.124
- v2.0, 2015-02-19, refine dvr, append file when dvr file exists. 2.0.122.
- v2.0, 2015-02-19, refine pithy print to more easyer to use. 2.0.121.
- v2.0, 2015-02-18, fix #133, support push rtsp to srs. 2.0.120.
- v2.0, 2015-02-17, the join maybe failed, should use a variable to ensure thread terminated. 2.0.119.
- v2.0, 2015-02-15, for #304, support config default acodec/vcodec. 2.0.118.
- v2.0, 2015-02-15, for #304, rewrite hls/ts code, support h.264+mp3 for hls. 2.0.117.
- v2.0, 2015-02-12, for #304, use stringstream to generate m3u8, add hls_td_ratio. 2.0.116.
- v2.0, 2015-02-11, dev code ZhouGuowen for 2.0.115.
- v2.0, 2015-02-10, for #311, set pcr_base to dts. 2.0.114.
- v2.0, 2015-02-10, fix the bug of ibmf format which decoded in annexb.
- v2.0, 2015-02-10, for #310, downcast aac SSR to LC. 2.0.113
- v2.0, 2015-02-03, fix #136, support hls without io(in ram). 2.0.112
- v2.0, 2015-01-31, for #250, support push MPEGTS over UDP to SRS. 2.0.111
- v2.0, 2015-01-29, build libfdk-aac in ffmpeg. 2.0.108
- v2.0, 2015-01-25, for #301, hls support h.264+mp3, ok for vlc. 2.0.107
- v2.0, 2015-01-25, for #301, http ts stream support h.264+mp3. 2.0.106
- v2.0, 2015-01-25, hotfix #268, refine the pcr start at 0, dts/pts plus delay. 2.0.105
- v2.0, 2015-01-25, hotfix #151, refine pcr=dts-800ms and use dts/pts directly. 2.0.104
- v2.0, 2015-01-23, hotfix #151, use absolutely overflow to make jwplayer happy. 2.0.103
- v2.0, 2015-01-22, for #293, support http live ts stream. 2.0.101.
- v2.0, 2015-01-19, for #293, support http live flv/aac/mp3 stream with fast cache. 2.0.100.
- v2.0, 2015-01-18, for #293, support rtmp remux to http flv live stream. 2.0.99.
- v2.0, 2015-01-17, fix #277, refine http server refer to go http-framework. 2.0.98
- v2.0, 2015-01-17, for #277, refine http api refer to go http-framework. 2.0.97
- v2.0, 2015-01-17, hotfix #290, use iformat only for rtmp input. 2.0.95
- v2.0, 2015-01-08, hotfix #281, fix hls bug ignore type-9 send aud. 2.0.93
- v2.0, 2015-01-03, fix #274, http-callback support on_dvr when reap a dvr file. 2.0.89
- v2.0, 2015-01-03, hotfix to remove the pageUrl for http callback. 2.0.88
- v2.0, 2015-01-03, fix #179, dvr support custom filepath by variables. 2.0.87
- v2.0, 2015-01-02, fix #211, support security allow/deny publish/play all/ip. 2.0.86
- v2.0, 2015-01-02, hotfix #207, trim the last 0 of log. 2.0.85
- v2.0, 2014-01-02, fix #158, http-callback check http status code ok(200). 2.0.84
- v2.0, 2015-01-02, hotfix #216, http-callback post in application/json content-type. 2.0.83
- v2.0, 2014-01-02, fix #263, srs-librtmp flv read tag should init size. 2.0.82
- v2.0, 2015-01-01, hotfix #270, memory leak for http client post. 2.0.81
- v2.0, 2014-12-12, fix #266, aac profile is object id plus one. 2.0.80
- v2.0, 2014-12-29, hotfix #267, the forward dest ep should use server. 2.0.79
- v2.0, 2014-12-29, hotfix #268, the hls pcr is negative when startup. 2.0.78
- v2.0, 2014-12-22, hotfix #264, ignore NALU when sequence header to make HLS happy. 2.0.76
- v2.0, 2014-12-20, hotfix #264, support disconnect publish connect when hls error. 2.0.75
- v2.0, 2014-12-12, fix #257, support 0.1s+ latency. 2.0.70
- v2.0, 2014-12-08, update wiki for mr(EN, CN) and mw(EN, CN).
- v2.0, 2014-12-07, fix #251, 10k+ clients, use queue cond wait and fast vector. 2.0.67
- v2.0, 2014-12-05, fix #251, 9k+ clients, use fast cache for msgs queue. 2.0.57
- v2.0, 2014-12-04, fix #241, add mw(merged-write) config. 2.0.53
- v2.0, 2014-12-04, for #241, support mr(merged-read) config and reload. 2.0.52.
- v2.0, 2014-12-04, enable #241 and #248, +25% performance, 2.5k publisher. 2.0.50
- v2.0, 2014-12-04, fix #248, improve about 15% performance for fast buffer. 2.0.49
- v2.0, 2014-12-03, fix #244, conn thread use cond to wait for recv thread error. 2.0.47.
- v2.0, 2014-12-02, merge #239, traverse the token before response connect. 2.0.45.
- v2.0, 2014-12-02, srs-librtmp support hijack io apis for st-load. 2.0.42.
- v2.0, 2014-12-01, for #237, refine syscall for recv, supports 1.5k clients. 2.0.41.
- v2.0, 2014-11-30, add qtcreate project file trunk/src/qt/srs/srs-qt.pro. 2.0.39.
- v2.0, 2014-11-29, fix #235, refine handshake, replace union with template method. 2.0.38.
- v2.0, 2014-11-28, fix #215, add srs_rtmp_dump tool. 2.0.37.
- v2.0, 2014-11-25, update PRIMARY, AUTHORS, CONTRIBUTORS rule. 2.0.32.
- v2.0, 2014-11-24, fix #212, support publish aac adts raw stream. 2.0.31.
- v2.0, 2014-11-22, fix #217, remove timeout recv, support 7.5k+ 250kbps clients. 2.0.30.
- v2.0, 2014-11-21, srs-librtmp add rtmp prefix for rtmp/utils/human apis. 2.0.29.
- v2.0, 2014-11-21, refine examples of srs-librtmp, add srs_print_rtmp_packet. 2.0.28.
- v2.0, 2014-11-20, fix #212, support publish audio raw frames. 2.0.27
- v2.0, 2014-11-19, fix #213, support compile srs-librtmp on windows, bug #213. 2.0.26
- v2.0, 2014-11-18, all wiki translated to English. 2.0.23.
- v2.0, 2014-11-15, fix #204, srs-librtmp drop duplicated sps/pps(sequence header). 2.0.22.
- v2.0, 2014-11-15, fix #203, srs-librtmp drop any video before sps/pps(sequence header). 2.0.21.
- v2.0, 2014-11-15, fix #202, fix memory leak of h.264 raw packet send in srs-librtmp. 2.0.20.
- v2.0, 2014-11-13, fix #200, deadloop when read/write 0 and ETIME. 2.0.16.
- v2.0, 2014-11-13, fix #194, writev multiple msgs, support 6k+ 250kbps clients. 2.0.15.
- v2.0, 2014-11-12, fix #194, optmized st for timeout recv. pulse to 500ms. 2.0.14.
- v2.0, 2014-11-11, fix #195, remove the confuse code st_usleep(0). 2.0.13.
- v2.0, 2014-11-08, fix #191, configure --export-librtmp-project and --export-librtmp-single. 2.0.11.
- v2.0, 2014-11-08, fix #66, srs-librtmp support write h264 raw packet. 2.0.9.
- v2.0, 2014-10-25, fix #185, AMF0 support 0x0B the date type codec. 2.0.7.
- v2.0, 2014-10-24, fix #186, hotfix for bug #186, drop connect args when not object. 2.0.6.
- v2.0, 2014-10-24, rename wiki/xxx to wiki/v1_CN_xxx. 2.0.3.
- v2.0, 2014-10-19, fix #184, support AnnexB in RTMP body for HLS. 2.0.2
- v2.0, 2014-10-18, remove supports for OSX(darwin). 2.0.1.
- v2.0, 2014-10-16, revert github srs README to English. 2.0.0.
- v1.0, 2014-12-05, 1.0 release(1.0.10) released. 59391 lines.
- 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_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.
- 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 SB, 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.
- See also: Performance for x86/x64 Test Guide
- See also: Performance for RaspberryPi
- About multiple-process performance, read srs-dolphin.
Play RTMP benchmark
The play RTMP benchmark by SB:
Update | SRS | Clients | Type | CPU | Memory | Commit |
---|---|---|---|---|---|---|
2013-11-28 | 0.5.0 | 1.8k(1800) | players | 90% | 41M | - |
2014-07-12 | 0.9.156 | 1.8k(1800) | players | 68% | 38MB | - |
2014-07-12 | 0.9.156 | 2.7k(2700) | players | 89% | 61MB | code |
2014-11-11 | 1.0.5 | 2.7k(2700) | players | 85% | 66MB | - |
2014-11-11 | 2.0.12 | 2.7k(2700) | players | 85% | 66MB | - |
2014-11-12 | 2.0.14 | 2.7k(2700) | players | 69% | 59MB | - |
2014-11-12 | 2.0.14 | 3.5k(3500) | players | 95% | 78MB | code |
2014-11-13 | 2.0.15 | 6.0k(6000) | players | 82% | 203MB | code |
2014-11-22 | 2.0.30 | 7.5k(7500) | players | 87% | 320MB | code |
2014-12-05 | 2.0.55 | 8.0k(8000) | players | 89% | 360MB | code |
2014-12-05 | 2.0.57 | 9.0k(9000) | players | 90% | 468MB | code |
2014-12-07 | 2.0.67 | 10k(10000) | players | 95% | 656MB | code |
Publish RTMP benchmark
The publish RTMP benchmark by SB:
Update | SRS | Clients | Type | CPU | Memory | Commit |
---|---|---|---|---|---|---|
2014-12-03 | 1.0.10 | 1.2k(1200) | publishers | 96% | 43MB | - |
2014-12-03 | 2.0.12 | 1.2k(1200) | publishers | 96% | 43MB | - |
2014-12-03 | 2.0.47 | 1.2k(1200) | publishers | 84% | 76MB | code |
2014-12-03 | 2.0.47 | 1.4k(1400) | publishers | 95% | 140MB | - |
2014-12-03 | 2.0.48 | 1.4k(1400) | publishers | 95% | 140MB | code |
2014-12-04 | 2.0.49 | 1.4k(1400) | publishers | 68% | 144MB | - |
2014-12-04 | 2.0.49 | 2.5k(2500) | publishers | 95% | 404MB | code |
2014-12-04 | 2.0.51 | 2.5k(2500) | publishers | 91% | 259MB | code |
2014-12-04 | 2.0.52 | 4.0k(4000) | publishers | 80% | 331MB | code |
Play HTTP FLV benchmark
The play HTTP FLV benchmark by SB:
Update | SRS | Clients | Type | CPU | Memory | Commit |
---|---|---|---|---|---|---|
2014-05-24 | 2.0.167 | 1.0k(1000) | players | 82% | 86MB | - |
2014-05-24 | 2.0.168 | 2.3k(2300) | players | 92% | 276MB | code |
2014-05-24 | 2.0.169 | 3.0k(3000) | players | 94% | 188MB | code |
2014-05-24 | 2.0.170 | 3.0k(3000) | players | 89% | 96MB | code |
2014-05-25 | 2.0.171 | 6.0k(6000) | players | 84% | 297MB | code |
Latency benchmark
The latency between encoder and player with realtime config(CN, EN): |
Update | SRS | VP6 | H.264 | VP6+MP3 | H.264+MP3 |
---|---|---|---|---|---|
2014-12-03 | 1.0.10 | 0.4s | 0.4s | 0.9s | 1.2s |
2014-12-12 | 2.0.70 | 0.1s | 0.4s | 1.0s | 0.9s |
2014-12-16 | 2.0.72 | 0.1s | 0.4s | 0.8s | 0.6s |
We use FMLE as encoder for benchmark. The latency of server is 0.1s+, and the bottleneck is the encoder. For more information, read bug #257.
HLS overhead
About the HLS overhead of SRS, we compare the overhead to FLV by remux the HLS to FLV by ffmpeg.
Bitrate | Duration | FLV(KB) | HLS(KB) | Overhead |
---|---|---|---|---|
275kbps | 600s | 11144 | 12756 | 14.46% |
260kbps | 1860s | 59344 | 68004 | 14.59% |
697kbps | 60s | 5116 | 5476 | 7.03% |
565kbps | 453s | 31316 | 33544 | 7.11% |
565kbps | 1813s | 125224 | 134140 | 7.12% |
861kbps | 497s | 52316 | 54924 | 4.98% |
857kbps | 1862s | 195008 | 204768 | 5.00% |
1301kbps | 505s | 80320 | 83676 | 4.17% |
1312kbps | 1915s | 306920 | 319680 | 4.15% |
2707kbps | 600s | 198356 | 204560 | 3.12% |
2814kbps | 1800s | 618456 | 637660 | 3.10% |
2828kbps | 60s | 20716 | 21356 | 3.08% |
2599kbps | 307s | 97580 | 100672 | 3.16% |
2640kbps | 1283s | 413880 | 426912 | 3.14% |
5254kbps | 71s | 45832 | 47056 | 2.67% |
5147kbps | 370s | 195040 | 200280 | 2.68% |
5158kbps | 1327s | 835664 | 858092 | 2.68% |
The HLS overhead is calc by: (HLS - FLV) / FLV * 100%.
The overhead is larger than this benchmark(48kbps audio is best overhead), for we fix the #512.
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.
System Architecture
+------------------------------------------------------+ | SRS(Simple RTMP Server) | +---------------+---------------+-----------+----------+ | API/hook | Transcoder | HLS/HDS | RTMP/FLV | | http-parser | FFMPEG/x264 | NGINX/ts | protocol | +---------------+---------------+-----------+----------+ | Network(state-threads) | +------------------------------------------------------+ | All Linux/Unix(RHEL,CentOS,Ubuntu,Fedora...) | +------------------------------------------------------+
Modularity Architecture
+------------------------------------------------------+ | Main(srs/ingest-hls/librtmp) | +------------------------------------------------------+ | App(Server/Client application) | +------------------------------------------------------+ | RTMP/HTTP/RawStream(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/HDS --------+-> Flash player | | (FMLE,FFMPEG, -rtmp-+->-+-> HLS/HTTP ---------+-> M3u8 player | | Flash,XSPLIT, | +-> FLV/MP3/Aac/Ts ---+-> HTTP player | | ......) | +-> Fowarder ---------+-> RTMP server | | | +-> Transcoder -------+-> RTMP server | | | +-> DVR --------------+-> Flv file | | | +-> BandwidthTest ----+-> flash | +----------------------+ | | | MediaSource(2) | | | | (RTSP,FILE, | | | | HTTP,HLS, --pull-+->-- Ingester(3) -(rtmp)-+-> SRS | | Device, | | | | ......) | | | +----------------------+ | | | MediaSource(2) | | | | (RTSP,FILE, | | | | HTTP,HLS, --push-+->-- Streamer(4) -(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. Read Ingest. (4) Streamer: SRS will listen for some protocol and accept stream push over some protocol and remux to rtmp to SRS. Read Streamer.
Beijing, 2013.10
Winlin