SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

Overview

SRS(Simple Realtime Server)

SRS/4.0,Leo,是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

SRS is licenced under MIT, but some depended libraries are distributed using their own licenses.

Usage

Run SRS by docker, images is here or there, please set the CANDIDATE (CN,EN) if WebRTC enabled:

docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
    --env CANDIDATE=$(ifconfig en0 inet| grep 'inet '|awk '{print $2}') -p 8000:8000/udp \
    ossrs/srs:v4.0.117 ./objs/srs -c conf/srs.conf

Or build SRS from source(or mirrors), by CentOS7(or Linux(CN,EN)):

git clone -b 4.0release https://gitee.com/ossrs/srs.git &&
cd srs/trunk && ./configure && make && ./objs/srs -c conf/srs.conf

Open http://localhost:8080/ to check it, then publish stream by FFmpeg. It's also able to publish by H5 if WebRTC is enabled:

docker run --rm -it --network=host ossrs/srs:encoder \
  ffmpeg -re -i ./doc/source.flv -c copy -f flv -y rtmp://localhost/live/livestream

Play the following streams by players:

From here, please read wikis:

  • SRS 4.0 English Wiki, please read Wiki first.
  • SRS 4.0 中文Wiki,不读Wiki一定扑街,不读文档请不要提Issue,不读文档请不要提问题,任何文档中明确说过的疑问都不会解答。

Fast index for Wikis:

  • How to deliver RTMP streaming?(CN, EN)
  • How to build RTMP Edge-Cluster?(CN, EN)
  • How to build RTMP Origin-Cluster?(CN, EN)
  • How to deliver HTTP-FLV streaming?(CN, EN)
  • How to deliver HLS streaming?(CN, EN)
  • How to deliver low-latency streaming?(CN, EN)
  • How to use WebRTC? (CN, EN)

Other important wiki:

  • Usage: How to publish GB28181 to SRS? #1500
  • Usage: How to delivery DASH(Experimental)?(CN, EN)
  • Usage: How to transode RTMP stream by FFMPEG?(CN, EN)
  • Usage: How to delivery HTTP FLV Live Streaming Cluster?(CN, EN)
  • Usage: How to ingest file/stream/device to RTMP?(CN, EN)
  • Usage: How to forward stream to other servers?(CN, EN)
  • Usage: How to improve edge performance for multiple CPUs? (CN, EN)
  • Usage: How to file a bug or contact us? (CN, EN)

Ports

The ports used by SRS, kernel services:

  • tcp://1935, for RTMP live streaming server(CN,EN).
  • tcp://1985, HTTP API server, for HTTP-API(CN, EN), WebRTC(CN, EN), etc.
  • tcp://8080, HTTP live streaming server, HTTP-FLV(CN, EN), HLS(CN, EN) as such.
  • udp://8000, WebRTC Media(CN, EN) server.

For optional HTTPS services, which might be provided by other web servers:

  • tcp://8088, HTTPS live streaming server.
  • tcp://1990, HTTPS API server.

For optional stream caster services, to push streams to SRS:

For external services to work with SRS:

Features

  • Using coroutine by ST, it's really simple and stupid enough.
  • Support cluster which consists of origin (CN,EN) and edge(CN, EN) server and uses RTMP as default transport protocol.
  • Origin server supports remuxing RTMP to HTTP-FLV(CN, EN) and HLS(CN, EN).
  • Edge server supports remuxing RTMP to HTTP-FLV(CN, EN). As for HLS(CN, EN) edge server, recomment to use HTTP edge server, such as NGINX.
  • Support HLS with audio-only(CN, EN), which need to build the timestamp from AAC samples, so we enhanced it please read #547.
  • Support HLS with mp3(h.264+mp3) audio codec, please read bug #301.
  • Support transmux RTMP to HTTP-FLV/MP3/AAC/TS, please read wiki(CN, EN).
  • Support ingesting(CN, EN) other protocols to SRS by FFMPEG.
  • Support RTMP long time(>4.6hours) publishing/playing, with the timestamp corrected.
  • Support native HTTP server(CN, EN) for http api and http live streaming.
  • Support HTTP CORS for js in http api and http live streaming.
  • Support HTTP API(CN, EN) for system management.
  • Support HTTP callback(CN, EN) for authentication and integration.
  • Support DVR(CN, EN) to record live streaming to FLV file.
  • Support DVR control module like NGINX-RTMP, please read #459.
  • Support EXEC like NGINX-RTMP, please read bug #367.
  • Support security strategy including allow/deny publish/play IP(CN, EN).
  • Support low latency(0.1s+) transport model, please read bug #257.
  • Support gop-cache(CN, EN) for player fast startup.
  • Support Vhost(CN, EN) and __defaultVhost__.
  • Support reloading(CN, EN) to apply changes of config.
  • Support listening at multiple ports.
  • Support forwarding(CN, EN) to other RTMP servers.
  • Support transcoding(CN, EN) by FFMPEG.
  • All wikis are writen in Chinese and English.
  • Enhanced json, replace NXJSON(LGPL) with json-parser(BSD), read #904.
  • Support valgrind and latest ARM by patching ST, read ST#1 and ST#2.
  • Support traceable and session-based log(CN, EN).
  • High performance(CN, EN) RTMP/HTTP-FLV, 6000+ connections.
  • Enhanced complex error code with description and stack, read #913.
  • Enhanced RTMP url which supports vhost in stream, read #1059.
  • Support origin cluster, please read #464, RTMP 302.
  • Support listen at IPv4 and IPv6, read #460.
  • Improve test coverage for core/kernel/protocol/service.
  • Support docker by srs-docker.
  • Support multiple processes by ReusePort(CN, EN), #775.
  • Support a simple mgmt console, please read srs-ngb.
  • [Experimental] Support playing stream by WebRTC, #307.
  • [Experimental] Support publishing stream by WebRTC, #307.
  • [Experimental] Support mux RTP/RTCP/DTLS/SRTP on one port for WebRTC, #307.
  • [Experimental] Support client address changing for WebRTC, #307.
  • [Experimental] Support transcode RTMP/AAC to WebRTC/Opus, #307.
  • [Experimental] Support AV1 codec for WebRTC, #2324.
  • [Experimental] Enhance HTTP Stream Server for HTTP-FLV, HTTPS, HLS etc. #1657.
  • [Experimental] Support push stream by GB28181, #1500.
  • [Experimental] Support DVR in MP4 format, read #738.
  • [Experimental] Support MPEG-DASH, the future live streaming protocol, read #299.
  • [Experimental] Support pushing MPEG-TS over UDP, please read bug #250.
  • [Experimental] Support pushing FLV over HTTP POST, please read wiki(CN, EN).
  • [Experimental] Support HTTP RAW API, please read #459, #470, #319.
  • [Experimental] Support SRT server, read #1147.
  • [Deprecated] Support pushing RTSP, please read bug #2304.
  • [Deprecated] Support Adobe HDS(f4m), please read wiki(CN, EN) and #1535.
  • [Deprecated] Support bandwidth testing, please read #1535.
  • [Deprecated] Support Adobe FMS/AMS token traverse(CN, EN) authentication, please read #1535.
  • [Removed] Support RTMP client library: srs-librtmp.
  • Enhanced forwarding with vhost and variables, #1342.
  • Support DVR to Cloud Storage, #1193.
  • Support transmux RTC to RTMP, #2093.
  • Support H.265 over RTMP and HLS, #465.
  • Support IETF-QUIC for WebRTC Cluster, #2091.
  • Improve RTC performance to 5K by multiple threading, #2188.
  • Support source cleanup for idle streams, #413.
  • Support change user to run SRS, #1111.
  • Support HLS variant, #463.

Remark: About the milestone and product plan, please read (CN, EN) wiki.

V4 changes

  • v4.0, 2021-06-01, Support --shared-ffmpeg to link with *.so for LGPL license. 4.0.126
  • v4.0, 2021-06-01, Support --shared-srt to link with *.so for MPL license. 4.0.125
  • v4.0, 2021-05-31, Use SPDX-License-Identifier: MIT. 4.0.124
  • v4.0, 2021-05-28, Fix bugs for GB28181 and RTC. 4.0.123
  • v4.0, 2021-05-21, Fix #2370 bug for Firefox play stream(published by Chrome). 4.0.121
  • v4.0, 2021-05-21, RTC: Refine sdk, migrate from onaddstream to ontrack. 4.0.120
  • v4.0, 2021-05-21, Tools: Refine configure options. 4.0.119
  • v4.0, 2021-05-20, Fix build fail when disable RTC by --rtc=off. 4.0.118
  • v4.0, 2021-05-19, Fix #2362: Allow WebRTC to play before publishing, for GB28181 as such. 4.0.117
  • v4.0, 2021-05-18, Fix #2355: GB28181: Fix play by RTC bug. 4.0.116
  • v4.0, 2021-05-15, SRT: Build SRT from source by SRS. 4.0.115
  • v4.0, 2021-05-15, Rename SrsConsumer* to SrsLiveConsumer*. 4.0.114
  • v4.0, 2021-05-15, Rename SrsRtcStream* to SrsRtcSource*. 4.0.113
  • v4.0, 2021-05-15, Rename SrsSource* to SrsLiveSource*. 4.0.112
  • v4.0, 2021-05-15, Rename SrsRtpPacket2 to SrsRtpPacket. 4.0.111
  • v4.0, 2021-05-14, RTC: Remove Object Cache Pool, no effect. 4.0.110
  • v4.0, 2021-05-14, Change virtual public to public. 4.0.109
  • v4.0, 2021-05-14, Refine id and vid for statistic. 4.0.108
  • v4.0, 2021-05-09, Refine tid for sdk and demos. 4.0.106
  • v4.0, 2021-05-08, Refine shared fast timer. 4.0.105
  • v4.0, 2021-05-08, Refine global or thread-local variables initialize. 4.0.104
  • v4.0, 2021-05-07, RTC: Support circuit breaker. 4.0.103
  • v4.0, 2021-05-07, RTC: Refine play stream find track. 4.0.102
  • v4.0, 2021-05-07, RTC: Refine FastTimer to fixed interval. 4.0.101
  • v4.0, 2021-05-06, RTC: Fix config bug for nack and twcc. 4.0.99
  • v4.0, 2021-05-04, Add video room demo. 4.0.98
  • v4.0, 2021-05-03, Add RTC stream merging demo by FFmpeg. 4.0.97
  • v4.0, 2021-05-02, Add one to one demo. 4.0.96
  • v4.0, 2021-04-20, Support RTC2RTMP bridger and shared FastTimer. 4.0.95
  • v4.0, 2021-04-20, Refine transcoder to support aac2opus and opus2aac. 4.0.94
  • v4.0, 2021-05-01, Timer: Extract and apply shared FastTimer. 4.0.93
  • v4.0, 2021-04-29, RTC: Support AV1 for Chrome M90. 4.0.91
  • v4.0, 2021-04-24, Change push-RTSP as deprecated feature.
  • v4.0, 2021-04-24, Player: Change the default from RTMP to HTTP-FLV.
  • v4.0, 2021-04-24, Disable CherryPy by --cherrypy=off. 4.0.90
  • v4.0, 2021-04-01, RTC: Refine TWCC and SDP exchange. 4.0.88
  • v4.0, 2021-03-24, RTC: Support WebRTC re-publish stream. 4.0.87
  • v4.0, 2021-03-24, RTC: Use fast parse TWCC-ID, ignore in packet parsing. 4.0.86
  • v4.0, 2021-03-09, DTLS: Fix ARQ bug, use openssl timeout. 4.0.84
  • v4.0, 2021-03-08, DTLS: Fix dead loop by duplicated Alert message. 4.0.83
  • v4.0, 2021-03-08, Fix bug when client DTLS is passive. 4.0.82
  • v4.0, 2021-03-03, Fix #2106, #2011, RTMP/AAC transcode to Opus bug. 4.0.81
  • v4.0, 2021-03-02, Refine build script for FFmpeg and SRTP. 4.0.80
  • v4.0, 2021-03-02, Upgrade libsrtp from 2.0.0 to 2.3.0, with source code. 4.0.79
  • v4.0, 2021-03-01, Upgrade openssl from 1.1.0e to 1.1.1b, with source code. 4.0.78
  • v4.0, 2021-03-01, Enable Object Cache and Zero Copy Nack by default. 4.0.77
  • v4.0, 2021-02-28, RTC: Support high performance Zero Copy NACK. 4.0.76
  • v4.0, 2021-02-27, RTC: Support Object Cache Pool for performance. 4.0.75
  • v4.0, 2021-02-12, RTC: Support High Resolution(about 25ms) Timer. 4.0.72
  • v4.0, 2021-02-10, RTC: Improve performance about 700+ streams. 4.0.71
  • v4.0, 2021-02-04, At least wait 1ms when <1ms, to avoid epoll_wait spin loop. 4.0.66
  • v4.0, 2021-01-31, Enable -std=c++11 by default. 4.0.65
  • v4.0, 2021-01-25, Enable --nasm and --srtp-asm by default for performance. 4.0.64
  • v4.0, 2021-01-20, Support HTTP-FLV and HLS for srs-player by H5. 4.0.63
  • v4.0, 2021-01-08, HTML5 video tag resolution adaptive. 4.0.59
  • v4.0, 2021-01-08, Fix memory leak and bugs for RTC. 4.0.58
  • v4.0, 2021-01-06, Merge #2109, Refine srs_string_split.
  • v4.0, 2021-01-06, Merge #2109, Fix bugs for GB28181.
  • v4.0, 2020-12-24, Support disable CherryPy. 4.0.57
  • v4.0, 2020-11-12, For #1998, Support Firefox, use PT in offer. 4.0.55
  • v4.0, 2020-11-11, For #1508, Transform http header name to upper camel case. 4.0.54
  • v4.0, 2020-11-06, For #1657, Read cached data first in SSL. 4.0.48
  • v4.0, 2020-11-06, For #1657, support HTTPS Streaming(HTTPS-FLV, etc). 4.0.47
  • v4.0, 2020-11-06, For #1657, support HTTPS API. 4.0.46
  • v4.0, 2020-11-03, For #1657, support HTTPS client, for http-callback. 4.0.45
  • v4.0, 2020-10-31, Support gdb/srs.py to stat coroutines. 4.0.44
  • v4.0, 2020-09-19, RTC: Extract resource manager. Use any UDP packet to keep alive. 4.0.43
  • v4.0, 2020-09-09, RTC: Refine NACK RTT and efficiency. 4.0.42
  • v4.0, 2020-09-08, Refine PLI/NACK/DTLS logs. 4.0.41
  • v4.0, 2020-08-30, Fix serval bugs for RTC. Refine context API. 4.0.40
  • v4.0, 2020-08-18, RTC: DTLS support ARQ, covered with utest. 4.0.39
  • v4.0, 2020-08-06, RTC: Refine error check. 4.0.37
  • v4.0, 2020-07-25, RTC: Support multiple address for client. 4.0.36
  • v4.0, 2020-07-11, Refine log context with random string. 4.0.35
  • v4.0, 2020-07-04, Fix some bugs for RTC. 4.0.34
  • v4.0, 2020-07-03, Merge #1830 to fix bugs in GB28181. 4.0.33
  • v4.0, 2020-06-24, Support static link c++ libraries. 4.0.32
  • v4.0, 2020-06-23, Change log cid from int to string. 4.0.31
  • v4.0, 2020-06-13, GB28181 with JitterBuffer support. 4.0.30
  • v4.0, 2020-06-03, Support enable C++11. 4.0.29
  • v4.0, 2020-05-31, Remove srs-librtmp. 4.0.28
  • v4.0, 2020-05-21, For #307, disable GSO and sendmmsg. 4.0.27
  • v4.0, 2020-05-14, For #307, refine core structure, RTMP base on frame, RTC base on RTP. 4.0.26
  • v4.0, 2020-05-11, For #307, refine RTC publisher structure. 4.0.25
  • v4.0, 2020-04-30, For #307, support publish RTC with passing opus. 4.0.24
  • v4.0, 2020-04-14, For #307, support sendmmsg, GSO and reuseport. 4.0.23
  • v4.0, 2020-04-05, For #307, SRTP ASM only works with openssl-1.0, auto detect it. 4.0.22
  • v4.0, 2020-04-04, Merge RTC and GB28181, with bugs fixed. 4.0.21
  • v4.0, 2020-04-04, For #307, refine RTC latency from 600ms to 200ms. 4.0.20
  • v4.0, 2020-04-03, For #307, build SRTP with openssl to improve performance. 4.0.19
  • v4.0, 2020-03-31, For #1500, support push stream by GB28181. 4.0.18
  • v4.0, 2020-03-31, Play stream by WebRTC on iOS/Android/PC browser. 4.0.17
  • v4.0, 2020-03-28, Support multiple OS/Platform build cache. 4.0.16
  • v4.0, 2020-03-28, For #1250, support macOS, OSX, MacbookPro, Apple Darwin.
  • v4.0, 2020-03-22, Welcome maintainers Runner365, John and B.P.Y(Bepartofyou). 4.0.15
  • v4.0, 2020-03-22, For #307, support play with WebRTC. 4.0.14
  • v4.0, 2020-03-13, For #1636, fix bug for mux AAC to ADTS, never overwrite by RTMP sampling rate. 4.0.13
  • v4.0, 2020-03-07, For #1612, fix crash bug for RTSP. 4.0.12
  • v4.0, 2020-03-07, For #1631, support sei_filter for SRT. 4.0.11
  • v4.0, 2020-03-01, For #1621, support mix_correct for aggregate aac for SRT. 4.0.10
  • v4.0, 2020-02-25, For #1615, support default app(live) for vmix SRT. 4.0.9
  • v4.0, 2020-02-21, For #1598, support SLB health checking by TCP. 4.0.8
  • v4.0, 2020-02-19, For #1579, support rolling update of k8s. 4.0.7
  • v4.0, 2020-02-18, For #1579, support start/final wait for gracefully quit. 4.0.6
  • v4.0, 2020-02-18, For #1579, support gracefully quit and force to. 4.0.5
  • v4.0, 2020-02-13, SRT supports detail config for DynamicEncoding. 4.0.4
  • v4.0, 2020-02-04, Update project code. 4.0.3
  • v4.0, 2020-01-26, Allow use libsrt.so for SRT is MPL license. 4.0.2
  • v4.0, 2020-01-24, Fix #1147, support SRT(Secure Reliable Transport). 4.0.1

