当前位置:首页 > 云服务器 > 正文

srs流媒体服务器都是用的什么协议,srs支持哪些流媒体协议

SRS流媒体服务器核心支持RTMP、HTTP-FLV、HLS、WebRTC、SRT、GB28181等协议,其中RTMP和HTTP-FLV是直播推拉流的主力,WebRTC负责低延迟场景,SRT则主打弱网公网传输。它不是一个只认RTMP的老古董,而是一个协议网关型服务器,会根据你的业务场景自动适配不同协议,下面从实际使用角度拆解每个协议的角色。

SRS流媒体服务器支持哪些协议

SRS的设计哲学是”协议为业务服务”,而不是绑定某个协议,它在不同版本中逐步加入了多种协议支持,目前主流版本(4.0、5.0、6.0)覆盖了直播、回放、连麦、监控接入等全部常见场景。

RTMP:直播推流的老大哥

RTMP是SRS的立身之本,绝大多数OBS推流、摄像机推流、手机直播推流走的就是RTMP,SRS对RTMP的支持非常成熟,支持推流鉴权、GOP缓存、时移回看、转封装等能力,在SRS的配置文件中,vhost和application的默认配置几乎都是围绕RTMP设计的。

RTMP的缺点是延迟较高,通常在1-3秒左右,且默认不支持H5原生播放,所以实际部署中,RTMP主要用于上行推流,下行播放则转换为HTTP-FLV或HLS。

HTTP-FLV:直播播放的主力

由于浏览器不再支持Flash,HTTP-FLV成为Web端播放的主流方案,SRS把RTMP流实时转封装为FLV格式,通过HTTP协议输出,这个协议延迟低(约1-2秒),兼容性好,是当前直播点播平台最常用的播放协议。

需要留意的是,HTTP-FLV在移动端H5的兼容性不如HLS,所以在业务选型时,通常播放端是PC网页优先用FLV,移动端优先用HLS。

HLS:苹果生态的标配

HLS由Apple提出,SRS支持将直播流切成一个个TS分片,并生成m3u8索引文件,这种协议延迟较高(约5-10秒),但胜在天然适配iOS Safari、Android原生播放器,且支持拖动进度条回看,HLS适合对延迟不敏感的VOD点播和短视频场景。

SRS中的HLS配置通常只需在vhost中开启hls on,并指定分片时长,分片越小延迟越低,但服务器压力越大,需要根据业务量权衡。

WebRTC:低延迟连麦和监控

SRS从4.0版本开始支持WebRTC,通过UDP协议传输音视频数据,延迟可以压到300-500毫秒级别,这一特性让SRS能胜任视频会议、连麦PK、远程操控等场景。

WebRTC在SRS中需要单独配置rtc_server,且要求服务器开放UDP端口范围,很多初次使用者在这里踩坑:只开放了TCP 1935端口,导致WebRTC连接失败,WebRTC的并发能力受UDP端口数量和带宽限制,需要提前规划端口池。

SRT:公网弱网传输利器

SRT是近年来兴起的传输协议,基于UDP但加入了ARQ重传和抖动缓冲,SRS从5.0开始原生支持SRT,它的优势在于穿越NAT能力强,抗丢包能力远超RTMP,如果你经常在弱网环境下做推流(比如户外直播、跨国传输),SRT是RTMP的理想替代品。

GB28181:安防摄像头接入

SRS 5.0以后支持GB28181协议,可以直接对接海康、大华等安防摄像头的国标流,这个功能对智慧工地、雪亮工程等场景很有价值,配置方式是通过dvr_plan和gb28181相关配置项,将摄像头流转换为RTMP或WebRTC流输出。

SRS协议选型对比:延迟、并发与兼容性

不同协议在延迟、并发、兼容性上差异明显,选型时不能只看延迟数字,还要考虑终端类型和网络环境。

协议 传输层 延迟范围 适用场景 主要缺点
RTMP TCP 1-3秒 推流上行、PC端直播 浏览器不支持直播
HTTP-FLV TCP 1-2秒 PC网页直播 移动端兼容性一般
HLS HTTP 5-10秒 点播、移动端直播 延迟较高
WebRTC UDP 3-0.5秒 连麦、会议、监控 并发受UDP端口限制
SRT UDP 5-2秒 公网弱网推流 播放端需自定义支持

行业共识认为,协议选型的核心逻辑是:推流端优先用RTMP或SRT(取决于网络质量),播放端按终端类型分发PC用HTTP-FLV,移动端用HLS,低延迟互动用WebRTC,SRS的优势恰恰在于能同时输出这几种协议,不需要部署多套服务。

SRS和nginx-rtmp对比选型

很多人在搭建流媒体服务时,会在SRS和nginx-rtmp-module之间纠结,这个对比是技术选型的高频问题,直接看关键差异。

协议支持范围

nginx-rtmp只支持RTMP和HLS,且HLS分片机制比较简陋,SRS原生支持RTMP、HLS、HTTP-FLV、WebRTC、SRT、GB28181,覆盖面广得多,如果业务涉及WebRTC或SRT,nginx-rtmp直接出局。

