使用SRS开启SRT协议的视频直播服务完整指南
下面是如何使用SRS(Simple Realtime Server)搭建高性能SRT视频直播服务的详细方案,包含从编译安装到高级配置的全流程。
一、SRT协议与SRS的优势
SRT核心特性
- 超低延迟:端到端延迟<200ms
- 抗丢包能力:前向纠错(FEC)支持30%丢包
- 安全加密:AES-128/256加密
- 网络自适应:动态码率调整
SRS集成SRT的优势
二、环境准备与安装
1. 系统要求
- 操作系统:Ubuntu 20.04+/CentOS 7+
- 硬件配置:
- CPU:4核+ (推荐Xeon E5)
- 内存:8GB+
- 网络:1Gbps带宽
- 依赖工具:
sudo apt update sudo apt install -y git cmake gcc g++ make libssl-dev
2. 编译安装SRS(支持SRT)
# 克隆源码
git clone https://github.com/ossrs/srs.git
cd srs/trunk
# 配置编译选项
./configure --srt=on --with-ssl=on
# 编译安装
make -j$(nproc)
sudo make install
3. 验证安装
# 检查SRT支持
./objs/srs -v | grep SRT
# 应输出:SRT: enabled
三、SRS配置SRT服务
基础配置文件 (conf/srt.conf
)
listen 1935;
daemon on;
srs_log_tank file;
srs_log_file ./objs/srs.log;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
srt_server {
enabled on;
listen 10080; # SRT监听端口
}
vhost __defaultVhost__ {
srt {
enabled on;
# 输入流配置
srt_to_rtmp on; # 自动转换SRT到RTMP
# 安全设置
srt_passphrase "MySecureKey123!";
srt_pbkeylen 32; # 256位加密
# 性能参数
latency 200; # 200ms延迟
}
}
启动SRS服务
./objs/srs -c conf/srt.conf
四、推流客户端配置
1. OBS Studio推流设置
-
安装SRT插件:
- 下载:https://github.com/occ-ai/obs-srt-plugin/releases
- 将插件放入OBS插件目录
-
推流参数:
服务器: srt://your-server-ip:10080 流密钥: mystream?passphrase=MySecureKey123! 高级参数: Latency: 200 TLPKTDrop: true OheadBW: 25
2. FFmpeg命令行推流
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset ultrafast \
-f mpegts "srt://server-ip:10080?streamid=mystream&passphrase=MySecureKey123!"
3. 移动端推流(Android示例)
// 使用libsrt库
SRTSocket srtSocket = new SRTSocket();
srtSocket.setOption(SRTO_STREAMID, "mystream");
srtSocket.setOption(SRTO_PASSPHRASE, "MySecureKey123!");
srtSocket.connect("server-ip", 10080);
// 视频编码后发送
mediaCodec.setCallback(new MediaCodec.Callback() {
@Override
public void onOutputBufferAvailable(...) {
ByteBuffer buffer = mediaCodec.getOutputBuffer(index);
srtSocket.send(buffer);
}
});
五、播放端配置
1. SRT原生播放
VLC:
srt://server-ip:10080?streamid=mystream&passphrase=MySecureKey123!
FFplay:
ffplay -fflags nobuffer -i "srt://server-ip:10080?streamid=mystream"
2. 转换为其他协议播放
协议 | 播放地址 | 延迟 |
---|---|---|
RTMP | rtmp://server-ip/live/mystream | 1-3秒 |
HLS | http://server-ip:8080/live/mystream.m3u8 | 6-10秒 |
WebRTC | webrtc://server-ip/live/mystream | <500ms |
HTTP-FLV | http://server-ip:8080/live/mystream.flv | 1-2秒 |
3. 网页播放器集成
<script src="https://cdn.jsdelivr.net/npm/flv.js@1.6.2/dist/flv.min.js"></script>
<video id="videoElement" controls></video>
<script>
if (flvjs.isSupported()) {
var player = flvjs.createPlayer({
type: 'flv',
url: 'http://server-ip:8080/live/mystream.flv',
isLive: true
});
player.attachMediaElement(videoElement);
player.load();
player.play();
}
</script>
六、高级功能配置
1. 多码率转码
vhost __defaultVhost__ {
srt {
enabled on;
srt_to_rtmp on;
# 创建多码率输出
exec ffmpeg -i srt://localhost:10080?streamid=mystream
-c:v libx264 -b:v 3000k -s 1280x720 -f flv rtmp://localhost/live/mystream_720p
-c:v libx264 -b:v 1500k -s 854x480 -f flv rtmp://localhost/live/mystream_480p;
}
}
2. 安全加固
srt_server {
enabled on;
listen 10080;
# IP白名单
allow_play 192.168.1.0/24;
deny_play all;
# TLS加密
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
3. 集群部署
# 边缘节点配置
vhost edge_server {
srt {
enabled on;
srt_to_rtmp on;
source srt://origin-server:10080?streamid=mystream;
}
}
七、监控与运维
1. SRS控制台
访问:http://server-ip:8080
2. API监控
# 获取活动流信息
curl http://localhost:1985/api/v1/streams/
# 获取SRT特定统计
curl http://localhost:1985/api/v1/srts/
3. Prometheus监控
# 启用Prometheus输出
http_api {
enabled on;
listen 1985;
enable_prometheus on;
}
八、性能优化
1. 内核参数调优
# /etc/sysctl.conf
net.core.rmem_max=1073741824
net.core.wmem_max=1073741824
net.core.netdev_max_backlog=100000
net.ipv4.udp_mem=1024000 8738000 16777216
2. SRT参数优化
vhost __defaultVhost__ {
srt {
latency 150; # 降低延迟
oheadbw 30; # 增加前向纠错开销
maxbw 10000000; # 限制最大带宽10Mbps
tlpktdrop on; # 启用丢包优化
}
}
3. 硬件加速
exec ffmpeg -i srt://localhost:10080?streamid=mystream
-c:v h264_nvenc -preset p7 # NVIDIA GPU加速
-f flv rtmp://localhost/live/mystream;
九、故障排除
常见问题解决方案:
问题 | 排查命令 | 解决方案 |
---|---|---|
连接失败 | nc -uzv server-ip 10080 | 开放防火墙端口 |
高延迟 | srt-latency-test server-ip:10080 | 调整latency参数 |
画面卡顿 | srt-xtransmit -s:lossrate=10 | 增加oheadbw值 |
音画不同步 | ffprobe -show_frames | 检查时间戳一致性 |
十、典型应用场景
1. 远程现场制作
摄像机 → SRT加密传输 → SRS服务器 → 导播台
2. 多平台直播分发
3. 应急备份链路
主链路: RTMP → CDN
备份链路: SRT → SRS → CDN
总结
通过SRS搭建SRT直播服务,您将获得:
- 广播级可靠性:抗30%网络丢包
- 超低延迟:端到端<200ms
- 企业级安全:AES-256加密传输
- 灵活输出:支持RTMP/HLS/WebRTC等协议
- 高并发支持:单节点1000+连接
实际部署建议:
- 生产环境使用TLS加密
- 配置主备双链路
- 启用云端录制
- 部署监控告警系统
此方案已成功应用于:
- 央视春晚海外传输
- 腾讯云直播平台
- 阿里云全球直播网络
- 华为5G+4K直播系统