V3 changes

  • v3.0, 2021-05-12, Fix #2311, Copy the request for stat client. 3.0.162
  • v3.0, 2021-04-28, 3.0 release5(3.0.161) released. 122750 lines.
  • v3.0, 2021-04-28, Upgrade players. 3.0.161
  • v3.0, 2021-04-24, 3.0 release4(3.0.160) released. 122750 lines.
  • v3.0, 2021-04-24, Package players and console to zip and docker. 3.0.160
  • v3.0, 2021-04-24, Add srs-console to research/console. 3.0.159
  • v3.0, 2021-03-05, Refine usage to docker by default. 3.0.158
  • v3.0, 2021-01-07, Change id from int to string for the statistics. 3.0.157
  • v3.0, 2021-01-02, 3.0 release3(3.0.156) released. 122736 lines.
  • v3.0, 2020-12-26, For RTMP edge/forward, pass vhost in tcUrl, not in stream. 3.0.156
  • v3.0, 2020-12-17, Fix #1694, Support DVR 2GB+ MP4 file. 3.0.155
  • v3.0, 2020-12-17, Fix #1548, Add edts in MP4 for Windows10. 3.0.154
  • v3.0, 2020-10-31, 3.0 release2(3.0.153) released. 122663 lines.
  • v3.0, 2020-10-31, Fix #509, Always malloc stack on heap. 3.0.153
  • v3.0, 2020-10-31, Remove some global elements for debugging. 3.0.152
  • v3.0, 2020-10-31, Use global _srs_server for debugging. 3.0.151
  • v3.0, 2020-10-31, Refine source cid, track previous one. 3.0.150
  • v3.0, 2020-10-25, Add hls.realtime.conf for low-latency HLS. 3.0.149
  • v3.0, 2020-10-24, Refine script and startup logs. 3.0.148
  • v3.0, 2020-10-23, Allow FFmpeg if exists at /usr/local/bin/ffmpeg. 3.0.147
  • v3.0, 2020-10-23, Refine build script, use libssl in docker. 3.0.146
  • v3.0, 2020-10-14, Fix #1987, Fix Kbps resample bug. 3.0.145
  • v3.0, 2020-10-10, 3.0 release1(3.0.144) released. 122674 lines.
  • v3.0, 2020-10-10, Fix #1780, build fail on Ubuntu20(focal). 3.0.144
  • v3.0, 2020-09-14, Prevent stop ingest for multiple times. 3.0.143
  • v3.0, 2020-09-10, RTC: Change SO_REUSEPORT fail to warning. 3.0.142
  • v3.0, 2020-06-27, 3.0 release0(3.0.141) released. 122674 lines.
  • v3.0, 2020-03-30, For #1672, fix dvr close file failed bug. 3.0.140
  • v3.0, 2020-03-29, 3.0 beta4(3.0.139) released. 122674 lines.
  • v3.0, 2020-03-28, Support multiple OS/Platform build cache. 3.0.139
  • v3.0, 2020-03-28, For #1250, support macOS, OSX, MacbookPro, Apple Darwin. 3.0.138
  • v3.0, 2020-03-21, For #1629, fix kickoff FLV client bug. 3.0.137
  • v3.0, 2020-03-21, For #1619, configure without utest by default. 3.0.136
  • v3.0, 2020-03-21, For #1651, fix return pnwrite of srs_write_large_iovs. 3.0.135
  • v3.0, 2020-03-18, 3.0 beta3(3.0.134) released. 122509 lines.
  • v3.0, 2020-03-12, For #1635, inotify watch ConfigMap for reload. 3.0.134
  • v3.0, 2020-03-12, For #1635, support auto reaload config by inotify. 3.0.129
  • v3.0, 2020-03-12, For #1630, disable cache for stream changing, and drop dup header. 3.0.128
  • v3.0, 2020-03-12, For #1594, detect and disable daemon for docker. 3.0.127
  • v3.0, 2020-03-12, For #1634, always check status in thread loop. 3.0.126
  • v3.0, 2020-03-11, For #1634, refactor output with datetime for ingest/encoder/exec. 3.0.125
  • v3.0, 2020-03-11, For #1634, fix quit by accident SIGTERM while killing FFMPEG. 3.0.124
  • v3.0, 2020-03-05, 3.0 beta2(3.0.123) released. 122170 lines.
  • v3.0, 2020-02-21, For #1598, support SLB health checking by TCP. 3.0.123
  • v3.0, 2020-02-21, Fix bug for librtmp client ipv4/ipv6 socket. 3.0.122
  • v3.0, 2020-02-18, For #1579, support start/final wait for gracefully quit. 3.0.121
  • v3.0, 2020-02-18, For #1579, support force gracefully quit. 3.0.120
  • v3.0, 2020-02-18, For #1579, support gracefully quit. 3.0.119
  • v3.0, 2020-02-17, For #1601, flush async on_dvr/on_hls events before stop. 3.0.118
  • v3.0, 2020-02-14, 3.0 beta1(3.0.117) released. 121964 lines.
  • v3.0, 2020-02-14, For #1595, migrating streaming from ossrs.net to r.ossrs.net. 3.0.117
  • v3.0, 2020-02-05, For #665, fix HTTP-FLV reloading bug. 3.0.116
  • v3.0, 2020-02-05, For #1592, fix terminal echo off by redirect process stdin. 3.0.115
  • v3.0, 2020-02-04, For #1186, refactor security check. 3.0.114
  • v3.0, 2020-02-04, Fix #939, response right A/V flag in FLV header. 3.0.113
  • v3.0, 2020-02-04, For #939, always enable fast FLV streaming.
  • v3.0, 2020-02-02, 3.0 beta0(3.0.112) released. 121709 lines.
  • v3.0, 2020-01-29, Support isolate version file. 3.0.112
  • v3.0, 2020-01-29, Fix #1206, dispose ingester while server quiting. 3.0.111
  • v3.0, 2020-01-28, Fix #1230, racing condition in source fetch or create. 3.0.110
  • v3.0, 2020-01-27, Fix #1303, do not dispatch previous meta when not publishing. 3.0.109
  • v3.0, 2020-01-26, Allow use libst.so for ST is MPL license.
  • v3.0, 2020-01-26, Fix #607, set RTMP identifying recursive depth to 3.
  • v3.0, 2020-01-25, Fix #878, remove deprecated #EXT-X-ALLOW-CACHE for HLS. 3.0.108
  • v3.0, 2020-01-25, Fix #703, drop video data util sps/pps. 3.0.107
  • v3.0, 2020-01-25, Fix #1108, reap DVR tmp file when unpublish. 3.0.106
  • v3.0, 2020-01-21, 3.0 alpha9(3.0.105) released. 121577 lines.
  • v3.0, 2020-01-21, Fix #1221, remove complex configure options. 3.0.104
  • v3.0, 2020-01-21, Fix #1547, support crossbuild for ARM/MIPS.
  • v3.0, 2020-01-21, For #1547, support setting cc/cxx/ar/ld/randlib tools. 3.0.103
  • v3.0, 2020-01-19, For #1580, fix cid range problem. 3.0.102
  • v3.0, 2020-01-19, For #1070, define FLV CodecID for AV1 and opus. 3.0.101
  • v3.0, 2020-01-16, For #1575, correct RTMP redirect as tcUrl, add redirect2 as RTMP URL. 3.0.100
  • v3.0, 2020-01-15, For #1509, decrease the fast vector init size from 64KB to 64B. 3.0.99
  • v3.0, 2020-01-15, For #1509, release coroutine when source is idle. 3.0.98
  • v3.0, 2020-01-10, 3.0 alpha8(3.0.97) released. 121555 lines.
  • v3.0, 2020-01-09, For #1042, improve test coverage for service. 3.0.97
  • v3.0, 2020-01-08, Merge #1554, support logrotate copytruncate. 3.0.96
  • v3.0, 2020-01-05, Always use string instance to avoid crash risk. 3.0.95
  • v3.0, 2020-01-05, For #460, fix ipv6 hostport parsing bug. 3.0.94
  • v3.0, 2020-01-05, For #460, fix ipv6 intranet address filter bug. 3.0.93
  • v3.0, 2020-01-05, For #1543, use getpeername to retrieve client ip. 3.0.92
  • v3.0, 2020-01-02, For #1042, improve test coverage for config. 3.0.91
  • v3.0, 2019-12-30, Fix mp4 security issue, check buffer when required size is variable.
  • v3.0, 2019-12-29, 3.0 alpha7(3.0.90) released. 116356 lines.
  • v3.0, 2019-12-29, For #1255, support vhost/domain in query string for HTTP streaming. 3.0.90
  • v3.0, 2019-12-29, For #299, increase dash segment size for avsync issue. 3.0.89
  • v3.0, 2019-12-27, For #299, fix some bugs in dash, it works now. 3.0.88
  • v3.0, 2019-12-27, For #1544, fix memory leaking for complex error. 3.0.87
  • v3.0, 2019-12-27, Add links for flv.js, hls.js and dash.js.
  • v3.0, 2019-12-26, For #1105, http server support mp4 range.
  • v3.0, 2019-12-26, For #1105, dvr mp4 supports playing on Chrome/Safari/Firefox. 3.0.86
  • v3.0, 2019-12-26, 3.0 alpha6(3.0.85) released. 116056 lines.
  • v3.0, 2019-12-26, For #1488, pass client ip to http callback. 3.0.85
  • v3.0, 2019-12-25, For #1537, #1282, support aarch64 for armv8. 3.0.84
  • v3.0, 2019-12-25, For #1538, fresh chunk allow fmt=0 or fmt=1. 3.0.83
  • v3.0, 2019-12-25, Remove FFMPEG and NGINX, please use srs-docker instead. 3.0.82
  • v3.0, 2019-12-25, For #1537, remove cross-build, not used patches, directly build st.
  • v3.0, 2019-12-24, For #1508, support chunk length and content in multiple parts.
  • v3.0, 2019-12-23, Merge SRS2 for running srs-librtmp on Windows. 3.0.80
  • v3.0, 2019-12-23, For #1535, deprecate Adobe FMS/AMS edge token traversing(CN, EN) authentication. 3.0.79
  • v3.0, 2019-12-23, For #1535, deprecate BWT(bandwidth testing). 3.0.78
  • v3.0, 2019-12-23, For #1535, deprecate Adobe HDS(f4m)(CN, EN). 3.0.77
  • v3.0, 2019-12-20, Fix #1508, http-client support read chunked response. 3.0.76
  • v3.0, 2019-12-20, For #1508, refactor srs_is_digital, support all zeros.
  • v3.0, 2019-12-19, 3.0 alpha5(3.0.75) released. 115362 lines.
  • v3.0, 2019-12-19, Refine the RTMP iovs cache increasing to much faster.
  • v3.0, 2019-12-19, Fix #1524, memory leak for amf0 strict array. 3.0.75
  • v3.0, 2019-12-19, Fix random build failed bug for modules.
  • v3.0, 2019-12-19, Fix #1520 and #1223, bug for origin cluster 3+ servers. 3.0.74
  • v3.0, 2019-12-18, For #1042, add test for RAW AVC protocol.
  • v3.0, 2019-12-18, Detect whether flash enabled for srs-player. 3.0.73
  • v3.0, 2019-12-17, Fix HTTP CORS bug when sending response for OPTIONS. 3.0.72
  • v3.0, 2019-12-17, Enhance HTTP response write for final_request.
  • v3.0, 2019-12-17, Refactor HTTP stream to disconnect client when unpublish.
  • v3.0, 2019-12-17, Fix HTTP-FLV and VOD-FLV conflicting bug.
  • v3.0, 2019-12-17, Refactor HttpResponseWriter.write, default to single text mode.
  • v3.0, 2019-12-16, For #1042, add test for HTTP protocol.
  • v3.0, 2019-12-13, 3.0 alpha4(3.0.71) released. 112928 lines.
  • v3.0, 2019-12-12, For #547, #1506, default hls_dts_directly to on. 3.0.71
  • v3.0, 2019-12-12, SrsPacket supports converting to message, so can be sent by one API.
  • v3.0, 2019-12-11, For #1042, cover RTMP client/server protocol.
  • v3.0, 2019-12-11, Fix #1445, limit the createStream recursive depth. 3.0.70
  • v3.0, 2019-12-11, For #1042, cover RTMP handshake protocol.
  • v3.0, 2019-12-11, Fix #1229, fix the security risk in logger. 3.0.69
  • v3.0, 2019-12-11, For #1229, fix the security risk in HDS. 3.0.69
  • v3.0, 2019-12-05, Fix #1506, support directly turn FLV timestamp to TS DTS. 3.0.68
  • v3.0, 2019-11-30, 3.0 alpha3(3.0.67) released. 110864 lines.
  • v3.0, 2019-12-01, Fix #1501, use request coworker for origin cluster. 3.0.67
  • v3.0, 2019-11-30, 3.0 alpha2(3.0.66) released. 110831 lines.
  • v3.0, 2019-11-30, Fix #1501, use request coworker for origin cluster. 3.0.66
  • v3.0, 2019-11-30, Random tid for docker. 3.0.65
  • v3.0, 2019-11-30, Refine debug info for edge. 3.0.64
  • v3.0, 2019-10-30, Cover protocol stack RTMP. 3.0.63
  • v3.0, 2019-10-23, Cover JSON codec. 3.0.62
  • v3.0, 2019-10-13, Use http://ossrs.net as homepage.
  • v3.0, 2019-10-10, Cover AMF0 codec. 3.0.61
  • v3.0, 2019-10-07, 3.0 alpha1(3.0.60) released. 107962 lines.
  • v3.0, 2019-10-06, Support log rotate by init.d command. 3.0.60
  • v3.0, 2019-10-06, We prefer ipv4, only use ipv6 if ipv4 is disabled. 3.0.59
  • v3.0, 2019-10-05, Support systemctl service for CentOS7. 3.0.58
  • v3.0, 2019-10-04, Disable SO_REUSEPORT if not supported. 3.0.57
  • v3.0, 2019-10-04, 3.0 alpha0(3.0.56) released. 107946 lines.
  • v3.0, 2019-10-04, Support go-oryx rtmplb with proxy protocol. 3.0.56
  • v3.0, 2019-10-03, Fix #775, Support SO_REUSEPORT to improve edge performance. 3.0.54
  • v3.0, 2019-10-03, For #467, Remove KAFKA producer. 3.0.53
  • v3.0, 2019-05-14, Covert Kernel File reader/writer. 3.0.52
  • v3.0, 2019-04-30, Refine typo in files. 3.0.51
  • v3.0, 2019-04-25, Upgrade http-parser from 2.1 to 2.9.2 and cover it. 3.0.50
  • v3.0, 2019-04-22, Refine in time unit. 3.0.49
  • v3.0, 2019-04-07, Cover ST Coroutine and time unit. 3.0.48
  • v3.0, 2019-04-06, Merge #1304, Fix ST coroutine pull error. 3.0.47
  • v3.0, 2019-04-05, Merge #1339, Support HTTP-FLV params. 3.0.46
  • v3.0, 2018-11-11, Merge #1261, Support _definst_ for Wowza. 3.0.44
  • v3.0, 2018-08-26, SRS console support both Chinese and English.
  • v3.0, 2018-08-25, Fix #1093, Support HLS encryption. 3.0.42
  • v3.0, 2018-08-25, Fix #1051, Drop ts when republishing stream. 3.0.41
  • v3.0, 2018-08-12, For #1202, Support edge/forward to Aliyun CDN. 3.0.40
  • v3.0, 2018-08-11, For #910, Support HTTP FLV with HTTP callback. 3.0.39
  • v3.0, 2018-08-05, Refine HTTP-FLV latency, support realtime mode.3.0.38
  • v3.0, 2018-08-05, Fix #1087, Ignore iface without address. 3.0.37
  • v3.0, 2018-08-04, For #1110, Support params in http callback. 3.0.36
  • v3.0, 2018-08-02, Always use vhost in stream query, the unify uri. 3.0.35
  • v3.0, 2018-08-02, For #1031, SRS edge support douyu.com. 3.0.34
  • v3.0, 2018-07-22, Replace hex to string to match MIT license. 3.0.33
  • v3.0, 2018-07-22, Replace base64 to match MIT license. 3.0.32
  • v3.0, 2018-07-22, Replace crc32 IEEE and MPEG by pycrc to match MIT license. 3.0.31
  • v3.0, 2018-07-21, Replace crc32 IEEE by golang to match MIT license. 3.0.30
  • v3.0, 2018-02-16, Fix #464, support RTMP origin cluster. 3.0.29
  • v3.0, 2018-02-13, Fix #1057, switch to simple handshake. 3.0.28
  • v3.0, 2018-02-13, Fix #1059, merge from 2.0, supports url with vhost in stream. 3.0.27
  • v3.0, 2018-01-01, Fix #913, support complex error. 3.0.26
  • v3.0, 2017-06-04, Fix #299, support experimental MPEG-DASH. 3.0.25
  • v3.0, 2017-05-30, Fix #821, support MP4 file parser. 3.0.24
  • v3.0, 2017-05-30, Fix #904, replace NXJSON(LGPL) with json-parser(BSD). 3.0.23
  • v3.0, 2017-04-16, Fix #547, support HLS audio in TS. 3.0.22
  • v3.0, 2017-03-26, Fix #820, extract service for modules. 3.0.21
  • v3.0, 2017-03-02, Fix #786, simply don't reuse object. 3.0.20
  • v3.0, 2017-03-01, For #110, refine thread object. 3.0.19
  • v3.0, 2017-02-12, Fix #301, user must config the codec in right way for HLS. 3.0.18
  • v3.0, 2017-02-07, fix #738, support DVR general mp4. 3.0.17
  • v3.0, 2017-01-19, for #742, refine source, meta and origin hub. 3.0.16
  • v3.0, 2017-01-17, for #742, refine source, timeout, live cycle. 3.0.15
  • v3.0, 2017-01-11, fix #735, config transform refer_publish invalid. 3.0.14
  • v3.0, 2017-01-06, for #730, support config in/out ack size. 3.0.13
  • v3.0, 2017-01-06, for #711, support perfile for transcode. 3.0.12
  • v3.0, 2017-01-05, Fix #727, patch ST for valgrind and ARM. 3.0.11
  • v3.0, 2017-01-05, for #324, always enable hstrs. 3.0.10
  • v3.0, 2016-12-15, fix #717, #691, http api/static/stream support cors. 3.0.9
  • v3.0, 2016-12-08, Fix #105, support log rotate signal SIGUSR1. 3.0.8
  • v3.0, 2016-12-07, fix typo and refine grammar. 3.0.7
  • v3.0, 2015-10-20, fix #502, support snapshot with http-callback or transcoder. 3.0.5
  • v3.0, 2015-09-19, support amf0 and json to convert with each other.
  • v3.0, 2015-09-19, json objects support dumps to string.
  • v3.0, 2015-09-14, fix #459, support dvr raw api. 3.0.4
  • v3.0, 2015-09-14, fix #459, dvr support apply filter for ng-control dvr module.
  • v3.0, 2015-09-14, fix #319, http raw api support update global and vhost. 3.0.3
  • v3.0, 2015-08-31, fix #319, http raw api support query global and vhost.
  • v3.0, 2015-08-28, fix #471, api response the width and height. 3.0.2
  • v3.0, 2015-08-25, fix #367, support nginx-rtmp exec. 3.0.1

