您的位置:首页 > 其它

SRS(simple-rtmp-server)直播点播服务器

2016-05-24 10:37 916 查看
前言:由于个人工作的原因,公司采用了这个作为点播直播服务器,采用这个的原因只有一个,因为开源免费

因为不要钱!因为不要钱!因为不要钱!因为很重要所以说三遍。如果不是这个原因,我也不会对此开源软件相识,作为创业公司当然是能省就省,买不起商业的点播直播软件,没人力做不了一个点播直播软件

已经用过大半年,各方面使用的情况来看还挺可以的,今日趁我写博客的激情还在遂再写一篇。#本人的博客尽可能的多注释,注释不是给我看的,我都懂!

没错,就是给不会的现在在看我的博客小白们看的!如果发现还有不懂的地方请留言哪里不懂,然后我继续改到让蚂蚁的小大脑都懂的地步?蛤,这么多注释下你还不明白?

买块豆腐就去了吧!!不拦你!!!!!

先wait下!!!!!

此篇博客稍微写下就作废吧,因为我上github后发现,此开源软件已经死了,曾经的雄心壮志已经荡然无存。。。。。。白研究那么深了

[b]官方已经跪了,我还往下写不???????[/b]

1.SRS(simple-rtmp-server)介绍SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。运营级:商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。

互联网:互联网最大的特征是变化,唯一不变的就是不断变化的客户要求,唯一不变的是基础结构的概念完整性和简洁性。互联网还意味着参与性,听取用户的需求和变更,持续改进和维护。

直播服务器:直播和点播这两种截然不同的业务类型,导致架构和目标完全不一致,从运营的设备组,应对的挑战都完全不同。两种都支持只能说明没有重心,或者低估了代价。

集群:FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRS支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等。

概念完整性:虽然代码甚至结构都在变化,但是结构的概念完整性是一直追求的目标。从SRS服务器,P2P,ARM监控产业,MIPS路由器,服务器监控管理,ARM智能手机,SRS的规模不再是一个服务器而已。

简单实现:对于过于复杂的实现,宁可不加入这个功能,也不牺牲前面提到的要求。对于已经实现的功能的代码,总会在一个版本release前给予充分的时间来找出最简答案。不求最高性能,最优雅,最牛逼,但求最简单易懂。

备注:概念完整性可以参考Brooks的相关文献,在宏观方面他还是很有造诣
SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS推送RTSP/UDP/FLV到SRS拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码流截图转发给其他服务器转封装成HTTP-FLV流转封装成HLS转封装成HDS录制成FLV。SRS包含支大规模集群如CDN业务的关键特性,譬如RTMP多级集群VHOST虚拟服务器无中断服务ReloadHTTP-FLV集群Kafka对接。此外,SRS还提供丰富的应用接口,包括HTTP回调安全策略SecurityHTTP API接口RTMP测速

2.SRS与其他媒体服务器比较通过官方广告的描述,总而言之一句话,SRS超级强,无所不能秒杀其他同类媒体服务器至于你们信不信?

我反正是信了!

Stream Delivery(流发送支持类型比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
RTMPStableStableStableStableStable
HLSStableStableXStableStable
HDSExperimentXXStableStable
HTTP FLVStableXXXX
HLS(aonly)StableXXStableStable
HTTP ServerStableStableXXStable

Cluster(集群扩展支持比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
RTMP EdgeStableXXStableX
RTMP BackupStableXXXX
VHOSTStableXXStableStable
ReloadStableXXXX
ForwardStableXXXX
ATCStableXXXX

Stream Service(流服务功能支持比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
DVRStableStableXXStable
TranscodeStableXXXStable
HTTP APIStableStableXXStable
HTTP hooksStableXXXX
GopCacheStableXXStableX
SecurityStableStableXXStable
Token TraverseStableXXStableX

Efficiency(性能比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
Concurrency(并发数)7.5k3k2k2k3k
MultipleProcess(多线程)ExperimentStableXXX
RTMP Latency(rtmp延迟)0.1s3s3s3s3s
HLS Latency(hls延迟)10s30sX30s30s

Stream Caster(流推送支持比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
IngestStableXXXX
Push MPEGTSExperimentXXXStable
Push RTSPExperimentXStableXStable
Push HTTP FLVExperimentXXXX

Debug System(debug系统支持比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
BW checkStableXXXX
Tracable LogStableXXXX

Docs(文档比较,有中文wiki,因为是国产开源软件)

FeatureSRSNGINXCRTMPDFMSWOWZA
DemosStableXXXX
WIKI(EN+CN)StableEN onlyXXStable

Others(其他比较)

FeatureSRSNGINXCRTMPDFMSWOWZA
ARM/MIPSStableStableXXX
Client LibraryStableXXXX
3.SRS的架构体系
SRS always use the most simple architecture to support complex transaction.
System arch: the system structure and arch.

Modularity arch: the main modularity of SRS.

Stream arch: the stream dispatch arch of SRS.

RTMP cluster arch: the RTMP origin and edge cluster arch.

Multiple processes arch (by wenjie): the multiple process of SRS.

CLI arch: the cli arch for SRS, api to manage SRS.

Bandwidth specification: the bandwidth test specification of SRS.

System Architecture

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

Modularity Architecture

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

Stream Architecture

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

Remark:
(1) Encoder: encoder must push RTMP stream to SRS server.
(2) MediaSource: any media source, which can be ingest by ffmpeg.
(3) Ingester: SRS will fork a process to run ffmpeg(or your application)
to ingest any input to rtmp, push to SRS.


4.SRS实战(测试服务器的ip为192.168.0.20)
官方已经跪了,我还往下写不???????

(1)部署SRS提供RTMP和HLS服务
#获取SRS
[root@ren tools]# git clone https://github.com/ossrs/srs Initialized empty Git repository in /application/tools/srs/.git/
remote: Counting objects: 31186, done.
remote: Total 31186 (delta 0), reused 0 (delta 0), pack-reused 31186
Receiving objects: 100% (31186/31186), 157.01 MiB | 4.51 MiB/s, done.
Resolving deltas: 100% (24133/24133), done.


本文出自 “REN的博客” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: