news 2026/6/23 16:26:10

保姆级教程:在CentOS 7上用Docker和源码两种方式部署SRS 4.0流媒体服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在CentOS 7上用Docker和源码两种方式部署SRS 4.0流媒体服务器

CentOS 7下SRS 4.0流媒体服务器全栈部署指南:从Docker到源码深度实践

在视频直播和实时通信技术蓬勃发展的今天,搭建一个稳定高效的流媒体服务器已成为许多开发者和运维人员的刚需。SRS(Simple Realtime Server)作为国内开发者开源的高性能流媒体服务器,以其轻量级、低延迟和丰富的协议支持(RTMP/HTTP-FLV/HLS等)赢得了广泛关注。本文将带您深入探索在CentOS 7环境下部署SRS 4.0的两种主流方式——Docker容器化部署与源码编译安装,并附赠实战中积累的性能调优技巧和故障排查经验。

1. 环境准备与前置条件

在开始部署前,我们需要确保CentOS 7系统已经做好充分准备。建议使用最小化安装的CentOS 7.6或更高版本,这样可以减少不必要的软件冲突。首先更新系统基础组件:

yum update -y && yum install -y epel-release

对于防火墙配置,建议暂时关闭SELinux以避免权限问题:

setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

硬件资源配置方面,SRS对CPU和内存的要求取决于并发流数量和转码需求。以下是一个参考配置表:

应用场景推荐CPU推荐内存磁盘类型
测试/开发环境2核4GBSSD 50GB
中小型直播4核8GBSSD 100GB
大型直播/转码8核+16GB+NVMe 200GB+

提示:如果计划使用HLS协议,需要额外考虑磁盘I/O性能,因为HLS会产生大量切片文件。

2. Docker容器化部署方案

对于追求快速部署和隔离性的用户,Docker无疑是最佳选择。SRS官方提供了维护良好的Docker镜像,我们可以直接利用这些资源。

2.1 Docker环境安装

首先确保系统已安装Docker CE版本:

yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker && systemctl enable docker

验证Docker安装成功:

docker --version docker run hello-world

2.2 启动SRS容器

使用官方镜像启动SRS服务非常简单,以下命令会拉取最新稳定版镜像并启动容器:

docker run -d --name srs \ -p 1935:1935 -p 1985:1985 -p 8080:8080 \ -v /data/srs/conf:/usr/local/srs/conf \ -v /data/srs/logs:/usr/local/srs/objs \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4

参数说明:

  • -p 1935:1935:映射RTMP默认端口
  • -p 8080:8080:映射HTTP访问端口
  • -v:挂载配置和日志目录,便于持久化

2.3 容器化部署的进阶配置

对于生产环境,我们可能需要更精细的控制。以下是一个优化过的docker-compose.yml示例:

version: '3' services: srs: image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 container_name: srs restart: unless-stopped ports: - "1935:1935" - "1985:1985" - "8080:8080" volumes: - ./conf:/usr/local/srs/conf - ./logs:/usr/local/srs/objs environment: - SRS_LISTEN=1935 - SRS_HTTP_SERVER_PORT=8080 ulimits: nofile: soft: 65535 hard: 65535

启动服务:

docker-compose up -d

3. 源码编译安装方案

如果您需要深度定制SRS功能或进行二次开发,源码编译安装是更好的选择。这种方式虽然复杂,但可以获得更高的性能和更灵活的配置。

3.1 构建环境准备

安装必要的开发工具和依赖库:

yum groupinstall -y "Development Tools" yum install -y pcre-devel openssl-devel zlib-devel

克隆SRS源码仓库(建议使用国内镜像加速):

git clone https://gitee.com/winlinvip/srs.oschina.git srs && cd srs/trunk git checkout 4.0release

3.2 编译与安装

SRS使用自动化构建系统,编译过程非常简单:

./configure --with-ssl --with-hls --with-http-callback make -j$(nproc)

注意:-j$(nproc)参数会根据CPU核心数并行编译,显著加快构建速度。

编译完成后,可以选择安装到系统目录:

make install

或者直接运行(推荐开发环境使用):

./objs/srs -c conf/srs.conf

3.3 系统服务配置

为了让SRS随系统自动启动,我们需要创建systemd服务单元。创建文件/etc/systemd/system/srs.service

[Unit] Description=SRS Streaming Server After=network.target [Service] Type=forking ExecStart=/usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -QUIT $MAINPID Restart=always User=root WorkingDirectory=/usr/local/srs [Install] WantedBy=multi-user.target

启用并启动服务:

systemctl daemon-reload systemctl enable srs systemctl start srs

4. 部署验证与性能调优

无论采用哪种部署方式,部署完成后都需要验证服务是否正常运行,并根据实际需求进行调优。

4.1 基础功能验证

使用FFmpeg进行简单的推流测试:

ffmpeg -re -i example.mp4 -c copy -f flv rtmp://localhost/live/teststream

在另一终端使用FFplay播放:

ffplay rtmp://localhost/live/teststream

或者通过HTTP-FLV协议播放:

ffplay http://localhost:8080/live/teststream.flv

4.2 性能监控与调优

SRS提供了丰富的统计接口,通过访问http://localhost:1985/api/v1/summaries可以获取服务器状态。以下是一些关键性能指标:

指标名称健康阈值优化建议
连接数< 1000/核心增加节点或升级配置
CPU使用率< 70%优化转码参数或限制并发
内存占用< 80%检查内存泄漏或增加资源
网络吞吐< 80%带宽优化码率或增加带宽
推流延迟< 3秒调整GOP大小或启用低延迟模式

4.3 防火墙配置

为确保外部客户端可以访问,需要开放相关端口:

firewall-cmd --permanent --add-port=1935/tcp # RTMP firewall-cmd --permanent --add-port=8080/tcp # HTTP firewall-cmd --permanent --add-port=1985/tcp # API firewall-cmd --reload

4.4 常见问题排查

问题1:推流成功但无法播放

  • 检查防火墙设置
  • 验证播放器是否支持所选协议
  • 查看SRS日志tail -f objs/srs.log

问题2:高并发下服务不稳定

  • 调整系统文件描述符限制ulimit -n 65535
  • 优化内核参数net.core.somaxconnnet.ipv4.tcp_max_syn_backlog
  • 考虑使用多进程模式启动SRS

问题3:HLS延迟过高

  • 减少切片时长hls_fragment
  • 启用hls_cleanup自动清理旧切片
  • 考虑使用HTTP-FLV协议替代

5. 生产环境部署建议

经过基础部署和测试后,如果计划将SRS用于生产环境,还需要考虑以下关键因素:

5.1 高可用架构设计

单节点部署存在单点故障风险,建议采用以下架构:

  1. 边缘-源站架构:多个边缘节点就近服务用户,源站统一管理流
  2. 负载均衡:使用Nginx或专用负载均衡器分发请求
  3. 故障转移:配置监控和自动切换机制

5.2 安全防护措施

  • 鉴权设置:启用http_hookstoken_traverse进行推拉流鉴权
  • HTTPS支持:为HTTP-FLV/HLS配置SSL证书
  • IP限制:通过防火墙规则限制推流IP
  • 日志审计:定期归档和分析访问日志

5.3 监控与告警

完善的监控系统应包括:

  • 基础资源监控:CPU、内存、磁盘、网络
  • 服务状态监控:SRS进程、端口可用性
  • 业务指标监控:在线用户数、推流数、延迟情况
  • 告警机制:设置合理的阈值触发通知

推荐使用Prometheus+Grafana组合搭建监控平台,SRS原生支持Prometheus指标导出:

./objs/srs -c conf/prometheus.conf

6. 高级功能扩展

SRS不仅支持基础的流媒体服务,还提供了许多高级功能满足特定场景需求。

6.1 多协议转换

SRS可以实现不同流媒体协议间的转换,常见组合包括:

  • RTMP转HLS:用于移动端兼容
  • RTSP转RTMP:接入监控摄像头
  • WebRTC转RTMP:兼容传统播放器

配置示例(在srs.conf中添加):

