注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

一个的视频直播方案:SRS  

2014-09-01 21:01:39|  分类: 流媒体技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参考地址>>>https://github.com/winlinvip/simple-rtmp-server/wiki/Product

SRS产品规划

SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。
  • 运营级:商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。
  • 互联网:互联网最大的特征是变化,唯一不变的就是不断变化的客户要求,唯一不变的是基础结构的概念完整性和简洁性。互联网还意味着参与性,听取用户的需求和变更,持续改进和维护。
  • 直播服务器:直播和点播这两种截然不同的业务类型,导致架构和目标完全不一致,从运营的设备组,应对的挑战都完全不同。两种都支持只能说明没有重心,或者低估了代价。
  • 集群:FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRS支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等。
  • 概念完整性:虽然代码甚至结构都在变化,但是结构的概念完整性是一直追求的目标。从SRS服务器,P2P,ARM监控产业,MIPS路由器,服务器监控管理,ARM智能手机,SRS的规模不再是一个服务器而已。
  • 简单实现:对于过于复杂的实现,宁可不加入这个功能,也不牺牲前面提到的要求。对于已经实现的功能的代码,总会在一个版本release前给予充分的时间来找出最简答案。不求最高性能,最优雅,最牛逼,但求最简单易懂。

备注:概念完整性可以参考Brooks的相关文献,在宏观方面他还是很有造诣。

Rlease1.0

SRS release 1.0,预计研发周期为1年左右。主要的目标是:

  • 提供互联网直播的核心业务功能,即RTMP/HLS直播。能对接任意的编码器和播放器,集群支持对接任意的源站服务器。
  • 提供丰富的外围流媒体功能,譬如Forward,Transcode,Ingest,DVR。方便开展多种源站业务。
  • 完善的运维接口,reload,HTTP API,完善和保持更新的wiki。另外,提供配套的商业监控和排错系统。
  • 完备的utest机制,还有gperf(gmc,gmp,gcp)和gprof性能以及优化机制。提供c++层次足够满意的性能和内存错误查找机制。
  • 在ARM/MIPS等嵌入式CPU设备Linux上运行。另外,提供配套的内网监控和排错,cubieboard/raspberry-pi的嵌入式服务器。

目前,功能均已实现,处于测试和改进阶段。预计在2014年年底之前发布release 1.0.

Backlog

SRS 2.0+ 的功能列表,可能的方向:

更多内容:https://github.com/winlinvip/simple-rtmp-server/wiki/Product


附:

Edge边缘服务器

SRS的Edge提供访问时回源机制,在CDN/VDN等流众多的应用场景中有重大意义,forward/ingest方案会造成大量带宽浪费。同 时,SRS的Edge能对接所有的RTMP源站服务器,不像FMS的Edge只能对接FMS源站(有私有协议);另外,SRS的Edge支持SRS源站的 所有逻辑(譬如转码,转发,HLS,DVR等等),也就是说可以选择在源站切片HLS,也可以直接在边缘切片HLS。

备注:Edge往往需要配合多进程,SRS的多进程在计划之中。

Edge的主要应用场景:

  • CDN/VDN大规模集群,客户众多流众多需要按需回源。
  • 小规模集群,但是流比较多,需要按需回源。
  • 骨干带宽低,边缘服务器强悍,可以内部分发RTMP后边缘切片HLS,避免RTMP和HLS都回源。

注意:edge可以从源站拉流,也可以将流转发给源站。也就是说,播放edge上的流时,edge会回源拉流;推流到edge上时,edge会直接将流转发给源站。

注意:若只需要中转流给源站,不必用forward,直接使用edge模式即可。可以直接支持推流和拉流的中转,简单快捷。Forward应用于目标服务器是多个,譬如将一路流主动送给多路服务器;edge虽然配置了多台服务器,但是只用了一台,有故障时才切换。

注意:优先使用edge,除非知道必须用forward,才使用forward。

概念

所谓边缘edge服务器,就是边缘直播缓存服务器,配置时指定为remote模式和origin(指定一个或多个源站IP),这个边缘edge服务器就是源站的缓存了。

当用户推流到边缘服务器时,边缘直接将流转发给源站。譬如源站在北京BGP机房,湖南有个电信ADSL用户要推流发布自己的直播流,要是直接推流到北京BGP可能效果不是很好,可以在湖南电信机房部署一个边缘,用户推流到湖南边缘,边缘转发给北京源站BGP。

当用户播放边缘服务器的流时,边缘服务器看有没有缓存,若缓存了就直接将流发给客户端。若没有缓存,则发起一路回源链接,从源站取数据源源不断放到 自己的缓存队列。也就是说,多个客户端连接到边缘时,只有一路回源。这种结构在CDN是最典型的部署结构。譬如北京源站,在全国32个省每个省都部署了 10台服务器,一共就有320台边缘,假设每个省1台边缘服务器都有2000用户观看,那么就有64万用户,每秒钟集群发送640Gbps数据;而回源链 接只有320个,实现了大规模分发。

边缘edge服务器,实际上是解决大并发问题产生的分布式集群结构。SRS的边缘可以指定多个源站,在源站出现故障时会自动切换到下一个源站,不影响用户观看,具有最佳的容错性,用户完全不会觉察。

配置

edge属于vhost的配置,将某个vhost配置为edge后,该vhost会回源取流(播放时)或者将流转发给源站(发布时)。

vhost __defaultVhost__ {
    # the mode of vhost, local or remote.
    #       local: vhost is origin vhost, which provides stream source.
    #       remote: vhost is edge vhost, which pull/push to origin.
    # default: local
    mode            remote;
    # for edge(remote mode), user must specifies the origin server
    # format as: <server_name|ip>[:port]
    # @remark user can specifies multiple origin for error backup, by space,
    # for example, 192.168.1.100:1935 192.168.1.101:1935 192.168.1.102:1935
    origin          127.0.0.1:1935 localhost:1935;
}

可配置多个源站,在故障时会切换到下一个源站。

集群配置

下面举例说明如何配置一个源站和集群。

源站配置,参考origin.conf

listen              19350;
pid                 objs/origin.pid;
srs_log_file        ./objs/origin.log;
vhost __defaultVhost__ {
}

边缘配置,参考edge.conf

listen              1935;
pid                 objs/edge.pid;
srs_log_file        ./objs/edge.log;
vhost __defaultVhost__ {
    mode            remote;
    origin          127.0.0.1:19350;
}
  评论这张
 
阅读(641)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017