基于SRS搭建RTMP直播流媒体服务器

软件定位

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

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

软件应用

  • 搭建大规模 CDN 集群,可以在 CDN 内部的源站和边缘部署 SRS。
  • 小型业务快速搭建几台流媒体集群,譬如学校、企业等,需要分发的流不多,同时 CDN 覆盖不如自己部署几个节点,可以用 SRS 搭建自己的小集群。
  • SRS 作为源站,CDN 作为加速边缘集群。比如推流到 CDN 后 CDN 转推到源站,播放时 CDN 会从源站取流。这样可以同时使用多个 CDN。同时还可以在源站做 DRM 和 DVR,输出 HLS,更重要的是如果直接推 CDN,一般 CDN 之间不是互通的,一个 CDN 出现故障无法快速切换到其他 CDN。
  • 编码器可以集成 SRS 支持拉流。一般编码器支持推 RTMP/UDP 流,如果集成 SRS 后,可以支持多种拉流。
  • 协议转换网关,比如可以推送 FLV 到 SRS 转成 RTMP 协议,或者拉 RTSP 转 RTMP,还有拉 HLS 转 RTMP。SRS 只要能接入流,就能输出能输出的协议。
  • 学习流媒体可以用 SRS。SRS 提供了大量的协议的文档、wiki 和文档对应的代码、详细的 issues、流媒体常见的功能实现,以及新流媒体技术的尝试等。

软件对比

与其他媒体软件对比。

Stream Delivery

FeatureSRSNGINXCRTMPDFMSWOWZA
RTMPStableStableStableStableStable
HLSStableStableXStableStable
HDSExperimentXXStablStable
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

软件部署

基于滴滴云DC2(IP:116.85.57.94)进行软件部署。

第一步,获取 SRS。详细参考

[dc2-user@10-254-81-196 ~]$ git clone https://github.com/ossrs/srs
[dc2-user@10-254-81-196 ~]$ cd srs/trunk

第二步,编译 SRS。详细参考

[dc2-user@10-254-81-196 trunk]$ ./configure && make

第三步,编写 SRS 配置文件。详细参考

将以下内容保存为文件 conf/srs.conf,服务器启动时指定该配置文件 (srs 的 conf 文件夹中有该文件)。

# conf/srs.conf
listen              888;
#默认端口为1935,由于滴滴云DC2安全组策略问题,选择已开放的端口888测试
max_connections     1000;
srs_log_file        ./objs/srs.log;
vhost stream.didi.com {
}

第四步,启动SRS。

[dc2-user@10-254-81-196 trunk]$ ./objs/srs -c conf/srs.conf
[2018-11-19 16:27:38.271][trace][11904][0] XCORE-SRS/2.0.258(ZhouGuowen)
[2018-11-19 16:27:38.271][trace][11904][0] config parse complete
[2018-11-19 16:27:38.271][trace][11904][0] write log to file ./objs/srs.log
[2018-11-19 16:27:38.271][trace][11904][0] you can: tailf ./objs/srs.log
[2018-11-19 16:27:38.271][trace][11904][0] @see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLog

第五步,启动推流编码器。

Linux 系统下可以使用 FFMPEG 进行推流;Windows/Ios 系统下可选择 OBS 进行推流。(本文我们使用 FFMPEG 进行推流演示)

  • 获取 FFMPEG
[dc2-user@10-254-81-196 ~]$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
[dc2-user@10-254-81-196 ~]$ cd ffmpeg
  • 编译 FFMPEG
[dc2-user@10-254-81-196 ffmpeg]$./configure && make

如果编译失败,请根据提示内容安装依赖环境或忽略。

  • 使用 FFMPEG推流
[dc2-user@10-254-81-196 ffmpeg]$./ffmpeg -re -i ../test.mp4  -f flv -y rtmp://116.85.57.94:888/live?vhost=stream.didi.com/teststream

第六步,观看直播流。

RTMP 播放地址为:rtmp://116.85.57.94:888/live?vhost=stream.didi.com/teststream
(若域名可被公网解析,播放地址为:rtmp://stream.didi.com:888/live/teststream)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页