Linux环境下安装SRS流媒体服务器实现视频直播推流
SRS(Simple Realtime Server)是一款高性能的开源流媒体服务器,支持RTMP、WebRTC、HLS、HTTP-FLV等多种协议。以下是在Linux环境中部署SRS实现视频直播推流的详细指南。
一、安装前的准备
系统要求
- 操作系统:Ubuntu 20.04/22.04或CentOS 7/8
- 硬件要求:
- CPU:至少2核
- 内存:≥1GB
- 硬盘:≥10GB可用空间
- 网络要求:
- 开放端口:1935 (RTMP), 1985 (API), 8080 (HTTP)
- 带宽:≥10Mbps
安装必要依赖
# Ubuntu/Debian
sudo apt update
sudo apt install -y git build-essential automake libtool pkg-config
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install -y git autoconf automake libtool
二、安装SRS流媒体服务器
方法1:源码编译安装(推荐)
# 1. 克隆源码
git clone https://github.com/ossrs/srs.git
cd srs/trunk
# 2. 配置编译选项(典型配置)
./configure --prefix=/usr/local/srs \
--with-http \
--with-http-server \
--with-ffmpeg \
--with-transcode \
--with-ingest \
--with-ssl
# 3. 编译并安装
make -j$(nproc)
sudo make install
# 4. 创建系统服务
sudo cp /usr/local/srs/etc/init.d/srs /etc/init.d/
sudo chmod +x /etc/init.d/srs
sudo systemctl daemon-reload
方法2:使用预编译包(快速安装)
# Ubuntu/Debian
curl -s https://ossrs.net/ubuntu | bash
sudo apt install -y srs
# CentOS/RHEL
curl -s https://ossrs.net/centos | bash
sudo yum install -y srs
三、配置SRS服务器
基础配置文件示例
sudo vim /usr/local/srs/conf/srs.conf
listen 1935;
max_connections 1000;
daemon on;
srs_log_tank file;
srs_log_file /var/log/srs.log;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
http_api {
enabled on;
listen 1985;
}
vhost __defaultVhost__ {
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 10;
hls_window 60;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}
启动SRS服务
# 源码安装
sudo /usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf
# 包管理器安装
sudo systemctl start srs
验证安装
# 检查进程
ps aux | grep srs
# 检查端口
sudo netstat -tuln | grep -E '1935|8080|1985'
# 通过API验证
curl http://localhost:1985/api/v1/versions
四、推流与播放实战
1. 使用FFmpeg推流
# 测试视频推流
ffmpeg -re -i test.mp4 -c:v copy -c:a copy -f flv rtmp://localhost/live/test
# 摄像头实时推流(Linux)
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -f flv rtmp://localhost/live/camera
# 电脑屏幕捕获
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -c:v libx264 -f flv rtmp://localhost/live/screen
2. 使用OBS Studio推流
- 下载安装OBS Studio
- 设置 → 推流:
- 服务:自定义
- 服务器:
rtmp://your_server_ip/live
- 串流密钥:自定义名称(如
obs_stream
)
- 添加视频源(显示器捕获/视频采集设备)
- 点击"开始推流"
3. 播放地址
协议 | 播放地址示例 | 适用场景 |
---|---|---|
RTMP | rtmp://server_ip/live/test | 低延迟播放器 |
HTTP-FLV | http://server_ip:8080/live/test.flv | 浏览器(flv.js) |
HLS | http://server_ip:8080/live/test.m3u8 | 跨平台兼容播放 |
WebRTC | webrtc://server_ip/live/test | 低延迟实时互动 |
4. 播放测试方法
# VLC播放器
vlc rtmp://localhost/live/test
# FFplay播放
ffplay -fflags nobuffer rtmp://localhost/live/test # 低延迟模式
ffplay http://localhost:8080/live/test.flv # HTTP-FLV
# 网页播放
http://server_ip:8080/players/srs_player.html
五、高级功能配置
1. 开启HTTPS安全传输
http_server {
enabled on;
listen 8080;
ssl on;
ssl_listen 443;
ssl_certificate srs.crt;
ssl_certificate_key srs.key;
}
2. 录制直播流
vhost __defaultVhost__ {
dvr {
enabled on;
dvr_path /data/rec/[app]/[stream].[timestamp].mp4;
dvr_plan session;
}
}
3. 转码配置
vhost __defaultVhost__ {
transcode {
enabled on;
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine example {
enabled on;
vfilter {
}
vcodec libx264;
vbitrate 500;
vfps 25;
vwidth 768;
vheight 432;
vthreads 4;
vprofile baseline;
vpreset superfast;
acodec libfdk_aac;
abitrate 70;
asample_rate 44100;
achannels 2;
aparams {
}
output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
}
}
}
4. 安全鉴权
vhost security_vhost {
security {
enabled on;
allow publish 127.0.0.1; # 允许本地推流
deny publish all; # 禁止其他IP推流
allow play all; # 允许所有播放
}
}
六、监控与管理
SRS控制台访问
http://server_ip:8080
API接口使用示例
# 获取服务器状态
curl http://localhost:1985/api/v1/summaries
# 查看当前流信息
curl http://localhost:1985/api/v1/streams
# 踢掉指定客户端
curl "http://localhost:1985/api/v1/clients/123456?action=kick"
性能监控关键指标
# 实时资源使用情况
top -p $(pgrep -f srs)
# 网络流量监控
iftop -i eth0 -P
# 磁盘IO监控
iostat -x 1
七、故障排除与优化
常见问题解决
问题 | 解决方案 |
---|---|
推流连接失败 | 检查防火墙设置:sudo ufw allow 1935,8080,1985 |
VLC播放卡顿 | 减小播放缓冲:工具→首选项→输入/编解码器→网络缓存时间设为300ms |
高延迟(>3秒) | 启用低延迟模式:OBS设置→输出→低延迟模式;VLC使用低延迟配置 |
HLS播放不更新 | 检查hls_fragment设置,推荐5-10秒;清理浏览器缓存 |
CPU使用率过高 | 降低分辨率;使用硬件加速编码;减少转码任务 |
性能优化建议
# 1. 增加工作进程
worker_processes 4;
# 2. 提高网络缓冲区
sndbuf 10485760;
rcvbuf 10485760;
# 3. 启用TCP_NODELAY
tcp_nodelay on;
# 4. 优化HLS配置
hls {
hls_fragment 5; # 分片时长(秒)
hls_window 60; # 总共保留时长
hls_cleanup on; # 自动清理旧文件
}
# 5. 限制并发连接数
max_connections 1000;
八、生产环境建议
部署架构示例
最佳实践
-
安全防护:
- 配置防火墙白名单
- 启用推流鉴权
- 定期更新SRS版本
-
高可用部署:
# Keepalived配置示例 vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 virtual_ipaddress { 192.168.1.100 } }
-
监控告警:
- 使用Prometheus + Grafana监控SRS
- 设置关键指标阈值告警(CPU、内存、流量)
-
日志管理:
# 日志分割配置 /var/log/srs.log { daily rotate 30 compress missingok notifempty }
九、扩展功能
1. WebRTC支持
rtc_server {
enabled on;
listen 8000;
candidate $CANDIDATE; # 替换为服务器公网IP
}
vhost __defaultVhost__ {
rtc {
enabled on;
rtmp_to_rtc on;
rtc_to_rtmp on;
}
}
2. SRT协议支持
./configure --with-srt
3. 集群部署
# 源站配置
origin_cluster on;
vhost origin {
cluster {
mode remote;
origin 192.168.1.100:1935; # 边缘节点
}
}
十、完整测试脚本
#!/bin/bash
# 启动SRS服务器
/usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf &
# 等待服务器启动
sleep 2
# 推流测试
ffmpeg -re -f lavfi -i testsrc=size=1280x720:rate=30 -c:v libx264 -f flv rtmp://localhost/live/test &
# 播放测试
ffplay -fflags nobuffer rtmp://localhost/live/test &
# 监控
while true; do
clear
curl -s http://localhost:1985/api/v1/summaries | jq
sleep 1
done
总结
通过以上步骤,您已经成功在Linux环境下部署了SRS流媒体服务器,并实现了多种方式的推流和播放。SRS作为一款高性能的开源流媒体服务器,具有以下优势:
- 协议支持全面:RTMP、HTTP-FLV、HLS、WebRTC等
- 性能卓越:可支持上千并发,毫秒级延迟
- 扩展性强:支持集群部署、转码、录制等高级功能
- 易于管理:提供Web控制台和RESTful API
生产环境建议:
- 使用Docker容器化部署
- 配合Nginx实现负载均衡
- 启用监控告警系统
- 定期备份重要配置
对于业务关键型应用,可考虑SRS的商业支持服务,获取专业技术支持和高级功能。