vhost __defaultVhost__ { # RTMP转HLS hls { enabled on; hls_path ./objs/nginx/html; hls_fragment 10; hls_window 60; } # RTSP转RTMP rtsp_transport { enabled on; listen 554; } }

6.2 集群与边缘节点

对于大规模部署,可以配置多级缓存和边缘节点:

  1. 源站配置(srs.conf):
cluster { mode origin; coworkers 192.168.1.101:1935 192.168.1.102:1935; }
  1. 边缘节点配置:
cluster { mode edge; origin 192.168.1.100:1935; }

6.3 与OBS深度集成

OBS是流行的推流工具,与SRS配合使用时可以优化以下参数:

  • 视频设置
    • 分辨率:根据网络状况选择(720p/1080p)
    • 码率:建议2000-6000kbps
    • 关键帧间隔:2秒(影响延迟)
  • 输出设置
    • 编码预设:veryfast或faster
    • 速率控制:CBR(恒定码率)
    • 音频编码:AAC,128kbps

在OBS中配置服务器地址为:

rtmp://your-server-ip/live

流密钥可以设置为任意字符串用于区分不同流。

6.4 自动化运维脚本

为提高运维效率,可以准备一些常用脚本:

服务状态检查脚本(check_srs.sh)

#!/bin/bash SRS_PID=$(pgrep -f "srs -c") if [ -z "$SRS_PID" ]; then echo "SRS is not running!" exit 1 else echo "SRS is running (PID: $SRS_PID)" # 检查端口监听 netstat -tulnp | grep srs # 检查最近错误日志 tail -n 20 /usr/local/srs/objs/srs.log | grep -i error fi

日志切割脚本(logrotate_srs.conf)

/usr/local/srs/objs/srs.log { daily missingok rotate 30 compress delaycompress notifempty create 644 root root postrotate kill -USR1 $(cat /usr/local/srs/objs/srs.pid) endscript }

7. 实际应用案例分享

在最近的一个在线教育项目中,我们使用SRS搭建了整套直播系统。系统需要支持:

  • 教师端通过OBS推流(RTMP)
  • 学生端通过Web(HTTP-FLV)和移动端(HLS)观看
  • 实时录制功能
  • 观看人数统计

最终采用的配置方案如下:

服务器配置

  • 阿里云ECS,8核16GB,带宽100Mbps
  • CentOS 7.9操作系统
  • Docker Compose部署方式

srs.conf关键配置

listen 1935; max_connections 1000; daemon on; pid ./objs/srs.pid; chunk_size 4096; ff_log_dir ./objs; srs_log_tank file; srs_log_file ./objs/srs.log; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } vhost __defaultVhost__ { hls { enabled on; hls_path ./objs/nginx/html; hls_fragment 10; hls_window 120; hls_cleanup on; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } dvr { enabled on; dvr_path ./objs/nginx/html/[app]/[stream]/[timestamp].flv; dvr_plan segment; dvr_duration 1800; } }

性能表现

  • 延迟:HTTP-FLV约1-2秒,HLS约10-15秒
  • 并发支持:稳定支持800+同时在线
  • 资源占用:平均CPU 40%,内存4GB

遇到的挑战主要是初期HLS延迟过高,通过调整切片参数和启用HTTP-FLV协议解决了这个问题。另一个教训是没及时配置日志轮转,导致磁盘被日志文件占满。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 16:26:09

告别静态图标:用AntV G6 + Vue动态渲染节点状态图(实战篇)

动态数据驱动的节点可视化&#xff1a;AntV G6在Vue中的工程化实践 在运维监控系统或复杂流程管理场景中&#xff0c;静态的节点图标往往难以直观反映实时状态变化。想象一下&#xff0c;当服务器从在线变为离线时&#xff0c;如果拓扑图中的节点能自动从绿色图标切换为红色警告…

作者头像 李华
网站建设 2026/6/23 16:25:43

多模态情感识别技术:信息分解与优化实践

1. 多模态情感识别的核心挑战与解决思路在对话场景中准确识别人类情感一直是个复杂的技术难题。传统单模态方法&#xff08;如仅分析文本或语音&#xff09;往往难以捕捉情感的完整图景&#xff0c;因为人类情感表达天然具有多通道特性。举个生活中的例子&#xff1a;当有人说&…

作者头像 李华
网站建设 2026/6/15 13:02:23

别再只怪WPS吃内存了!从‘文档集群’设计聊聊办公软件的内存策略

WPS内存管理背后的工程哲学&#xff1a;从进程池到文档集群的架构演进办公室里总有人抱怨WPS"吃内存"&#xff0c;但很少有人思考过——为什么打开第三个文档时内存占用反而下降了&#xff1f;这背后藏着现代办公软件架构设计的精妙平衡。当我们用服务器集群的视角观…

作者头像 李华
网站建设 2026/6/19 7:32:15

SpringBoot+Vue旅游景点信息管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…

作者头像 李华
网站建设 2026/6/18 4:43:37

大厂盯上“电子吧唧”小生意:收割亚文化圈层还是营销错位?

大厂盯上“电子吧唧”小生意&#xff1a;是收割亚文化圈层&#xff0c;还是营销错位&#xff1f;5月25日&#xff0c;OPPO在发布会上推出OPPO Bubble潮玩自拍屏这款磁吸外置副屏&#xff0c;官方售价499元。这款可自定义壁纸、可当包挂、可辅助拍照的小型圆形屏幕被称为 "…

作者头像 李华