并发性能表现

nginx-rtmp是单进程模型,虽然性能稳定,但多核CPU利用率不高,SRS采用多线程架构,在相同硬件条件下,并发能力明显更强,据多个社区公开压测对比,SRS在8核机器上能支撑的并发播放数是nginx-rtmp的数倍。

运维配置难度

nginx-rtmp的配置基于nginx语法,老运维上手快,SRS的配置项更多,但默认配置就能跑通基本直播,且提供HTTP API和命令行工具(./objs/srs)便于管理,对于复杂业务,SRS的可控性更高。

实际选型建议

  • 只是简单直播推流+播放,服务器资源有限,选nginx-rtmp就够了。
  • 业务涉及多协议分发、低延迟互动、安防接入,或对并发有较高要求,选SRS。
  • 团队熟悉nginx生态且不想学习新配置语法,nginx-rtmp更平滑。
  • 需要WebRTC或SRT支持,只能选SRS。

SRS协议配置实操:从推流到播放

理解了协议角色后,看看实际配置怎么操作,以下是一个典型的SRS 5.0配置示例,同时开启RTMP推流和HTTP-FLV、HLS播放。

listen 1935; max_connections 1000; srs_log_tank console; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } vhost __defaultVhost__ { hls { enabled on; hls_path ./objs/nginx/html; hls_fragment 2; hls_window 10; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } }

配置完成后,启动SRS服务,用OBS推流到rtmp://服务器IP/live/test,播放地址就有两个:

  • HTTP-FLV:http://服务器IP:8080/live/test.flv
  • HLS:http://服务器IP:8080/live/test.m3u8

这个配置直接覆盖了PC端和移动端的播放需求,如果还要开启WebRTC,需要额外配置rtc_server块并开放UDP端口。

SRS直播延迟优化参数

延迟是直播业务的核心指标,SRS的延迟主要由协议本身和配置参数共同决定,要优化延迟,重点调整以下几个参数:

  • hls_fragment:HLS分片时长,默认5秒,调低到2秒能显著降低HLS延迟。
  • gop_cache:GOP缓存,默认开启,关闭后延迟降低,但播放端首屏会变慢,需要权衡。
  • tcp_nodelay:开启后禁用Nagle算法,减少小包延迟。
  • srs_log_level:日志级别设为error,减少I/O开销。

实测配置示例(低延迟场景):

vhost __defaultVhost__ { tcp_nodelay on; min_latency on; play { gop_cache off; queue_length 10; } }

这套配置适合互动直播场景,延迟能压到1秒以内,但要注意关闭GOP缓存会增加服务器CPU消耗。

SRS WebRTC低延迟配置

WebRTC是SRS中配置最复杂的协议,涉及UDP端口规划、候选地址配置和证书问题。

rtc_server { enabled on; listen 8000; candidate $CANDIDATE; }

其中$CANDIDATE是服务器公网IP,如果服务器有内网IP和公网IP,必须显式指定公网IP,否则WebRTC连接会失败,UDP端口默认从8000开始递增,每个流占用约10个端口,并发100路需要预留1000个UDP端口。

还有一个常见的坑:WebRTC要求HTTPS环境(localhost除外),所以播放页面必须走HTTPS才能调起浏览器摄像头和麦克风权限。

SRS常见问题排查

协议多意味着排查链路长,最常见的几个问题如下。

推流成功但播放黑屏

优先检查SRS日志,看是否报no audio或no video错误,这类问题多半是编码器配置了B帧,SRS对B帧支持不完善,解决方法是OBS里关闭B帧,或使用x264的zerolatency预设。

WebRTC连不上

按顺序检查UDP端口是否放通、candidate是否配置为公网IP、播放页面是否HTTPS,这三项覆盖了大多数连接失败场景。

HLS播放卡顿

检查hls_fragment和hls_window的配合,分片太短会导致频繁请求,太长则延迟增大,一般fragment=2、window=6是折中选择。

SRS协议相关问题解答

SRS只支持RTMP推流吗?

不是,SRS除了RTMP,还支持SRT、GB28181、WebRTC推流,RTMP是默认和兼容性最好的推流方式,但SRT在弱网场景下表现更优,GB28181则用于安防摄像头直接接入。

SRS的WebRTC延迟能到多少?

SRS的WebRTC端到端延迟通常在300-500毫秒范围内,这是目前开源流媒体服务器中最好的水平,不过实际延迟受网络质量和服务器性能影响,公网传输时500毫秒以内都是正常表现。

SRS支持多少个并发连接?

并发数取决于服务器硬件和协议类型,RTMP和HTTP-FLV是TCP长连接,内存占用较大;WebRTC基于UDP,受端口数限制,统计显示,一台8核16G的云服务器,稳定支撑2000路HTTP-FLV播放500路WebRTC连接是比较常见的数据,具体以实际压测为准。

0