分享

运营级的互联网直播服务器集群架设,搞定这一个开源项目就够了!

 漫步之心情 2018-01-03

目录:

一、应用场景

二、srs 开源直播框架介绍

三、官方说明文档

四、基于rtmp协议开源直播平台搭建

五、直播技术常见问题解决思路

六、黑色小幽默

运营级的互联网直播服务器集群架设,搞定这一个开源项目就够了!

运营级的互联网直播服务器集群架设,搞定这一个开源项目就够了!

一、应用场景

1、虚拟直播:

将文件编码为直播流。可以指定多个文件后,SRS会循环播放。

2、RTSP摄像头对接:

以前安防摄像头都支持访问RTSP地址,RTSP无法在互联网播放。

可以将RTSP采集后,以RTMP推送到SRS。

3、直接采集设备:

SRS采集功能可以作为编码器采集设备上的未压缩图像数据,

譬如video4linux和alsa设备,编码为h264/aac后输出RTMP到SRS。

4、将HTTP流采集为RTMP:

有些老的设备,能输出HTTP的ts或FLV流,可以采集后转封装为RTMP,支持HLS输出。

总之,采集的应用场景主要是“SRS拉流”,能拉任意的流,只要ffmpeg支持;不是h264/aac都没有关系,ffmpeg能转码。

SRS默认是支持“推流”,即等待编码器推流上来,可以是专门的编码设备,FMLE,ffmpeg,xsplit,flash等等。

如此,SRS的接入方式可以是“推流到SRS”和“SRS主动拉流”。

二、srs 开源直播框架介绍

项目地址:https://github.com/ossrs/srs/

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

通过官方广告的描述,SRS超级强,无所不能秒杀其他同类媒体服务器。

  • 运营级:商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。

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

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

  • 集群:FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRS支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等,并且友好的支持CDN和服务器的灵活架设

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

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

  • 具备基本的权限验证,可以限制推流和播放的权限。

  • 推流、Ingest流、直接接入视频文件等方式,非常灵活。如果再结合开源的组件,如OBS则几乎目前市场上主流的流媒体直播需求就都能满足了。

SRS提供了丰富的接入方案将RTMP流接入SRS,

包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。

SRS还支持将接入的RTMP流进行各种变换,

譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV。SRS包含支大规模集群如CDN业务的关键特性,譬如RTMP多级集群、VHOST虚拟服务器、无中断服务Reload、HTTP-FLV集群、Kafka对接。

此外,SRS还提供丰富的应用接口,包括HTTP回调、安全策略Security、HTTP API接口、RTMP测速。

三、官方说明文档

1、SRS Overview

SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如直播流转码、转发给其他服务器、转封装成HLS、录制成FLV。SRS包含支大规模集群如CDN业务的关键特性,譬如RTMP多级集群、VHOST虚拟服务器、无中断服务Reload。此外,SRS还提供丰富的应用接口,包括HTTP回调、HTTP API接口、RTMP测速。SRS在源站和CDN集群中都得到了广泛的应用Applications。

2、Downloading

SRS发布版本提供安装包下载,请访问ossrs.net。若您需要自己编译SRS,请参考编译SRS。

SRS主要运行在Linux系统上,譬如Centos和Ubuntu,包括x86、x86-64、ARM和MIPS。MacOS支持代码编辑和编译。其他Unix-like系统不支持,SRS也不支持Windows系统。SRS的系统偏好主要是由于state-threads导致的,它极大的简化了服务器在复杂协议的处理。

SRS可以在一台服务器上运行集群,或者在多台服务器上也可以运行集群。SRS是单进程模型,不支持多进程。

3、Where to Go from Here

User Guides:

  • Quick Start: 使用SRS的主要功能的快速手册。您应该从这个文章入手。

  • Why SRS: 为何选择SRS?SRS的路线图?

  • GIT Mirrors: SRS在各个主要GIT站点的镜像,代码都是保持同步的。

  • Main Features: SRS的功能列表。请注意有些功能只有特定的版本才有。请注意有些功能是实验性的。

  • Releases: SRS目前已经发布的版本。

  • Docs: SRS的详细文档。

Deployment Guides:

  • Delivery RTMP: 如何部署SRS提供RTMP服务。

  • Delivery HLS: 如何部署SRS提供RTMP和HLS服务。

  • Transcode: 如何部署SRS对直播流转码。

  • Forward: 如何部署SRS转发RTMP流到其他服务器。

  • Low latency: 如何部署SRS为低延迟模式。

  • Ingest: 如何将其他流拉到SRS作为RTMP流。

  • HTTP Server: 如何部署SRS为HTTP服务器。

  • SRS DEMO: 如何启动SRS的DEMO。

  • Projects: 都有谁在使用SRS。

  • Setup: SRS安装和部署摘要。

Cluster Guides:

  • RTMP Cluster: 如何部署RTMP分发集群,譬如CDN支持RTMP分发。

  • VHOST: 如何一个集群支持多个用户,即Vhost。

  • Reload: 如何不中断服务的前提下应用新的配置,即Reload。

  • Tracable Log: 如何在集群中追溯错误和日志,基于连接的日志,排错日志。

Integration Guides:

  • HTTP Callback: 使用HTTP回调侦听SRS的事件。

  • HTTP API: 使用SRS的HTTP API获取数据。

  • RTMP Bandwidth: 使用SRS测速接口获取带宽数据。

Benchmarks:

  • Performance: SRS的性能测试报告。

原文:

https://github.com/ossrs/srs/wiki/v1_CN_Home

四、基于rtmp协议开源直播平台搭建

1、服务器 srs

运营级的互联网直播服务器集群 并发7.5k ,支持多种转码,RTMP->HLS,RTMP->FLV等,支持HTTP回调,RTMP0.1s延时

https://github.com/wenjiegit/srs

2、iOS端-推流 LMLiveStreaming

H264,AAC硬编,GPUImage美颜,rtmp/flv传输,平滑丢帧,动态码率

https://github.com/chenliming777/LMLiveStreaming

3、iOS端-拉流 ijkplayer

基于ffmpeg,支持硬解

https://github.com/Bilibili/ijkplayer/tree/master/ios

4、android端-推流 yasea

H264,AAC硬编,rtmp传输, Portrait/landscape切换,前后摄像头切换,支持MP4转码录制

https://github.com/begeekmyfriend/yasea

5、android端-拉流 ijkplayer

五、直播技术常见问题解决思路

1、1M带宽到底能承受多少直播拉、推流?

客户端 码率=带宽

服务器 码率=带宽*人

1Mbps = 800kbpsx1.28

1M 带宽支持1.28个800k的码率的端。

2、客户端网络状态差怎么处理?

方法1:自适应码率

方法2:重连 (推流端、拉流端)

3、带宽不够怎么办?

方法1、更高压缩率 h265 / vp9。

方法2、srs集群。

方法3、用edge服务器,

推流推到origin,拉流从edge走,origin和edge之间走内网。

https://github.com/ossrs/srs/wiki/v2_CN_Edge

Edge的主要应用场景:

  • CDN/VDN大规模集群,客户众多流众多需要按需回源。

  • 小规模集群,但是流比较多,需要按需回源。

  • 骨干带宽低,边缘服务器强悍,可以使用多层edge,降低上层BGP带宽。

方法4、用ossfs cdn

走cdn的带宽,oss的流量,好处是cdn比ecs的流量便宜,oss的存储比ecs的便宜。

srs的生成路径写到oss,拉流走cdn的流量,推流走ecs的流量。

ossfs能像传统磁盘一样,把阿里云OSS挂在到本地主机上(像普通磁盘一样使用)。

ossfs阿里云的ecs挂载程序

https://github.com/aliyun/ossfs

六、

黑色小幽默

今天在公司听到一句惨绝人寰骂人的话:“你TM就是一个没有对象的野指针!”

运营级的互联网直播服务器集群架设,搞定这一个开源项目就够了!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多