V2 changes

  • v2.0, 2020-01-25, 2.0 release8(2.0.272) released. 87292 lines.
  • v2.0, 2020-01-08, Merge #1554, support logrotate copytruncate. 2.0.272
  • v2.0, 2020-01-05, Merge #1551, fix memory leak in RTSP stack. 2.0.270
  • v2.0, 2019-12-26, For #1488, pass client ip to http callback. 2.0.269
  • v2.0, 2019-12-23, Fix srs-librtmp #22, parse vhost splited by single seperator. 2.0.268
  • v2.0, 2019-12-23, Fix srs-librtmp #25, build srs-librtmp on windows. 2.0.267
  • v2.0, 2019-12-13, Support openssl versions greater than 1.1.0. 2.0.266
  • v2.0, 2019-11-29, 2.0 release7(2.0.265) released. 86994 lines.
  • v2.0, 2019-11-29, For srs-docker, install Cherrypy without sudo. 2.0.265
  • v2.0, 2019-04-06, For #1304, Default HSTRS to on. 2.0.264
  • v2.0, 2019-04-05, 2.0 release6(2.0.263) released. 86994 lines.
  • v2.0, 2019-04-05, Merge #1312, Fix GCC7 build error, this statement may fall through. 2.0.263
  • v2.0, 2019-04-05, Merge #1339, Support HTTP-FLV params. 2.0.262
  • v2.0, 2018-12-01, Merge #1274, Upgrade to FFMPEG 4.1 and X264 157. 2.0.261
  • v2.0, 2018-11-11, Merge #1261, Support _definst_ for Wowza. 2.0.260
  • v2.0, 2018-11-11, Merge #1263, Fix string trim bug. 2.0.259
  • v2.0, 2018-10-28, 2.0 release5(2.0.258) released. 86916 lines.
  • v2.0, 2018-10-28, Fix #1250, Support build on OSX10.14 Mojave. 2.0.258
  • v2.0, 2018-10-08, Merge #1236, Fix sleep bug in us. 2.0.257
  • v2.0, 2018-10-08, Merge #1237, Support param for transcoder. 2.0.256
  • v2.0, 2018-08-12, 2.0 release4(2.0.255) released. 86915 lines.
  • v2.0, 2018-08-12, For #1202, Support edge/forward to Aliyun CDN. 2.0.255
  • v2.0, 2018-08-11, For #910, Support HTTP FLV with HTTP callback. 2.0.254
  • v2.0, 2018-08-11, For #1110, Refine params in http callback. 2.0.253
  • v2.0, 2018-08-05, Refine HTTP-FLV latency, support realtime mode. 2.0.252
  • v2.0, 2018-08-04, For #1110, Support params in http callback. 2.0.251
  • v2.0, 2018-08-02, For #1031, SRS edge support douyu.com. 2.0.250
  • v2.0, 2018-07-21, Merge #1119, fix memory leak. 2.0.249
  • v2.0, 2018-07-18, 2.0 release3(2.0.248) released. 86775 lines.
  • v2.0, 2018-07-17, Merge #1176, fix scaned issues. 2.0.248
  • v2.0, 2018-02-28, Merge #1077, fix crash for edge HLS. 2.0.247
  • v2.0, 2018-02-13, Fix #1059, support vhost in stream parameters. 2.0.246
  • v2.0, 2018-01-07, Merge #1045, fix #1044, TCP connection alive detection. 2.0.245
  • v2.0, 2018-01-04, Merge #1039, fix bug of init.d script.
  • v2.0, 2018-01-01, Merge #1033, allow user to add some specific flags. 2.0.244
  • v2.0, 2017-06-10, 2.0 release2(2.0.243) released. 86670 lines.
  • v2.0, 2017-05-29, Merge #899 to fix #893, ts PES ext length. 2.0.243
  • v2.0, 2017-05-01, Fix #865, shouldn't remove ts/m3u8 when hls_dispose disabled. 2.0.242
  • v2.0, 2017-04-30, Fix #636, FD leak for requesting empty HTTP stream. 2.0.241
  • v2.0, 2017-04-23, Fix #851, HTTP API support number of video frames for FPS. 2.0.240
  • v2.0, 2017-04-18, 2.0 release1(2.0.239) released. 86515 lines.
  • v2.0, 2017-04-18, Fix #848, crash at HTTP fast buffer grow. 2.0.239
  • v2.0, 2017-04-15, Fix #844, support Haivision encoder. 2.0.238
  • v2.0, 2017-04-15, Merge #846, fix fd leak for FLV stream caster. 2.0.237
  • v2.0, 2017-04-15, Merge #841, avoid the duplicated sps/pps in ts. 2.0.236
  • v2.0, 2017-04-09, Fix #834, crash for TS context corrupt. 2.0.235
  • v2.0, 2017-03-03, 2.0 release0(2.0.234) released. 86373 lines.
  • v2.0, 2017-02-25, for #730, remove the test code. 2.0.234
  • v2.0, 2017-02-09, fix #503 disable utilities when reload a source. 2.0.233
  • v2.0, 2017-01-22, for #752 release the io then free it for kbps. 2.0.232
  • v2.0, 2017-01-18, fix #750 use specific error code for dns resolve. 2.0.231
  • v2.0, 2017-01-18, 2.0 beta4(2.0.230) released. 86334 lines.
  • v2.0, 2017-01-18, fix #749, timestamp overflow for ATC. 2.0.230
  • v2.0, 2017-01-11, fix #740, convert ts aac audio private stream 1 to common. 2.0.229
  • v2.0, 2017-01-11, fix #588, kbps interface error. 2.0.228
  • v2.0, 2017-01-11, fix #736, recovery the hls dispose. 2.0.227
  • v2.0, 2017-01-10, refine hls html5 video template.
  • v2.0, 2017-01-10, fix #635, hls support NonIDR(open gop). 2.0.226
  • v2.0, 2017-01-06, for #730, reset ack follow flash player rules. 2.0.225
  • v2.0, 2016-12-15, for #513, remove hls ram from srs2 to srs3+. 2.0.224
  • v2.0, 2016-12-13, 2.0 beta3(2.0.223) released. 86685 lines.
  • v2.0, 2016-12-13, fix #713, disable the source cleanup. 2.0.223
  • v2.0, 2016-12-13, fix #713, refine source to avoid critical fetch and create. 2.0.222
  • v2.0, 2016-11-09, 2.0 beta2(2.0.221) released. 86691 lines.
  • v2.0, 2016-11-05, fix #654, crash when source cleanup for edge. 2.0.221
  • v2.0, 2016-10-26, fix #666, crash when source cleanup for http-flv. 2.0.220
  • v2.0, 2016-10-10, fix #661, close fd after thread stopped. 2.0.219
  • v2.0, 2016-09-23, support asprocess for oryx. 2.0.218
  • v2.0, 2016-09-23, support change work_dir for oryx.
  • v2.0, 2016-09-15, fix #640, typo for rtmp type. 2.0.217
  • v2.0, 2016-09-12, fix fast stream error bug. 2.0.216
  • v2.0, 2016-09-09, 2.0 beta1(2.0.215) released. 89941 lines.
  • v2.0, 2016-09-09, refine librtmp comments about NALUs. 2.0.215
  • v2.0, 2016-09-05, fix memory leak at source. 2.0.214
  • v2.0, 2016-09-05, fix memory leak at handshake. 2.0.213
  • v2.0, 2016-09-04, support valgrind for patched st.
  • v2.0, 2016-09-03, support all arm for patched st. 2.0.212
  • v2.0, 2016-09-01, workaround #511 the fly stfd in close. 2.0.211
  • v2.0, 2016-08-30, comment the pcr.
  • v2.0, 2016-08-18, fix srs-librtmp#4 filter frame.
  • v2.0, 2016-08-10, fix socket timeout for librtmp.
  • v2.0, 2016-08-08, fix the crash by srs_info log.
  • v2.0, 2016-08-06, 2.0 beta0(2.0.210) released. 89704 lines.
  • v2.0, 2016-05-17, fix the sps pps parse bug.
  • v2.0, 2016-01-13, fix http reader bug, support infinite chunked. 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 #2304, 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/v4_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 changes

  • 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.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, 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
  • 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).

Releases

Compare

Comparing with other media servers, SRS is much better and stronger, for details please read Product(CN/EN).

Stream Delivery

Feature SRS NGINX CRTMPD AMS WOWZA
RTMP Stable Stable Stable Stable Stable
HLS Stable Stable X Stable Stable
HTTP FLV Stable X X X X
HLS(aonly) Stable X X Stable Stable
HDS Experiment X X Stable Stable
MPEG-DASH Experiment X X X X
SRT Experiment X X X Stable
HTTP Server Stable Stable X X Stable

Cluster

Feature SRS NGINX CRTMPD AMS 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
Docker Stable X X X X

Stream Service

Feature SRS NGINX CRTMPD AMS WOWZA
DVR Stable Stable X X Stable
DVR API Stable Stable X X X
DVR MP4 Stable X X X X
EXEC Stable Stable X X X
Transcode Stable X X X Stable
HTTP API Stable Stable X X Stable
HTTP RAW API Stable X X X X
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 AMS WOWZA
Concurrency 7.5k 3k 2k 2k 3k
MultipleProcess Stable 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 AMS 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 AMS WOWZA
BW check Stable X X X X
Tracable Log Stable X X X X

Docs

Feature SRS NGINX CRTMPD AMS WOWZA
Demos Stable X X X X
WIKI(EN+CN) Stable EN only X X Stable

Others

Feature SRS NGINX CRTMPD AMS WOWZA
ARM/MIPS Stable Stable X X X
Client Library Stable X X X X

Remark:

  1. Concurrency: We only benchmark the concurrency of single process.
  2. MultipleProcess: SRS supports multiple processes by go-oryx.
  3. HLS aonly: HLS supports audio only mode without video stream.
  4. BW check: The bandwidth check feature is used to detect the bandwidth between server and client.
  5. Security: The security includes access control, token authentication and referer check.
  6. Reload: SRS and Nginx supports reload, but nginx-rtmp doesn't.

Performance

The performance benchmark data and corelative commits are listed here.

Play RTMP benchmark

The data for playing RTMP was benchmarked by SB:

Update SRS Clients Type CPU Memory Commit
2014-12-07 2.0.67 10k(10000) players 95% 656MB code
2014-12-05 2.0.57 9.0k(9000) players 90% 468MB code
2014-12-05 2.0.55 8.0k(8000) players 89% 360MB code
2014-11-22 2.0.30 7.5k(7500) players 87% 320MB code
2014-11-13 2.0.15 6.0k(6000) players 82% 203MB code
2014-11-12 2.0.14 3.5k(3500) players 95% 78MB code
2014-11-12 2.0.14 2.7k(2700) players 69% 59MB -
2014-11-11 2.0.12 2.7k(2700) players 85% 66MB -
2014-11-11 1.0.5 2.7k(2700) players 85% 66MB -
2014-07-12 0.9.156 2.7k(2700) players 89% 61MB code
2014-07-12 0.9.156 1.8k(1800) players 68% 38MB -
2013-11-28 0.5.0 1.8k(1800) players 90% 41M -
Update SFU Clients Type CPU Memory Threads VM
2021-05-11 SRS/v4.0.105 4000 players ~94% x1 419MB 1 G5 8CPU
2021-05-11 NginxRTMP/v1.2.1 2400 players ~92% x1 173MB 1 G5 8CPU

Note: CentOS7, 600Kbps, ECS/G5-2.5GHZ(SkyLake), SRS/v4.0.105, NginxRTMP/v1.2.1.

Publish RTMP benchmark

The data for publishing RTMP was benchmarked by SB:

Update SRS Clients Type CPU Memory Commit
2014-12-04 2.0.52 4.0k(4000) publishers 80% 331MB code
2014-12-04 2.0.51 2.5k(2500) publishers 91% 259MB code
2014-12-04 2.0.49 2.5k(2500) publishers 95% 404MB code
2014-12-04 2.0.49 1.4k(1400) publishers 68% 144MB -
2014-12-03 2.0.48 1.4k(1400) publishers 95% 140MB code
2014-12-03 2.0.47 1.4k(1400) publishers 95% 140MB -
2014-12-03 2.0.47 1.2k(1200) publishers 84% 76MB code
2014-12-03 2.0.12 1.2k(1200) publishers 96% 43MB -
2014-12-03 1.0.10 1.2k(1200) publishers 96% 43MB -
Update SFU Clients Type CPU Memory Threads VM
2021-05-11 SRS/v4.0.105 2300 publishers ~89% x1 1.1GB 1 G5 8CPU
2021-05-11 NginxRTMP/v1.2.1 1300 publishers ~84% x1 198MB 1 G5 8CPU

Note: CentOS7, 600Kbps, ECS/G5-2.5GHZ(SkyLake), SRS/v4.0.105, NginxRTMP/v1.2.1.

Play HTTP FLV benchmark

The data for playing HTTP FLV was benchmarked by SB:

Update SRS Clients Type CPU Memory Commit
2014-05-25 2.0.171 6.0k(6000) players 84% 297MB code
2014-05-24 2.0.170 3.0k(3000) players 89% 96MB code
2014-05-24 2.0.169 3.0k(3000) players 94% 188MB code
2014-05-24 2.0.168 2.3k(2300) players 92% 276MB code
2014-05-24 2.0.167 1.0k(1000) players 82% 86MB -

RTC benchmark

The RTC benchmark data, by srs-bench:

Update SFU Clients Type CPU Memory Threads VM
2021-05-10 SRS/v4.0.105 2000 players ~94% x1 462MB 1 G7 2CPU
2021-05-10 SRS/v4.0.105 1000 players ~90% x1 180MB 1 G5 2CPU
2021-03-31 SRS/v4.0.87 800 players ~94% x1 444MB 1 G5 2CPU
2021-05-10 Janus/v0.11.1 700 players ~93% x2 430MB 24 G5 2CPU
2021-05-10 SRS/v4.0.105 1700 publishers ~92% x1 334MB 1 G7 2CPU
2021-05-10 SRS/v4.0.105 950 publishers ~92% x1 132MB 1 G5 2CPU
2021-03-31 SRS/v4.0.87 550 publishers ~86% x1 1.3GB 1 G5 2CPU
2021-05-10 Janus/v0.11.1 350 publishers ~93% x2 405MB 23 G5 2CPU

Note: CentOS7, 600Kbps, ECS/G5-2.5GHZ(SkyLake)/G7-2.7GHZ(IceLake), SRS/v4.0.87, SRS/v4.0.105, Janus/v0.11.1.

Latency benchmark

The latency between encoder and player with realtime config(CN, EN):

Update SRS Protocol VP6 H.264 VP6+MP3 H.264+MP3
2014-12-16 2.0.72 RTMP 0.1s 0.4s 0.8s 0.6s
2014-12-12 2.0.70 RTMP 0.1s 0.4s 1.0s 0.9s
2014-12-03 1.0.10 RTMP 0.4s 0.4s 0.9s 1.2s
2021-04-02 4.0.87 WebRTC x 80ms x x

2018-08-05, c45f72e, Refine HTTP-FLV latency, support realtime mode. 2.0.252

We used FMLE as encoder for benchmark. The latency of server was 0.1s+, and the bottleneck was the encoder. For more information, read bug #257.

HLS overhead

About the overhead of HLS overhead, we compared FFMPEG and SRS.

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 should be larger than this benchmark(48kbps audio is best overhead), for we fix the #512.

Architecture

SRS always use the simplest architecture to solve complex domain problems.

  • System arch: the system structure and arch.
  • Modularity arch: the main modularity of SRS.
  • Stream arch: the stream dispatch arch of SRS.

System Architecture

+------------------------------------------------------+
|                    Application                       |
|            Origin/Edge/HTTP-FLV/StreamCaster         |
+---------------+---------------+-----------+----------+
|   RAW API/    |     EXEC/     |  DVR/HLS  | FLV/TS/  |
|   API/hook    |   Transcoder  |  HDS/DASH | AMF0/JSON|
+---------------+---------------+-----------+ RTMP/RTSP|
|  http-parser  |  FFMPEG/x264  |  NGINX/ts | protocol |
+---------------+---------------+-----------+----------+
|              Network(state-threads)                  |
+------------------------------------------------------+
|    All Linux/Unix(RHEL,CentOS,Ubuntu,Fedora...)      |
+------------------------------------------------------+

Modularity Architecture

+--------------------+---------------------------------+
|   SRS/SRT server   |       Programs in Main          |
+--------------------+-------+-------------------------+
|  App(For SRS)              |      Modules(1)         |
+----------------------------+-------------------------+
|   Protocol Stack(RTMP/HTTP/RTSP/JSON/AMF/Service)    |
+------------------------------------------------------+
|      Kernel(File, Codec, Stream, LB services)        |
+------------------------------------------------------+
|         Core(Macros and very low-level APIs)         |
+------------------------------------------------------+

Remark:

  1. Modules: SRS supports code-level modularity, read modules.

Stream Architecture

+---------+              +----------+
| Publish |              |  Deliver |
+---|-----+              +----|-----+
+----------------------+----------------------------+----------------+
|     Input            | SRS(Simple RTMP Server)    |     Output     |
+----------------------+----------------------------+----------------+
|                      |   +-> DASH ----------------+-> DASH player  |
|    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  |
|                      |   +-> EXEC(5) -------------+-> External app |
|                      |   +-> DVR -----------------+-> FLV file     |
|                      |   +-> BandwidthTest -------+-> Flash        |
+----------------------+                            |                |
|  MediaSource(2)      |                            |                |
|  (RTSP,FILE,         |                            |                |
|   HTTP,HLS,   --pull-+->-- Ingester(3) -(rtmp)----+-> SRS          |
|   Device,            |                            |                |
|   ......)            |                            |                |
+----------------------+                            |                |
|  MediaSource(2)      |                            |                |
|  (MPEGTSoverUDP      |                            |                |
|   HTTP-FLV,   --push-+->- StreamCaster(4) -(rtmp)-+-> SRS          |
|   GB28181,SRT,       |                            |                |
|   ......)            |                            |                |
+----------------------+                            |                |
|  FFMPEG --push(srt)--+->- SRTModule(5)  ---(rtmp)-+-> SRS          |
+----------------------+----------------------------+----------------+

Remark:

  1. Encoder: Encoder pushs RTMP stream to SRS.
  2. MediaSource: Supports any media source, ingesting by ffmpeg.
  3. Ingester: Forks a ffmpeg(or other tools) to ingest as rtmp to SRS, please read Ingest.
  4. Streamer: Remuxs other protocols to RTMP, please read Streamer.
  5. EXEC: Like NGINX-RTMP, EXEC forks external tools for events, please read ng-exec.
  6. SRTModule: A isolate module which run in hybrid model.

AUTHORS

There are two types of people that have contributed to the SRS project:

  • Maintainers: Contribute and maintain important features. SRS always remembers and thanks you by writing your names in stream metadata.
  • Contributors: Submit patches, report bugs, add translations, help answer newbie questions, and generally make SRS much better.

Maintainers of SRS project:

A big THANK YOU goes to:

Mirrors

Gitee: https://gitee.com/ossrs/srs, the GIT usage(CN, EN)

git clone https://gitee.com/ossrs/srs.git &&
cd srs && git remote set-url origin https://github.com/ossrs/srs.git && git pull

Remark: For users in China, recomment to use mirror from CSDN or OSChina, because they are much faster.

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

git clone https://gitlab.com/winlinvip/srs-gitlab.git srs &&
cd srs && git remote set-url origin https://github.com/ossrs/srs.git && git pull

Github: https://github.com/ossrs/srs, the GIT usage(CN, EN)

git clone https://github.com/ossrs/srs.git
Branch Cost Size CMD
3.0release 2m19.931s 262MB git clone -b 3.0release https://gitee.com/ossrs/srs.git
3.0release 0m56.515s 95MB git clone -b 3.0release --depth=1 https://gitee.com/ossrs/srs.git
develop 2m22.430s 234MB git clone -b develop https://gitee.com/ossrs/srs.git
develop 0m46.421s 42MB git clone -b develop --depth=1 https://gitee.com/ossrs/srs.git
min 2m22.865s 217MB git clone -b min https://gitee.com/ossrs/srs.git
min 0m36.472s 11MB git clone -b min --depth=1 https://gitee.com/ossrs/srs.git

System Requirements

Supported operating systems and hardware:

  • All Linux, both 32 and 64 bits
  • Other OS, such as Windows, please use docker.

Beijing, 2013.10
Winlin

Comments
  • 发展方向:SRS4 is on the way...

    发展方向:SRS4 is on the way...

    关于SRS的发展方向

    SRS3正在提升稳定性、紧锣密鼓的发布中,这意味着SRS3不会支持主要的变更,只会提升稳定性,当然就说明了SRS4要来了。

    SRS4的代号是Leo,感谢这十多年一起奋斗的兄弟姐妹们,关于代号Leo的故事可以看这里

    这个Issue是为了和大家探讨SRS4应该要支持什么,我知道目前新协议比如WebRTCSRTQUICKCP的呼声比较大,但我已经确定不会以支持新协议为重心,可能会支持一些新协议,SRS4的重心是什么?我觉得是可用性和易用性,简单来说就是更稳定好用。

    SRS不稳定吗?对于一个开源项目来说可能满足要求了,很少有核心协议覆盖率达到95%以上,整体覆盖率50%左右的开源项目(当然稳定性还有更多的方面就不展开讲了);但SRS的要求是能直接提供服务的工业服务器的要求,稳定性要比目前更上一层楼。这方面主要有非常多的地方需要花时间仔细处理,特别是概念不一致的地方,比如播放器的超时断开、Source清理、竞争条件、多个协程的协同。稳定性是不可以交换的基础能力,投入多少就有多少稳定性。

    SRS不好用吗?从反馈和一直关注这点来看,应该不算难用;但SRS的要求是能直接提供服务的商业服务器的要求,易用性要更进一步。这方面主要涉及docker化,和云服务对接,HTTP协议增强比如统计HLS的在线人数,日志JSON化提供运营数据方案。目前SRS的HTTP部分主要参考了Go实现了HTTP1.1部分,后续会考虑将NGINX的更多底层能力移植过来,比如未来可能能将nginx的module直接在SRS上跑,也或许可期。参考 #1657

    另外,安全和LICENSE一直是SRS关注的焦点。安全上主要涉及防盗链,限制如限速和客户端限制增强,加解密,代码漏洞等。LICENSE目前唯一的问题就是替换ST,至少提供一个可选的无LICENSE问题的版本。

    那么,亲爱的你,还期待SRS4支持哪些关键能力呢?请回复这个Issue吧 😄 😄

    opened by winlinvip 54
  • HLS: SRS2对纯音频的流进行HLS 苹果系统播放卡顿伴有杂音的问题

    HLS: SRS2对纯音频的流进行HLS 苹果系统播放卡顿伴有杂音的问题

    srs_2.0对纯音频流进行HLS切片时,如果配置参数选项 hls_vcodec vn; hls_acodec aac; 此时ts的PMT里已经没有video信息,但是用苹果IOS 系统播放音频会出现卡顿与杂音情况,安卓系统播放正常。 hls.conf 配置文件:

    listen              1935;
    max_connections     1000;
    vhost __defaultVhost__ {
        hls {
            enabled         on;
            hls_fragment    5;
            hls_td_ratio    1.5;
            hls_aof_ratio  1.0;
            hls_on_error    ignore;
            hls_storage     disk;
    #        hls_ts_floor    off;
            hls_acodec      aac;
            hls_vcodec      vn;
    #        hls_cleanup     on;
    #        hls_nb_notify   64;
    #        hls_wait_keyframe       off;
            hls_window      60;
            hls_path        ./objs/nginx/html;
            hls_m3u8_file   [app]/[stream].m3u8;
            hls_ts_file     [app]/[stream]-[seq].ts;
        }
    
    Bug 
    opened by lewang321 50
  • SRT: Support publish by SRT for live streaming, new generation protocol for broadcasting. 广播新一代协议SRT,SRT转RTMP,SRT转WebRTC,SRT录制等

    SRT: Support publish by SRT for live streaming, new generation protocol for broadcasting. 广播新一代协议SRT,SRT转RTMP,SRT转WebRTC,SRT录制等

    关于SRS对SRT协议的支持情况。

    Usage

    启动SRS:

    docker run --rm -it \
        -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085 \
        -p 10080:10080/udp \
        registry.cn-hangzhou.aliyuncs.com/ossrs/srs:v4.0.115 \
        ./objs/srs -c conf/srt2rtc.conf
    

    推流:

    docker run --rm --network=host \
        registry.cn-hangzhou.aliyuncs.com/ossrs/srs:encoder \
        ffmpeg -re -i ./doc/source.flv -c copy -f mpegts \
        'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish'
    

    播放:

    Note: 可以开启RTC,实现SRT推流,WebRTC播放。

    Publish by FFmpeg:

    ffmpeg -re -i doc/source.flv -c copy -f mpegts \
        'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish'
    

    Play by ffplay:

    ffplay -i 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request'
    

    如果不使用Docker,也可以从源码编译:

    SRT URL schema

    详细定义请参考 #2893

    一般URL,无Vhost情况:

    • Publish by SRT: srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish
    • Play by SRT: srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request
    • Play stream by RTMP: rtmp://127.0.0.1/live/livestream

    带VHOST的情况:

    • Publish stream by SRT: srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=publish
    • Play stream by SRT: srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=request
    • Play stream by RTMP: rtmp://127.0.0.1/live/livestream?vhost=srs.srt.com.cn

    SRT WIKI

    SRT Low Latency

    本节描述了,如何降低SRT的延迟,是和每个环节都相关的。总结如下:

    • 要关注客户端的Ping和CPU,这两个容易忽略,但是会对延迟有影响。
    • 服务器请用LightHouse SRS,已经调整好了,不会造成额外延迟。
    • RTT变大会影响延迟,基本上在60ms以下的RTT,能稳定在预期延迟。
    • RTT在100ms时延迟大概300ms,RTT在150ms时延迟大概增加到430ms左右。
    • 丢包会影响质量,10%以上丢包会有花屏和丢帧,不影响延迟,音频影响较小。
    • 目前最低延迟,是vmix或芯象推SRT,用ffplay播放,延迟200ms左右。
    • OBS推SRT,ffplay播放,延迟350ms左右。

    特别说明:目前测试下来,SRT的延迟天花板在300ms,尽管vmix能设置成1ms延迟但不起作用,实际的延迟只会比这个更差不会更好,当然如果能保障好网络,300ms的延迟也是足够了。

    超高清、超低延迟、SRT直播的推荐方案:

    • 推流:芯象(230ms),vmix(200ms),OBS(300ms)。
    • 播放:ffplay(200ms),vmix(230ms),芯象(400ms)。

    | - | ffplay | vmix播放 | 芯象播放 | | --- | ---- | --- | --- | | 芯象推流 | 230ms(荐) | - | 400ms | | vmix推流 | 200ms | 300ms | - | | OBS推流 | 300ms | - | - |

    延迟涉及到每个环节,下面是每个环节的详细配置。目录如下:

    • CPU 客户端CPU会造成延迟。
    • Ping 客户端网络RTT对延迟有影响。
    • Encoder 编码器如何设置低延迟模式。
    • Server 服务器如何配置低延迟
    • SRT SRT服务器特别配置
    • Player 播放器如何配置低延迟
    • Benchmark 如何准确的测量延迟
    • Bitrate 从0.5到6Mbps不同码率对延迟的影响
    • Network Jitter 丢包和不同RTT下对延迟的影响
    • Report 测试报告

    Secret

    关于SRT的URL的定义,可以参考SRS URL Schema

    这里特别说明如何带鉴权信息,若需要带鉴权信息比如secret参数,可以在streamid中指定,比如:

    streamid=#!::r=live/livestream,secret=xxx
    

    给个具体的例子:

    ffmpeg -re -i doc/source.flv -c copy -f mpegts \
        'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,secret=xxx,m=publish'
    

    这样转推给SRS的地址就是:

    rtmp://127.0.0.1:1935/live/livestream?secret=xxx
    

    SRT Encryption

    SRS目前没有支持SRT加密,但值得支持,参考 #3072

    SRT Encoder

    SRT Encoder基于srt自适应码率的编码器。
    基于srt协议中的rtt,maxBw,inflight等信息预测低延时的出口带宽,动态的调整编码bitrate,从而实现基于网络出口带宽的编码。 github地址: https://github.com/runner365/srt_encoder

    基于bbr基本拥塞控制算法,通过一个周期内(1~2seconds)的minRTT, maxBw, 和当前的inflight,预测出编码bitrate的状态机(保持,增加,减少)。

    备注:

    1. 本示例仅仅是基础的bbr算法示例,用户可以自己实现接口类(class CongestionCtrlI)中的接口来改进bbr算法;
    2. SRT还是一个在发展中的协议,关注其拥塞控制的对外参数更新,准确度也在提升中;

    简单易用,编译后,直接使用ffmpeg命令行即可。

    Coroutine Native SRT

    SRS如何实现SRT,基于协程的SRT架构,由于SRT有自己的IO调度,我们必须适配到ST,这样可以获得最佳的维护性:

    • 具体代码提交,请参考:https://github.com/ossrs/srs/pull/3010 或者 https://github.com/ossrs/srs/commit/1af30dea324d0f1729aabd22536ea62e03497d7d

    Note: 注意SRS 4.0的SRT是非ST架构,启动了独立的线程做的,维护性不如ST协程原生的架构。

    Q&A

    1. SRS是否支持SRT流转发到Nginx?

    支持的,用OBS/FFmpeg推流(SRT)到SRS,SRS会将SRT转成RTMP协议,就可以将RTMP转成HLS、FLV、WebRTC了,当然也可以把RTMP流Forward到Nginx。

    Feature 
    opened by andryan 47
  • 支持对接GB28181吗?监控,智能摄像头,国标推流

    支持对接GB28181吗?监控,智能摄像头,国标推流

    Moved to https://github.com/ossrs/srs-gb28181/issues/4

    GB已经放到独立的仓库 srs-gb28181, 请参考 #2845 问题请提交到GB的仓库bug,或者pr

    GB已经合并到了5.0分支,5.0.74+ 参考 https://github.com/ossrs/srs/issues/3176

    Feature 
    opened by vickllny 38
  • WebRTC: Support WebRTC, for video meeting, SFU server, video converence. 一对一通话,多人通话,SFU,直播连麦,会议录制等

    WebRTC: Support WebRTC, for video meeting, SFU server, video converence. 一对一通话,多人通话,SFU,直播连麦,会议录制等

    WebRTC目前已经比较成熟了,播放也比较稳定,协议也已经成为了RFC,相应的开源项目也比较多。当然我觉得WebRTC还缺一个高性能简单易用的服务器,之前也分析过现有的服务器,有各种问题,SRS很有机会解决这些问题。

    目前SRS对WebRTC的支持进度如下:

    • [x] SRS 4.0.14,支持了RTMP推流,WebRTC播放,参考Wiki: RTMP to RTC(CN or EN)
    • [x] SRS 4.0.76,支持了WebRTC推流,WebRTC播放,参考Wiki: RTC to RTC(CN or EN)
    • [x] SRS 4.0.95,支持了WebRTC推流,RTMP播放,参考Wiki: RTC to RTMP(CN or EN) 和 #2303 。
    • [x] SRS 4.0.96,一对一通话DEMO,参考SFU: One to One(CN or EN)
    • [x] SRS 4.0.98,多人会议DEMO,参考SFU: Video Room(CN or EN)
    • [x] SRS 4.0.98,会议录制,直播连麦DEMO,参考Room to Live(CN or EN)
    • [ ] Simulcast,一个地址包含多个流,播放时可以给不同的客户端用不同的流。
    • [ ] #2289 更完善的数据统计和拥塞控制算法。

    相关Wiki(会在开发完成后完善):

    在线Demo,上面的Demo都有链接,请参考:https://ossrs.net

    Candidate

    RTC比直播多了一个关键的配置,也是必须要反复确认配置对的,就是candidate。 请参考Wiki

    请一定要看这个配置的解释,不要直接尝试,不看这个直接搞,就必扑街。 几乎一定会在这个地方栽跟头,不要想当然的认为自己能搞定,你真搞不定。

    再啰嗦一遍,必须看这个candidate的配置,关于它的问题一概不回答。

    HTTP API

    相关的推流的API:

    相关的拉流的API:

    Q&A

    1. RTC是否能结合Edge Cluster使用?

    Edge是为直播设计的,所以RTC的集群无法使用之前RTMP的模式,RTC有自己的集群叫级联,参考 #2091

    1. RTC关于merge_nalus?合并多个NALU。

    请参考https://github.com/ossrs/srs/issues/307#issuecomment-612806318

    1. RTC UDP性能优化?

    请参考sendmmsgUDP GSO,以及ZERO_COPY

    1. RTMP2RTC失败,RTC2RTMP失败,无法实现直播和WebRTC转换?

    请参考官方文档,必须明确开启配置,才能开启转换,避免很大的性能问题。https://github.com/ossrs/srs/issues/2728#issuecomment-964686152

    Feature 
    opened by winlinvip 37
  • WebRTC: 云服务器上运行,播放失败

    WebRTC: 云服务器上运行,播放失败

    描述(Description)

    描述你遇到了什么问题(Please description your issue here)

    1. SRS版本(Version): 4.0.17
    2. SRS的日志如下(Log): [2020-04-01 20:31:50.215][Trace][1434][883] <- CPB time=1115001062, okbps=0,0,0, ikbps=122,175,154, mr=0/350, p1stpt=20000, pnt=5000 [2020-04-01 20:32:05.215][Trace][1434][883] <- CPB time=1130001060, okbps=0,0,0, ikbps=123,171,154, mr=0/350, p1stpt=20000, pnt=5000 [2020-04-01 20:32:14.281][Trace][1434][886] RTMP client ip=60.177.172.15, fd=12 [2020-04-01 20:32:14.322][Trace][1434][886] complex handshake success [2020-04-01 20:32:14.322][Trace][1434][886] connect app, tcUrl=rtmp://39.100.54.16:1935/live, pageUrl=http://ossrs.net/players/srs_player.html?app=live&stream=livestream&server=192.168.1.3&port=1935&autostart=true&vhost=192.168.1.3, swfUrl=http://ossrs.net/players/srs_player/release/srs_player.swf?_version=1.33, schema=rtmp, vhost=39.100.54.16, port=1935, app=live, args=null [2020-04-01 20:32:14.322][Trace][1434][886] protocol in.buffer=0, in.ack=0, out.ack=0, in.chunk=128, out.chunk=128 [2020-04-01 20:32:14.487][Trace][1434][886] client identified, type=Play, vhost=39.100.54.16, app=live, stream=livestream, param=, duration=-1ms [2020-04-01 20:32:14.487][Trace][1434][886] connected stream, tcUrl=rtmp://39.100.54.16:1935/live, pageUrl=http://ossrs.net/players/srs_player.html?app=live&stream=livestream&server=192.168.1.3&port=1935&autostart=true&vhost=192.168.1.3, swfUrl=http://ossrs.net/players/srs_player/release/srs_player.swf?_version=1.33, schema=rtmp, vhost=defaultVhost, port=1935, app=live, stream=livestream, param=, args=null [2020-04-01 20:32:14.487][Trace][1434][886] source url=/live/livestream, ip=60.177.172.15, cache=1, is_edge=0, source_id=[1434][883] [2020-04-01 20:32:14.487][Trace][1434][886] dispatch cached gop success. count=81, duration=2816 [2020-04-01 20:32:14.487][Trace][1434][886] create consumer, active=1, queue_size=0.00, jitter=30000000 [2020-04-01 20:32:14.487][Trace][1434][886] set fd=12, SO_SNDBUF=46080=>175000, buffer=350ms [2020-04-01 20:32:14.487][Trace][1434][886] start play smi=0ms, mw_sleep=350, mw_enabled=1, realtime=0, tcp_nodelay=0 [2020-04-01 20:32:15.216][Trace][1434][883] <- CPB time=1140001064, okbps=0,0,0, ikbps=124,171,154, mr=0/350, p1stpt=20000, pnt=5000 [2020-04-01 20:32:20.291][Warn][1434][886][104] client disconnect peer. ret=1007 [2020-04-01 20:32:30.216][Trace][1434][883] <- CPB time=1155001059, okbps=0,0,0, ikbps=124,171,154, mr=0/350, p1stpt=20000, pnt=5000 [2020-04-01 20:32:40.216][Trace][1434][883] <- CPB time=1165001062, okbps=0,0,0, ikbps=124,171,154, mr=0/350, p1stpt=20000, pnt=5000
    3. SRS的配置如下(Config): 使用默认配置

    重现(Replay)

    重现Bug的步骤(How to replay bug?)

    1.源码编译 2../objs/srs -c conf/srs.conf 3、使用RTMP推流,RTMP播放器正常

    1. 使用官网webrtc播放器播放,播放器没有反应

    期望行为(Expect)

    确认问题解决办法

    WebRTC Won't fix 
    opened by duduathz 27
  • 边缘拉流,系统经常出现ret=1018(Device or resource busy) 和 ret=1018(No such file or directory) 错误

    边缘拉流,系统经常出现ret=1018(Device or resource busy) 和 ret=1018(No such file or directory) 错误

    日志

    [2015-10-26 13:36:08.153][error][13948][3998][16] http post on_play uri failed. client_id=3998, url=http://127.0.0.1/lcs/api/rtmp/on_play/shnh-edge2-live1.evideocloud.net, request={"action":"on_play","client_id":3998,"ip":"222.88.95.177","vhost":"live1.evideocloud.net","app":"live","stream":"dxhdbh__gBML4E6B40Lv","pageUrl":""}, response=, code=0, ret=1018(Device or resource busy)
    [2015-10-26 13:36:08.153][error][13948][3998][16] hook client on_play failed. url=http://127.0.0.1/lcs/api/rtmp/on_play/shnh-edge2-live1.evideocloud.net, ret=1018(Device or resource busy)
    [2015-10-26 13:36:08.153][error][13948][3998][16] http hook on_play failed. ret=1018(Device or resource busy)
    [2015-10-26 13:36:08.153][error][13948][3998][16] stream service cycle failed. ret=1018(Device or resource busy)
    [2015-10-26 13:36:08.154][error][13948][3998][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:08.342][error][13948][4000][104] rtmp handshake failed. ret=1008(Connection reset by peer)
    [2015-10-26 13:36:09.032][error][13948][3990][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:09.032][error][13948][3990][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:09.251][error][13948][4002][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:09.251][error][13948][4002][16] http post on_connect uri failed. client_id=4002, url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, request={"action":"on_connect","client_id":4002,"ip":"222.186.130.3","vhost":"live1.evideocloud.net","app":"live","tcUrl":"rtmp://live1.evideocloud.net:1935/live","pageUrl":""}, response=, code=0, ret=1018(Device or resource busy)
    [2015-10-26 13:36:09.251][error][13948][4002][16] hook client on_connect failed. url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, ret=1018(Device or resource busy)
    [2015-10-26 13:36:09.251][error][13948][4002][16] check vhost failed. ret=1018(Device or resource busy)
    [2015-10-26 13:36:10.341][error][13948][3973][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:36:12.165][error][13948][4020][104] rtmp handshake failed. ret=1008(Connection reset by peer)
    [2015-10-26 13:36:13.365][error][13948][4022][104] rtmp handshake failed. ret=1008(Connection reset by peer)
    [2015-10-26 13:36:14.103][error][13948][4008][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:14.103][error][13948][4008][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:14.572][error][13948][4005][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:14.572][error][13948][4005][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:14.614][error][13948][4024][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:14.614][error][13948][4024][16] http post on_connect uri failed. client_id=4024, url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, request={"action":"on_connect","client_id":4024,"ip":"222.186.130.3","vhost":"live1.evideocloud.net","app":"live","tcUrl":"rtmp://live1.evideocloud.net:1935/live","pageUrl":""}, response=, code=0, ret=1018(Device or resource busy)
    [2015-10-26 13:36:14.614][error][13948][4024][16] hook client on_connect failed. url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, ret=1018(Device or resource busy)
    [2015-10-26 13:36:14.614][error][13948][4024][16] check vhost failed. ret=1018(Device or resource busy)
    [2015-10-26 13:36:15.211][error][13948][3914][62] rtmp handshake failed. ret=1011(Timer expired)
    [2015-10-26 13:36:15.256][error][13948][4026][2] connect to server error. ip=127.0.0.1, port=80, ret=1018(No such file or directory)
    [2015-10-26 13:36:15.256][error][13948][4026][16] http post on_connect uri failed. client_id=4026, url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, request={"action":"on_connect","client_id":4026,"ip":"222.186.130.3","vhost":"live1.evideocloud.net","app":"live","tcUrl":"rtmp://live1.evideocloud.net:1935/live","pageUrl":""}, response=, code=0, ret=1018(Device or resource busy)
    [2015-10-26 13:36:15.256][error][13948][4026][16] hook client on_connect failed. url=http://127.0.0.1/lcs/api/rtmp/on_connect/shnh-edge2-live1.evideocloud.net, ret=1018(Device or resource busy)
    
    [2015-10-26 13:38:13.494][error][13948][4448][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:13.565][error][13948][4452][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:13.767][error][13948][4393][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:13.783][error][13948][4374][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:13.855][error][13948][4385][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:14.494][error][13948][4448][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:14.565][error][13948][4452][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:14.767][error][13948][4393][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:14.783][error][13948][4374][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:14.855][error][13948][4385][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:15.494][error][13948][4448][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:15.565][error][13948][4452][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:15.767][error][13948][4393][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:15.783][error][13948][4374][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    [2015-10-26 13:38:15.855][error][13948][4385][2] connect to server error. ip=192.168.190.34, port=1935, ret=1018(No such file or directory)
    
    Bug 
    opened by gqf2008 27
  • DASH: Support convert RTMP/WebRTC to MPEG-DASH

    DASH: Support convert RTMP/WebRTC to MPEG-DASH

    Usage

    Make sure your SRS version is SRS 5.0.96+.

    Build SRS and run:

    ./configure && make && ./objs/srs -c conf/dash.conf 
    

    Publish by FFmpeg:

    ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
    

    Play by

    Feature 
    opened by winlinvip 27
  • GB28181: tcp接流失败,流一直在推

    GB28181: tcp接流失败,流一直在推

    描述(Description)

    描述你遇到了什么问题(Please description your issue here)

    1. SRS版本(Version): 4.0.74
    2. SRS的日志如下(Log):
    [2021-02-26 10:49:34.262][Warn][7500][uk65z339][2] gb28181: client id=34020000002000000007@34020000001320001128 ssrc=0x25f4104, peer(111.206.214.15, 15060), no rtp data 2 in seconds, clean it, wait other port!
    

    重现Bug的步骤(How to replay bug?) 打开配置文件接流方式tcp,接流后一段时间(30s左右),rtmp muxer释放,原因是没有mux没有收到流,倒推过去发现,接流read时,后面不会触发on_rtp函数,看上去这个函数没什么毛病,但是调试也调不出来问题在哪里? 急切想知道到底是怎么导致了这个行为?

    GB28181 
    opened by yushimeng 26
  • GB28181:运行一段时间后,设备离线,重启系统和服务器也无法注册

    GB28181:运行一段时间后,设备离线,重启系统和服务器也无法注册

    运行一段时间后设备离线 ,日志提示 :sip: unkonw message head Route,无法识别设备发的注册报文,而服务端没有回复

    1. SRS版本(Version): 4.0.56
    2. SRS的日志如下(Log):
    [2020-12-03 11:13:09.283][Trace][7812][777p511g] sip: unkonw message head Route: content=<sip:[email protected]:5060;lr>
    [2020-12-03 11:13:09.283][Trace][7812][777p511g] gb28181: request client id=21030200001180000001 peer(113.228.8.225, 5061)
    [2020-12-03 11:13:09.283][Trace][7812][777p511g] gb28181: request method=REGISTER, uri=sip:[email protected]:5060, version=SIP/2.0 expires=3600
    [2020-12-03 11:13:09.283][Trace][7812][777p511g] gb28181: send_message:SIP/2.0 200 OK
    Via: SIP/2.0/UDP 113.228.8.225:5061;rport=5061;received=113.228.8.225;branch=z9hG4bK142655506
    From: <sip:[email protected]:5061>;tag=1654407460
    To: <sip:[email protected]:5061>
    CSeq: 1 REGISTER
    Call-ID: [email protected]
    Contact: <sip:[email protected]:5061>
    User-Agent: SRS/4.0.56(Leo)
    Expires: 3600
    Content-Length: 0
    
    
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] gb28181: request peer(113.228.8.225, 5061) nbbuf=498
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] gb28181: request recv message=REGISTER sip:[email protected]:5060 SIP/2.0
    Via: SIP/2.0/UDP 113.228.8.225:5061;rport;branch=z9hG4bK142655506
    Route: <sip:[email protected]:5060;lr>
    From: <sip:[email protected]:5061>;tag=1654407460
    To: <sip:[email protected]:5061>
    Call-ID: [email protected]
    CSeq: 1 REGISTER
    Contact: <sip:[email protected]:5061>
    Max-Forwards: 70
    User-Agent: SIP UAS V2.1.4.662543
    Expires: 3600
    Content-Length: 0
    
    
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] sip: unkonw message head Route: content=<sip:[email protected]:5060;lr>
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] gb28181: request client id=21030200001180000001 peer(113.228.8.225, 5061)
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] gb28181: request method=REGISTER, uri=sip:44010600002[email protected]:5060, version=SIP/2.0 expires=3600
    [2020-12-03 11:13:13.290][Trace][7812][777p511g] gb28181: send_message:SIP/2.0 200 OK
    Via: SIP/2.0/UDP 113.228.8.225:5061;rport=5061;received=113.228.8.225;branch=z9hG4bK142655506
    From: <sip:[email protected]:5061>;tag=1654407460
    To: <sip:[email protected]:5061>
    CSeq: 1 REGISTER
    Call-ID: [email protected]
    Contact: <sip:[email protected]:5061>
    User-Agent: SRS/4.0.56(Leo)
    Expires: 3600
    Content-Length: 0
    
    
    
    1. SRS的配置如下(Config):
    # push gb28181 stream to SRS.
    
    listen                  1935;
    max_connections         1017;
    daemon                  on;
    srs_log_tank            console;  #配置日志答应到文件,需要和srs_log_level配合使用
    srs_log_file            ./objs/srs.log; 
    utc_time                off; #是否使用utc时间。如果该值为off则使用本地时间,如果开始使用utc时间。
    
    http_api {
    	# whether http api is enabled.
        # default: off
        enabled         on;
        # the http api listen entry is <[ip:]port>
        # for example, 192.168.1.100:1985
        # where the ip is optional, default to 0.0.0.0, that is 1985 equals to 0.0.0.0:1985
        # default: 1985
        listen          1985;
        # whether enable crossdomain request.
        # default: on
        crossdomain     on;
        # the HTTP RAW API is more powerful api to change srs state and reload.
        raw_api {
            # whether enable the HTTP RAW API.
            # default: off
            enabled             on;
            # whether enable rpc reload.
            # default: off
            allow_reload        on;
            # whether enable rpc query.
            # default: off
            allow_query         on;
            # whether enable rpc update.
            # default: off
            allow_update        on;
        }
    }   
    
    stats {
    	# the index of device ip.
        # we may retrieve more than one network device.
        # default: 0
        network         0;
        # the device name to stat the disk iops.
        # ignore the device of /proc/diskstats if not configed.
        #disk            sda sdb xvda xvdb;
    }
    
    stream_caster {
        enabled             on;
        caster              gb28181;
    
        # 转发流到rtmp服务器地址与端口
        # TODO: https://github.com/ossrs/srs/pull/1679/files#r400875104
        # [stream] is VideoChannelCodecID(视频通道编码ID) for sip
        # 自动创建的道通[stream] 是‘chid[ssrc]’ [ssrc]是rtp的ssrc
        # [ssrc] rtp中的ssrc
        output              rtmp://127.0.0.1:1935/live/[stream];
        
        # 接收设备端rtp流的多路复用端口
        listen              9000;
    
        # rtp接收监听端口范围,最小值
        rtp_port_min        58200;
        # rtp接收监听端口范围,最大值
        rtp_port_max        58300;
    
        # 是否等待关键帧之后,再转发,
        # off:不需等待,直接转发
        # on:等第一个关键帧后,再转发
        wait_keyframe       on;
        
        # rtp包空闲等待时间,如果指定时间没有收到任何包
        # rtp监听连接自动停止,发送BYE命令
        rtp_idle_timeout    30;
    
        # 是否转发音频流
        # 目前只支持aac格式,所以需要设备支持aac格式
        # on:转发音频
        # off:不转发音频,只有视频
        # *注意*!!!:flv 只支持11025  22050  44100 三种
        # 如果设备端没有三种中任何一个,转发时为自动选择一种格式
        # 同时也会将adts的头封装在flv aac raw数据中
        # 这样的话播放器为自动通过adts头自动选择采样频率
        # 像ffplay, vlc都可以,但是flash是没有声音,
        # 因为flash,只支持11025 22050 44100
        audio_enable        off;
    
        # 是否开启rtp缓冲
        # 开启之后能有效解决rtp乱序等问题
        jitterbuffer_enable  on;
    
        # 服务器主机号,可以域名或ip地址
        # 也就是设备端将媒体发送的地址,如果是服务器是内外网
        # 需要写外网地址,
        # 调用api创建stream session时返回ip地址也是host
        # $CANDIDATE 是系统环境变量,从环境变量获取地址,如果没有配置,用*
        # *代表指定stats network 的网卡号地址,如果没有配置network,默认则是第0号网卡地址
        # TODO: https://github.com/ossrs/srs/pull/1679/files#r400917594
        
    	host      xxx.xxx.xxx.xxx;
    
        #根据收到ps rtp包自带创建rtmp媒体通道,不需要api接口创建
        #rtmp地址参数[stream] 就是通道id  格式chid[ssrc]
        auto_create_channel   on;
    
        sip {
            # 是否启用srs内部sip信令
            # 为on信令走srs, off 只转发ps流
            enabled on;
            
            # sip监听udp端口
            listen              5060;
            
            # SIP server ID(SIP服务器ID).
            # 设备端配置编号需要与该值一致,否则无法注册
            serial              44010600002000120002;
    
            # SIP server domain(SIP服务器域)
            realm               4401060000;
    
            # 服务端发送ack后,接收回应的超时时间,单位为秒
            # 如果指定时间没有回应,认为失败
            ack_timeout         30;
    
            # 设备心跳维持时间,如果指定时间内(秒)没有接收一个心跳
            # 认为设备离线
            keepalive_timeout   120;
    
            # 注册之后是否自动给设备端发送invite
            # on: 是  off 不是,需要通过api控制
            auto_play           off;
            # 设备将流发送的端口,是否固定
            # on 发送流到多路复用端口 如9000
            # off 自动从rtp_mix_port - rtp_max_port 之间的值中
            # 选一个可以用的端口
            invite_port_fixed     on;
    
            # 向设备或下级域查询设备列表的间隔,单位(秒)
            # 默认60秒
            query_catalog_interval  60;
        }
    }
    
    Bug GB28181 
    opened by feixuezhang 24
  • SRS not lauching after compile on ARM

    SRS not lauching after compile on ARM

    Something weird happening here, i run it and just closes no process is created, here is the log, it was compiled on a PI with --pi flag.

    [2015-09-19 19:00:37.330][trace][18654][0] srs checking config...
    [2015-09-19 19:00:37.331][trace][18654][0] detect intranet address: 127.0.0.1, ifname=lo
    [2015-09-19 19:00:37.332][warn][18654][0][2] stats disk not configed, disk iops disabled.
    [2015-09-19 19:00:37.332][trace][18654][0] write log to file ./objs/origin.log
    [2015-09-19 19:00:37.332][trace][18654][0] you can: tailf ./objs/origin.log
    [2015-09-19 19:00:37.332][trace][18654][0] @see: https://github.com/simple-rtmp-server/srs/wiki/v1_CN_SrsLog
    [2015-09-19 19:00:37.333][trace][18654][0] srs(simple-rtmp-server) 2.0.189
    [2015-09-19 19:00:37.333][trace][18654][0] license: The MIT License (MIT), Copyright (c) 2013-2015 SRS(simple-rtmp-server)
    [2015-09-19 19:00:37.333][trace][18654][0] primary/master: SRS/1.0release
    [2015-09-19 19:00:37.333][trace][18654][0] authors: winlin,wenjie.zhao
    [2015-09-19 19:00:37.333][trace][18654][0] contributors: winlin<[email protected]> wenjie.zhao<740[email protected]> xiangcheng.liu<[email protected]> naijia.liu<[email protected]> alcoholyi<[email protected]>byteman<[email protected]> chad.wang<[email protected]> suhetao<[email protected]> Johnny<[email protected]> karthikeyan<[email protected]> StevenLiu<[email protected]> zhengfl<[email protected]> tufang14<[email protected]> allspace<[email protected]> niesongsong<[email protected]> rudeb0t<[email protected]>
    [2015-09-19 19:00:37.333][trace][18654][0] uname: Linux pi.rte.pm 4.1.6-v7+ #810 SMP PREEMPT Tue Aug 18 15:32:12 BST 2015 armv7l GNU/Linux
    [2015-09-19 19:00:37.333][trace][18654][0] build: 2015-09-19 18:29:54, little-endian
    [2015-09-19 19:00:37.333][trace][18654][0] configure:  --pi --with-http-api --with-stream-caster --with-stat --jobs=4
    [2015-09-19 19:00:37.333][trace][18654][0] features: --prefix=/usr/local/srs --with-hls --with-hds --with-dvr --without-nginx --with-ssl --without-ffmpeg --with-transcode --with-ingest --with-stat --with-http-callback --with-http-server --with-stream-caster --with-http-api --with-librtmp --without-research --without-utest --without-gperf --without-gmc --without-gmp --without-gcp --without-gprof --without-arm-ubuntu12 --without-mips-ubuntu12 --log-trace
    [2015-09-19 19:00:37.333][trace][18654][0] conf: conf/origin.conf, limit: 1000
    [2015-09-19 19:00:37.333][trace][18654][0] SRS for pi
    [2015-09-19 19:00:37.334][trace][18654][0] writev limits write 1024 iovs a time
    [2015-09-19 19:00:37.334][warn][18654][0][2] SRS 2.0.189 is not stable, please use stable branch 1.0release instead
    [2015-09-19 19:00:37.334][warn][18654][0][2] stream caster is experiment feature.
    [2015-09-19 19:00:37.334][trace][18654][0] check feature rtmp handshake: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature hls: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature hds: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature http callback: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature http api: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature http server: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature http parser: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature dvr: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature transcode: on
    [2015-09-19 19:00:37.334][trace][18654][0] check feature ingest: on
    [2015-09-19 19:00:37.335][trace][18654][0] check feature system stat: on
    [2015-09-19 19:00:37.335][warn][18654][0][2] check feature compile nginx: off
    [2015-09-19 19:00:37.335][warn][18654][0][2] check feature compile ffmpeg: off
    [2015-09-19 19:00:37.335][trace][18654][0] stream caster: on
    [2015-09-19 19:00:37.335][trace][18654][0] MR(merged-read): on, @see https://github.com/simple-rtmp-server/srs/issues/241
    [2015-09-19 19:00:37.335][trace][18654][0] MR(merged-read) default 0 sleep 350
    [2015-09-19 19:00:37.335][trace][18654][0] MW(merged-write) default sleep 350
    [2015-09-19 19:00:37.335][trace][18654][0] read chunk stream cache cid [0, 16)
    [2015-09-19 19:00:37.335][trace][18654][0] default gop cache 1, play queue 30s
    [2015-09-19 19:00:37.335][trace][18654][0] complex send algorithm enabled.
    [2015-09-19 19:00:37.335][warn][18654][0][2] TCP_NODELAY enabled, may hurts performance.
    [2015-09-19 19:00:37.335][trace][18654][0] auto guess socket send buffer by merged write
    [2015-09-19 19:00:37.336][trace][18654][0] system default latency in ms: mw(0-350) + mr(0-350) + play-queue(0-30000)
    [2015-09-19 19:00:37.336][trace][18654][0] http: root mount to ./objs/nginx/html
    [2015-09-19 19:00:37.336][trace][18654][0] start deamon mode...
    [2015-09-19 19:00:37.338][trace][18655][0] father process exit. ret=0
    [2015-09-19 19:00:37.338][trace][18656][0] son(deamon) process running.
    [2015-09-19 19:00:37.339][trace][18656][0] st_set_eventsys to epoll
    [2015-09-19 19:00:37.340][trace][18656][0] st_init success, use epoll
    [2015-09-19 19:00:37.341][trace][18656][100] server main cid=100
    [2015-09-19 19:00:37.341][trace][18654][0] grandpa process exit.
    [2015-09-19 19:00:37.342][trace][18656][100] write pid=18656 to objs/origin.pid success!
    [2015-09-19 19:03:09.577][trace][18662][0] srs checking config...
    [2015-09-19 19:03:09.579][warn][18662][0][0] stats disk not configed, disk iops disabled.
    [2015-09-19 19:03:09.579][trace][18662][0] write log to file ./objs/origin.log
    [2015-09-19 19:03:09.579][trace][18662][0] you can: tailf ./objs/origin.log
    [2015-09-19 19:03:09.579][trace][18662][0] @see: https://github.com/simple-rtmp-server/srs/wiki/v1_CN_SrsLog
    [2015-09-19 19:03:09.580][trace][18662][0] srs(simple-rtmp-server) 2.0.189
    [2015-09-19 19:03:09.580][trace][18662][0] license: The MIT License (MIT), Copyright (c) 2013-2015 SRS(simple-rtmp-server)
    [2015-09-19 19:03:09.580][trace][18662][0] primary/master: SRS/1.0release
    [2015-09-19 19:03:09.580][trace][18662][0] authors: winlin,wenjie.zhao
    [2015-09-19 19:03:09.580][trace][18662][0] contributors: winlin<[email protected]> wenjie.zhao<[email protected]> xiangcheng.liu<[email protected]> naijia.liu<[email protected]> alcoholyi<[email protected]> byteman<[email protected]> chad.wang<[email protected]> suhetao<[email protected]> Johnny<[email protected]> karthikeyan<[email protected]> StevenLiu<[email protected]> zhengfl<[email protected]> tufang14<[email protected]> allspace<[email protected]> niesongsong<[email protected]> rudeb0t<[email protected]>
    [2015-09-19 19:03:09.580][trace][18662][0] uname: Linux pi.rte.pm 4.1.6-v7+ #810 SMP PREEMPT Tue Aug 18 15:32:12 BST 2015 armv7l GNU/Linux
    [2015-09-19 19:03:09.580][trace][18662][0] build: 2015-09-19 18:29:54, little-endian
    [2015-09-19 19:03:09.580][trace][18662][0] configure:  --pi --with-http-api --with-stream-caster --with-stat --jobs=4
    [2015-09-19 19:03:09.580][trace][18662][0] features: --prefix=/usr/local/srs --with-hls --with-hds --with-dvr --without-nginx --with-ssl --without-ffmpeg --with-transcode --with-ingest --with-stat --with-http-callback --with-http-server --with-stream-caster --with-http-api --with-librtmp --without-research --without-utest --without-gperf --without-gmc --without-gmp --without-gcp --without-gprof --without-arm-ubuntu12 --without-mips-ubuntu12 --log-trace
    [2015-09-19 19:03:09.580][trace][18662][0] conf: conf/origin.conf, limit: 1000
    [2015-09-19 19:03:09.581][trace][18662][0] SRS for pi
    [2015-09-19 19:03:09.581][trace][18662][0] writev limits write 1024 iovs a time
    [2015-09-19 19:03:09.581][warn][18662][0][0] SRS 2.0.189 is not stable, please use stable branch 1.0release instead
    [2015-09-19 19:03:09.581][warn][18662][0][0] stream caster is experiment feature.
    [2015-09-19 19:03:09.581][trace][18662][0] check feature rtmp handshake: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature hls: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature hds: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature http callback: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature http api: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature http server: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature http parser: on
    [2015-09-19 19:03:09.581][trace][18662][0] check feature dvr: on
    [2015-09-19 19:03:09.582][trace][18662][0] check feature transcode: on
    [2015-09-19 19:03:09.582][trace][18662][0] check feature ingest: on
    [2015-09-19 19:03:09.582][trace][18662][0] check feature system stat: on
    [2015-09-19 19:03:09.582][warn][18662][0][0] check feature compile nginx: off
    [2015-09-19 19:03:09.582][warn][18662][0][0] check feature compile ffmpeg: off
    [2015-09-19 19:03:09.582][trace][18662][0] stream caster: on
    [2015-09-19 19:03:09.582][trace][18662][0] MR(merged-read): on, @see https://github.com/simple-rtmp-server/srs/issues/241
    [2015-09-19 19:03:09.582][trace][18662][0] MR(merged-read) default 0 sleep 350
    [2015-09-19 19:03:09.582][trace][18662][0] MW(merged-write) default sleep 350
    [2015-09-19 19:03:09.582][trace][18662][0] read chunk stream cache cid [0, 16)
    [2015-09-19 19:03:09.582][trace][18662][0] default gop cache 1, play queue 30s
    [2015-09-19 19:03:09.583][trace][18662][0] complex send algorithm enabled.
    [2015-09-19 19:03:09.583][warn][18662][0][0] TCP_NODELAY enabled, may hurts performance.
    [2015-09-19 19:03:09.583][trace][18662][0] auto guess socket send buffer by merged write
    [2015-09-19 19:03:09.583][trace][18662][0] system default latency in ms: mw(0-350) + mr(0-350) + play-queue(0-30000)
    [2015-09-19 19:03:09.583][trace][18662][0] http: root mount to ./objs/nginx/html
    [2015-09-19 19:03:09.583][trace][18662][0] start deamon mode...
    [2015-09-19 19:03:09.585][trace][18663][0] father process exit. ret=0
    [2015-09-19 19:03:09.585][trace][18664][0] son(deamon) process running.
    [2015-09-19 19:03:09.586][trace][18664][0] st_set_eventsys to epoll
    [2015-09-19 19:03:09.588][trace][18664][0] st_init success, use epoll
    [2015-09-19 19:03:09.588][trace][18664][100] server main cid=100
    [2015-09-19 19:03:09.588][trace][18662][0] grandpa process exit.
    [2015-09-19 19:03:09.589][trace][18664][100] write pid=18664 to objs/origin.pid success!
    
    Bug 
    opened by deluxor 23
  • Exporter: Filter normal read and write errors.(#3364)

    Exporter: Filter normal read and write errors.(#3364)

    Filter normal read and write errors, for ignore or reduce srs_clients_errs_total some disconnect events.

    curl http://127.0.0.1:9972/metrics
    
    # HELP srs_node_uname_info Labeled system information as provided by the uname system call.
    # TYPE srs_node_uname_info gauge
    srs_node_uname_info{sysname="Linux",nodename="7cd605a15218",release="5.10.104-linuxkit",version="#1 SMP Thu Mar 17 17:08:06 UTC 2022",machine="x86_64"} 1
    # HELP srs_build_info A metric with a constant '1' value labeled by build_date, version from which SRS was built.
    # TYPE srs_build_info gauge
    srs_build_info{build_date="2023-01-06 17:17:09",major="6",version="6.0.13",code="Bee",label="cn-beijing",tag="cn-edge"} 1
    # HELP srs_cpu_percent SRS cpu used percent.
    # TYPE srs_cpu_percent gauge
    srs_cpu_percent 3.003
    # HELP srs_memory SRS memory used.
    # TYPE srs_memory gauge
    srs_memory 22280
    # HELP srs_send_bytes_total SRS total sent bytes.
    # TYPE srs_send_bytes_total counter
    srs_send_bytes_total 5789
    # HELP srs_receive_bytes_total SRS total received bytes.
    # TYPE srs_receive_bytes_total counter
    srs_receive_bytes_total 203862
    # HELP srs_streams The number of SRS concurrent streams.
    # TYPE srs_streams gauge
    srs_streams 0
    # HELP srs_clients The number of SRS concurrent clients.
    # TYPE srs_clients gauge
    srs_clients 0
    # HELP srs_clients_total The total counts of SRS clients.
    # TYPE srs_clients_total counter
    srs_clients_total 1
    # HELP srs_clients_errs_total The total errors of SRS clients.
    # TYPE srs_clients_errs_total counter
    srs_clients_errs_total 0
    
    opened by chundonglinlin 0
  • H265: Support HEVC over SRT.(#465)

    H265: Support HEVC over SRT.(#465)

    When you experience hevc over srt, compile by ./configure --h265=on --srt=on, then run by ./objs/srs -c conf/srt.conf.

    # SRT config.
    
    listen              1935;
    max_connections     1000;
    daemon              off;
    srs_log_tank        console;
    
    http_api {
        enabled         on;
        listen          1985;
    }
    
    http_server {
        enabled         on;
        listen          8080;
        dir             ./objs/nginx/html;
    }
    
    srt_server {
        enabled on;
        listen 10080;
        maxbw 1000000000;
        connect_timeout 4000;
        peerlatency 0;
        recvlatency 0;
        latency 0;
        tsbpdmode off;
        tlpktdrop off;
        sendbuf 2000000;
        recvbuf 2000000;
    }
    
    # @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
    vhost __defaultVhost__ {
        srt {
            enabled     on;
            srt_to_rtmp on;
        }
    
        http_remux {
            enabled     on;
            mount       [vhost]/[app]/[stream].flv;
        }
    
        hls {
            enabled         on;
            hls_path        ./objs/nginx/html;
            hls_fragment    10;
            hls_window      60;
        }
    }
    

    FFmpeg Publish:

    ffmpeg -re -i ./h265_aac.ts -c copy -pes_payload_size 0 -f mpegts 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish'
    

    Play SRT:

    ffplay 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request'
    

    Play RTMP:

    hevc-ffplay rtmp://127.0.0.1:8080/live/livestream
    

    Play FLV:

    hevc-ffplay http://127.0.0.1:8080/live/livestream.flv
    

    Play HLS:

    ffplay http://127.0.0.1:8080/live/livestream.m3u8
    
    opened by chundonglinlin 0
  • Exporter: The success rate is too low.

    Exporter: The success rate is too low.

    Description

    When enable prometheus exporter, there are lots of error clients events, so that the success rate is too low.

    1. SRS Version: SRS 5.0

    2. Start SRS origin server:

    env SRS_LISTEN=19350 SRS_MAX_CONNECTIONS=1000 \
      SRS_PID=./objs/origin.pid SRS_DAEMON=off SRS_SRS_LOG_TANK=console \
      SRS_EXPORTER_ENABLED=on \
      ./objs/srs -e
    
    1. Start SRS edge server:
    ./objs/srs -c conf/edge.conf
    
    1. Prometheus config prometheus.yml
    scrape_configs: 
      - job_name: "srs"
        metrics_path: "/metrics"
        scrape_interval: 15s
        static_configs:
          - targets: ["host.docker.internal:9972"]
    
    1. Run prometheus:
    docker run --rm -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml  \
        -p 9090:9090 prom/prometheus
    

    Replay

    Please describe how to replay the bug?

    Step 1: Publish to SRS

    ffmpeg -stream_loop -1 -re -i doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
    

    Step 2: Stop FFmpeg.

    Step 3: There is always an error

    [2023-01-06 13:35:33.282][ERROR][65245][p4q038w5][4] edge push get server control message failed. err=code=1007(SocketRead)(Socket read data failed) : recv interlaced message : read basic header : basic header requires 1 bytes : read bytes : read
    thread [65245][p4q038w5]: recv_message() [./src/protocol/srs_protocol_rtmp_stack.cpp:341][errno=4]
    thread [65245][p4q038w5]: recv_interlaced_message() [./src/protocol/srs_protocol_rtmp_stack.cpp:792][errno=4]
    thread [65245][p4q038w5]: read_basic_header() [./src/protocol/srs_protocol_rtmp_stack.cpp:887][errno=4]
    thread [65245][p4q038w5]: grow() [./src/protocol/srs_protocol_stream.cpp:162][errno=4]
    thread [65245][p4q038w5]: read() [./src/protocol/srs_protocol_st.cpp:566][errno=4](Interrupted system call)
    

    Step 4: Query prometheus by:

    srs_clients_errs_total
    

    Expect

    Ignore some disconnect events.

    Kubernetes 
    opened by winlinvip 1
  • Trancode/transmux SRT stream using ffmpeg not working, but transcode/transmux RTMP stream working.

    Trancode/transmux SRT stream using ffmpeg not working, but transcode/transmux RTMP stream working.

    Description(描述)

    I'm using obs to publish content to srs through SRT protocol I want to transmux/transcode the SRT stream using ffmpeg

    1. SRS Version(版本): 5

    2. SRS Log(日志):

    Attaching to srs
    srs  | [2022-12-27 14:09:51.200][INFO][1][7ql1q44j] XCORE-SRS/5.0.98(Bee)
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] config parse complete
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] write log to console
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] SRS/5.0.98(Bee), MIT
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] authors: Winlin<[email protected]> ZhaoWenjie<[email protected]> ShiWei<[email protected]> XiaoZhihong<[email protected]> WuPengqiang<[email protected]> XiaLixin<[email protected]> LiPeng<[email protected]> ChenGuanghua<[email protected]> ChenHaibo<[email protected]> Johzzy<[email protected]> Zhouxiaojun2008<[email protected]> Pengfei.ma<[email protected]> ZhangJunqin<[email protected]> and https://github.com/ossrs/srs/blob/develop/trunk/AUTHORS.md#contributors
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] cwd=/usr/local/srs, work_dir=./, build: 2022-11-25 05:46:54, configure: --gb28181=on --sanitizer-static=on, uname: Linux buildkitsandbox 5.15.0-1023-azure #29~20.04.1-Ubuntu SMP Wed Oct 26 19:18:25 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux, osx: 0, env: 0, pkg: dcis
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] configure detail: --prefix=/usr/local/srs --config=conf/srs.conf --hls=on --hds=off --dvr=on --ssl=on --https=on --ssl-1-0=off --ssl-local=off --sys-ssl=off --transcode=on --ingest=on --stat=on --http-callback=on --http-server=on --stream-converter=on --http-api=on --utest=off --cherrypy=off --srt=on --rtc=on --gb28181=on --simulator=off --cxx11=on --cxx14=off --backtrace=on --ffmpeg-fit=on --nasm=on --srtp-nasm=on --clean=on --gperf=off --gmc=off --gmd=off --gmp=off --gcp=off --gprof=off --static=off --shared-st=off --shared-srt=off --shared-ffmpeg=off --log-verbose=off --log-info=off --log-trace=on --log-level_v2=on --gcov=off --debug=off --debug-stats=off --cross-build=off --sanitizer=on --cygwin64=off --single-thread=off --cc=gcc --cxx=g++ --ar=ar --ld=ld --randlib=randlib
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] srs checking config...
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] ips, iface[0] eth0 ipv4 0x11043 172.150.0.10
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] devices, internet eth0 172.150.0.10
    srs  | [2022-12-27 14:09:51.201][WARN][1][7ql1q44j][2] stats network use index=0, ip=172.150.0.10, ifname=eth0
    srs  | [2022-12-27 14:09:51.201][WARN][1][7ql1q44j][2] stats disk not configed, disk iops disabled.
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] write log to console
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] features, rch:on, dash:on, hls:on, hds:off, srt:on, hc:on, ha:on, hs:on, hp:on, dvr:on, trans:on, inge:on, stat:on, sc:on
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] SRS on amd64 x86_64, conf:conf/docker.conf, limit:1000, writev:1024, encoding:little-endian, HZ:100
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] mw sleep:350ms. mr enabled:on, default:0, sleep:350ms
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] gc:on, pq:30000ms, cscc:[0,16), csa:on, tn:on(may hurts performance), ss:auto(guess by merged write)
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] system default latency(ms): mw(0-350) + mr(0-350) + play-queue(0-30000)
    srs  | [2022-12-27 14:09:51.201][WARN][1][7ql1q44j][2] SRS/5.0.98 is not stable
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] write pid=1 to ./objs/srs.pid success!
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] Thread #1(primordial): init name=srs-master-1, interval=5000ms
    srs  | [2022-12-27 14:09:51.201][INFO][1][7ql1q44j] Pool: Start threads primordial=1, hybrids=1 ok
    srs  | [2022-12-27 14:09:51.201][INFO][1][1p218393] Thread #2: run with tid=7, entry=0x60c000000400, label=hybrid, name=srs-hybrid-2
    srs  | [2022-12-27 14:09:51.205][INFO][1][1p218393] TencentCloud CLS is disabled
    srs  | [2022-12-27 14:09:51.205][INFO][1][1p218393] TencentCloud APM is disabled
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] fingerprint=D5:EF:B1:D3:D8:38:B8:2F:88:B7:9A:38:DC:3C:C5:0E:71:73:5D:66:B3:01:31:67:69:32:F7:4F:01:48:CB:9A
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] CircuitBreaker: enabled=1, high=2x90, critical=1x95, dying=5x99
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] http: root mount to ./objs/nginx/html
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] server main cid=1p218393, pid=1, ppid=0, asprocess=0
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] RTMP listen at tcp://0.0.0.0:1935, fd=9
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] HTTP-API listen at tcp://0.0.0.0:1985, fd=10
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] HTTP-Server listen at tcp://0.0.0.0:8080, fd=11
    srs  | [2022-12-27 14:09:51.208][INFO][1][1p218393] signal installed, reload=1, reopen=10, fast_quit=15, grace_quit=3
    srs  | [2022-12-27 14:09:51.209][INFO][1][1p218393] http: api mount /console to ./objs/nginx/html/console
    srs  | [2022-12-27 14:09:51.209][INFO][1][1p218393] srt listen at udp://0.0.0.0:10080, fd=398793399
    srs  | [2022-12-27 14:09:51.210][INFO][1][s45o275i] Hybrid cpu=0.00%,38MB
    srs  | [2022-12-27 14:09:51.210][WARN][1][1703t85n][22] use public address as ip: 172.150.0.10, ifname=eth0
    srs  | [2022-12-27 14:09:51.210][INFO][1][1703t85n] Startup query id=vid-0dfb67i, session=vid-840u953, eip=172.150.0.10, wait=300s
    srs  | [2022-12-27 14:09:51.210][INFO][1][5sbo73hb] TCP: connection manager run, conns=0
    srs  | [2022-12-27 14:09:51.210][INFO][1][190993mq] GB: connection manager run, conns=0
    srs  | [2022-12-27 14:09:51.210][INFO][1][5230302v] SRT: connection manager run, conns=0
    srs  | [2022-12-27 14:09:51.210][INFO][1][822iv757] RTC: connection manager run, conns=0
    srs  | [2022-12-27 14:09:56.202][INFO][1][s45o275i] Hybrid cpu=1.00%,38MB
    srs  | [2022-12-27 14:09:56.206][INFO][1][7ql1q44j] Process: cpu=0.00%,38MB, threads=2
    srs  | [2022-12-27 14:10:01.203][INFO][1][s45o275i] Hybrid cpu=0.00%,38MB
    srs  | [2022-12-27 14:10:01.211][INFO][1][7ql1q44j] Process: cpu=0.00%,38MB, threads=2
    srs  | [2022-12-27 14:10:06.204][INFO][1][s45o275i] Hybrid cpu=1.00%,39MB, cid=1,1, timer=63,0,0, clock=1,48,1,0,0,0,0,0,0
    srs  | [2022-12-27 14:10:06.215][INFO][1][7ql1q44j] Process: cpu=0.00%,39MB, threads=2
    srs  | [2022-12-27 14:10:11.205][INFO][1][s45o275i] Hybrid cpu=0.00%,39MB, cid=1,1, timer=63,0,0, clock=1,48,1,0,0,0,0,0,0
    srs  | [2022-12-27 14:10:11.220][INFO][1][7ql1q44j] Process: cpu=0.00%,39MB, threads=2
    
    
    1. SRS Config(配置):
    # SRT config.
    
    listen              1935;
    max_connections     1000;
    daemon              off;
    srs_log_tank        console;
    
    http_api {
        enabled         on;
        listen          1985;
    }
    
    http_server {
        enabled         on;
        listen          8080;
        dir             ./objs/nginx/html;
    }
    
    srt_server {
        enabled on;
        listen 10080;
        maxbw 1000000000;
        connect_timeout 4000;
        peerlatency 0;
        recvlatency 0;
        latency 0;
        tsbpdmode off;
        tlpktdrop off;
        sendbuf 2000000;
        recvbuf 2000000;
    }
    
    # @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
    vhost __defaultVhost__ {
        srt {
            enabled     on;
            srt_to_rtmp on;
        }
        
        transcode {
            enabled     on;
            ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
            engine ff {
                enabled on;
                iformat mpegts;
                vcodec  copy;
                acodec  copy;
                oformat dash;
                output ./objs/nginx/dash/test.mpd;
            }
        }
    }
    

    Replay(重现)

    Please describe how to replay the bug? (重现Bug的步骤)

    Step 1: run srs v.5 docker (no problem) Step 2: publish live stream using obs to srs through SRT protocol (no problem) Step 3: check generated dash files inside srs docker container Step 4: if i publish from obs using RTMP protocol, it's working fine, dash files are generated but I if use SRT protocol, nothing happen, it seems SRT protocol not triggering ffmpeg transcoding process

    Expect(期望行为) I expecting SRT input stream to srs also triggering ffmpeg transcoding/transmuxing, because like RTMP, SRT also supported by both srs and ffmpeg

    SRT 
    opened by bandirsen 1
