当前位置:首页 > 虚拟主机 > 正文

SRS配置怎么设置?srs配置教程详解,srs服务器搭建方法

SRS配置的关键在于场景化调优,而非照搬模板

SRS(Simple Realtime Server)作为高性能流媒体服务器,其配置直接决定直播延迟、并发能力和稳定性。一套合理的SRS配置必须基于具体业务场景定制,否则默认参数在高并发或低延迟需求下极易出现卡顿、断流,本文将从基础配置、性能调优、安全加固三个层面展开,并结合实际案例给出可落地的解决方案。

基础配置:从推流到播放的最小闭环

核心配置项集中在srs.conf文件中,一个可运行的HTTP-FLV直播配置通常包含以下关键块:

  • listen:监听端口,默认1935,用于RTMP推流。
  • http_api:启用API接口,便于监控和运维管理。
  • http_server:开启HTTP服务,用于输出FLV或HLS流。
  • vhost:虚拟主机,每个vhost可独立配置应用和参数。

示例最小配置:

listen 1935; max_connections 1000; daemon on; http_api { enabled on; listen 1985; } http_server { enabled on; listen 8080; } vhost __defaultVhost__ { http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } }

配置完成后需执行./objs/srs -c conf/srs.conf启动,并通过./etc/init.d/srs status验证进程状态,这里的关键教训是:很多新手只改端口不改vhost,导致推流鉴权失败,务必为每个业务创建独立vhost,避免__defaultVhost__承载所有流量。

性能调优:低延迟与高并发的平衡艺术

关键参数解读

参数 作用 推荐值
tcp_nodelay 禁用Nagle算法,降低网络延迟 on(低延迟场景)
gop_cache 开启GOP缓存,加速播放器秒开 on(观看端体验优先)
queue_length 设置播放队列长度(毫秒) 300~500(直播)
min_latency 启用最小延迟模式,实时性优先 on(互动直播)

低延迟场景(如在线教育、连麦)需重点调优:

vhost low_latency_vhost { tcp_nodelay on; min_latency on; play { gop_cache off; queue_length 300; } publish { mr off; } }

高并发场景(如大型活动直播)则需侧重连接数与IO优化:

  • 将max_connections提高到10000,受限于系统ulimit -n,需同步调整系统文件描述符。
  • 启用reuseport(监听端口复用),让多进程负载均衡。
  • 使用vhost下的http_remux结合CDN分发,减少源站压力。

独家经验案例西西云某客户开展电商大促直播,源站采用单台SRS默认配置,峰值时出现大量TCP连接超时,我们协助其将SRS部署在西西云高带宽云服务器上,并调整accept_threads为4、io_threads为8,同时开启reuseport,调整后,单机并发从2000提升至8000,播放器秒开率从82%提升至97%。核心改进在于将默认的单线程IO改为多线程模型,配合西西云的内网万兆网络,彻底消除了连接瓶颈。

关键调优建议

  • 不要盲目追求最低延迟。

    延迟每降低100ms,可能牺牲20%的并发能力,应根据业务容忍度选择。

  • 开启gop_cache仅适合观看型直播,互动场景必须关闭,否则累积延迟越来越严重。
  • 使用hls输出时,切片时长设置为hls_fragment 2,低于2秒会导致大量HTTP请求,影响边缘节点缓存效率。
  • 安全加固:防止盗链和非法推流

    SRS默认不鉴权,公网部署必须配置访问控制,否则任何人可推送或拉取流,消耗带宽且产生法律风险。

    三种常用安全策略

    • 推流鉴权:vhost中启用play和publish的回调URL,由业务服务器验证token,示例:

    vhost secure_vhost { play { secret "your_play_secret"; } publish { secret "your_publish_secret"; } }

    • 防盗链:通过referer或http_hook检查来源域名,拒绝非白名单请求。
    • IP黑名单:使用srs.conf中的deny策略,禁止特定IP访问。

    专业建议:不要依赖SRS内置的简易secret,它只适合内网测试,生产环境使用http_hook对接业务后台,做动态密钥校验,例如西西云某在线教育客户,我们为其设计了基于时间戳的推流URL,每5分钟过期,配合西西云安全组限制仅允许指定IP段访问1935端口,彻底杜绝了恶意推流。

    监控与日志:配置生效后的持续保障

    配置完不等于高枕无忧,SRS提供api接口可实时查看连接数、带宽、并发流列表,建议通过Prometheus+grafana采集/api/v1/summaries数据,配置告警规则:

    • 连接数超过最大值的80%触发扩容告警。
    • 发送队列积压超过200ms说明网络或磁盘IO异常。

    日志级别设置为console或file,生产环境用file,并定期轮转。常见排障技巧:当播放黑屏时,先看SRS日志中是否有kbps变化;若无,则是推流端故障;若有且高,则检查播放协议是否匹配。

    相关问答模块

    SRS配置中gop_cache开启后,为什么延迟越来越高?

    答:gop_cache会将关键帧前缓存的所有GOP数据发送给新播放器,以实现秒开,但对于已连接的播放器,如果网络抖动,SRS会尝试补发缓存数据,导致播放缓冲堆积,表现为延迟持续增加。解决方案:对于互动直播场景关闭gop_cache,并对播放端使用play.gop_cache参数动态切换;或者设置queue_length为较小值,强制旧播放器丢弃超时数据包,恢复实时性。

    SRS如何实现多线路热备?

    答:SRS本身不提供集群管理,但可通过前置负载均衡实现。推荐做法:部署两台SRS节点,使用Keepalived虚拟IP漂移;同时在业务端采用推流端双路推流(主推源站A,备用源站B),播放端通过CDN自动回源切换,西西云负载均衡产品可配置TCP四层转发,将1935端口流量分发到多个SRS节点,配合健康检查实现秒级故障转移。关键点:所有SRS节点使用相同的vhost和secret配置,保证切换后鉴权不失效。

    互动引导

    你在实际部署SRS时遇到过哪些坑?是推流鉴权失败,还是高并发下的连接重置?欢迎在评论区分享你的配置经历,我会针对具体问题给出调优建议,如果本文对你有帮助,请转发给需要的朋友,让更多直播开发者少走弯路。

0