当前位置: 首页 - 视频直播 - 基于SRS搭建RTMP直播流媒体服务器

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

2019-09-04 作者: grassroot 浏览: 402

软件定位

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

Feature SRS NGINX CRTMPD FMS WOWZA

RTMP Stable Stable Stable Stable Stable

HLS Stable Stable X Stable Stable

HDS Experiment X X Stabl Stable

HTTP FLV Stable X X X X

HLS(aonly) Stable X X Stable Stable

HTTP Server Stable Stable X X Stable

Cluster

Feature SRS NGINX CRTMPD FMS 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

Stream Service

Feature SRS NGINX CRTMPD FMS WOWZA

DVR Stable Stable X X Stable

Transcode Stable X X X Stable

HTTP API Stable Stable X X Stable

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


协议介绍

SRS 支持 HLS/RTMP 两种成熟而且广泛应用的流媒体分发方式。

  • RTMP  指 Adobe 的 RTMP ( Realtime Message Protocol ),广泛应用于低延时直播,也是编码器和服务器对接的实际标准协议,在 PC(Flash)上有最佳观看体验和最佳稳定性。
  • HLS  指 Apple 的 HLS ( Http Live Streaming ),本身就是 Live(直播)的,不过 Vod(点播)也能支持。HLS 是 Apple 平台的标准流媒体协议,和 RTMP 在 PC 上一样支持得天衣无缝。

HLS 和 RTMP 两种分发方式,就可以支持所有的终端。RTMP 分发参考  基于 SRS 搭建 RTMP 直播流媒体服务器 

使用场景

  • 简单:HLS 作为流媒体协议非常简单,Apple 支持得也很完善。Android 对 HLS 的支持也会越来越完善。

    跨平台:PC 主要的直播方案是 RTMP,也有一些库能播放 HLS,譬如 JWPlayer,基于 OSMF 的 HLS 插件也一大堆。所以实际上如果选一种协议能跨 PC/Android/IOS,那就是 HLS。

    友好的 CDN 分发方式:目前 CDN 对于 RTMP 也是基本协议,但是 HLS 分发的基础是 HTTP,所以 CDN 的接入和分发会比 RTMP 更加完善。能在各种 CDN 之间切换,RTMP 也能,只是可能需要对接测试。

    IOS 上苛刻的稳定性要求:IOS 上最稳定的当然是 HLS,稳定性不差于 RTMP 在 PC-flash 上的表现。

总之,SRS 支持 HLS 主要是作为输出的分发协议,直播以 RTMP+HLS 分发,满总各种应用场景;点播以 HLS 为主。

软件部署

基于滴滴云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)

可使用软件 VLC 播放。

可使用 CUTV在线播放器 播放。

可使用 SRS在线播放器 播放。


评论
本文作者 阅读排行 文章推荐