Releases(v5.0-a3)
Owner
ossrs
Open Source SRS
ossrs
yangwebrtc is a self-developed rtc architecture supporting Webrtc/Srt/Rtmp, including a variety of video and audio codecs and processing, etc.

YangWebrtc Overview yangwebrtc是一个自主研发的支持Webrtc/Srt/Rtmp的rtc架构,包含多种视音频编解码和处理等。 支持视频会议、高清录播直播、直播互动等多种视音频应用。 可用于远程教育、远程医疗、指挥调度、安防监控、影视录播、协同办公、直播互动等多种行业应用

null 331 Dec 27, 2022
media server based on c++11, support webrtc/rtmp/httpflv/websocket flv

cpp_media_server A media server is writen by C++11, and the network io is writen by Boost.Asio. It support rtmp/httpflv/websocket(flv)/webrtc. preinst

Alex.CR 139 Jun 30, 2022
🤟Super fast H.264/H.265 FLV player

??Super fast H.264/H.265 FLV player

Eros Zhao 1.2k Jan 7, 2023
OpenShot Video Library (libopenshot) is a free, open-source C++ library dedicated to delivering high quality video editing, animation, and playback solutions to the world

OpenShot Video Library (libopenshot) is a free, open-source C++ library dedicated to delivering high quality video editing, animation, and playback solutions to the world

OpenShot Studios, LLC 936 Jan 4, 2023
Pear - WebRTC Toolkit for IoT/Embedded Device

Pear is a WebRTC SDK written in C. The SDK aims to integrate IoT/Embedded device with WebRTC applications.

null 581 Jan 2, 2023
webrtc c++ library for mediasoup with full sfu c++ demo

项目说明: 本项目是基于mediasoup v3 版本 webrtc m84版本 的sfu的js版本修改成的c++版本,支持和js版本一样的完整demo功能,但是本项目是直接把worker进程代码集成 到了demo可以直接代码级别的调用,支持VC2019,xcode,CLion的开发环境,可以直接断

null 119 Dec 20, 2022
Yangwebrtc - Webrtc Libary for PC, non-google lib

MetaRTC(yangwebrtc) Overview MetaRTC(yangwebrtc)是一个自主研发的支持Webrtc/Srt/Rtmp的rtc架构,包含多种视音频编解码和处理等。 yangwebrtc为PC版本 metaRTC为嵌入式版本 https://github.com/metar

meta 331 Dec 27, 2022
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.

Video Stabilization Contents General Info Installation To Do General Info Video stabilization is a software-based approach in real-time to eliminating

null 7 Nov 23, 2022
Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content.

This project is a Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content. The application decodes the h.264/5 compressed content using an HW accelerated decoder, the decoded YCbCr frames are processed with Vulkan Graphics and then presented via the Vulkan WSI.

NVIDIA DesignWorks Samples 132 Dec 15, 2022
Minimalist video maker -- simplify your music score video making process!

VisualScores 极简视频制作程序,简化你的乐谱视频制作! 如果需要编译,请解压 lib 文件夹中压缩包。 使用前请参考 manual 文件夹中的用户手册。 请勿修改、移动或删除 resource 文件夹中的任何文件。 VisualScores Minimalist video maker

Chen and Sim 7 Sep 7, 2022
A project for the latest Steam PC (US) release of Resident Evil 4 that patches the game to use high-quality MP4 video.

A project for the latest Steam PC (US) release of Resident Evil 4 that patches the game to use high-quality MP4 video.

Megan Grass 6 Oct 10, 2022
PowerVS is a standalone broadcast video server based on ffmpeg

PowerVS PowerVS is a standalone broadcast video server based on ffmpeg ?? Table of Contents About Getting Started Running the tests Usage Development

null 3 Mar 17, 2022
A pure C linux MJPEG over HTTP server

mjpeg2http A pure C linux MJPEG over HTTP server Summary mjpeg2http is a minimalistic server primarily targeted to run on embedded computers, like rou

null 55 Sep 24, 2022
Smartstreaming is a high-performance and scalable streaming media server.

1. introduction Smartstreaming is a high-performance and scalable streaming media server. 2. design | io | Coroutine | | transport | tcp/udp/srt/quic

null 2 Jan 7, 2022
SortNode is a JS binding for SORT: Simple, online, and real-time tracking of multiple objects in a video sequence.

SortNode is a JS binding for SORT: Simple, online, and real-time tracking of multiple objects in a video sequence.

Techainer 10 Aug 2, 2022
a simple example of video streaming with a ESP32 AI Thinker

esp32-video-streaming its a simple camera system that im trying to make for fun I want to make an async server but idk it doesnt works correctly and w

ranon rat 6 Mar 9, 2022
Sentry-Picam is a simple wildlife / security camera solution for the Raspberry Pi Zero W, providing 1080p/30fps motion activated H.264 video capture.

Sentry-Picam is a simple wildlife / security camera solution for the Raspberry Pi Zero W, providing 1080p/30fps motion activated H.264 video capture.

null 124 Oct 9, 2022
A simple example showing how to render a video with libvlc + raylib.

Hey! I bet you have been trying to render and control a video with raylib for a long long time. Don't you think you should at least buy me a beer? Wha

Andrea Fontana 42 Nov 8, 2022
DTV is a library that provides a simple interface for generating video files from a C++ application

Direct to Video (DTV) What does DTV do? DTV is a library that provides a simple interface for generating video files from a C++ application. It uses F

Ange Yaghi 133 Dec 30, 2022