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连接是比较常见的数据,具体以实际压测为准。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/728642.html

