请注意,本文编写于 1299 天前,最后修改于 5 天前,其中某些信息可能已经过时。
SRS(Simple Rtmp Server)是 MIT 协议的开源流媒体服务器项目。
下载源码,推荐用 CentOS7 系统:
git clone -b 3.0release https://gitee.com/ossrs/srs.git编译,注意需要切换到 srs/trunk 目录:
cd srs/trunk
./configure
make启动服务器:
./objs/srs -c conf/realtime.conf检查 SRS 是否成功启动,可以打开:
或者执行命令:
# 查看SRS的状态
./etc/init.d/srs status
# 或者看SRS的日志
tail -f ./objs/srs.log使用 OBS 串流:
服务器: rtmp://localhost/live
串流密钥: livestreamRTMP低延时配置
配置 SRS 为 Realtime 模式,使用 RTMP 可以将延迟降低到 0.8~3 秒。
适合:
- 视频会议
- 实时直播
- 对延迟要求不特别苛刻的场景
详细配置参考:
https://gitee.com/ossrs/srs/wikis/v3_CN_LowLatency
假设服务器 IP:
192.168.1.170第一步:获取 SRS
git clone https://github.com/ossrs/srs
cd srs/trunk如果已经有代码:
git pull第二步:编译 SRS
./configure && make第三步:编写配置文件
创建:
conf/realtime.conflisten 1935;
max_connections 1000;
vhost __defaultVhost__ {
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
mw_latency 100;
}
publish {
mr off;
}
}第四步:启动 SRS
./objs/srs -c conf/realtime.conf第五步:推流
使用 FFmpeg:
for((;;)); do \
./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
-vcodec copy -acodec copy \
-f flv -y rtmp://192.168.1.170/live/livestream; \
sleep 1; \
done或 FMLE:
FMS URL: rtmp://192.168.1.170/live
Stream: livestream第六步:观看 RTMP
RTMP 地址:
rtmp://192.168.1.170/live/livestream⚠ 不建议使用 VLC(延迟很高)
可以使用 SRS 在线播放器:
http://ossrs.net/srs.release/trunk/research/players/srs_player.html
分发方式比较
互联网常见流媒体分发方式:
- RTMP
- HLS
- HTTP Stream
其他较少用于互联网的方式:
- UDP
- RTSP
- P2P
RTMP
优点:
- 实时性高(约 3 秒以内)
- 支持加密(RTMPS / RTMPE)
- 编码器支持广
- 稳定性高
- 易监控
- 支持容错
缺点:
- 协议复杂
- CPU 占用高
- Cache 困难
HTTP
HTTP 本质是文件分发。
优点:
- 性能高
- 穿防火墙能力强
- 服务器生态成熟
缺点:
- 延迟高
- 移动端原生支持较差
HLS
Apple 提出的标准。
优点:
- HTTP 传输
- iOS 原生支持
- 兼容性好
缺点:
- 延迟高(10 秒以上)
- 产生大量小文件
推荐架构
最佳实践:
- 编码器 → RTMP
- 流媒体接入 → RTMP
- 内部分发 → RTMP
播放:
| 场景 | 推荐 |
|---|---|
| PC直播(低延迟) | RTMP |
| PC直播(普通) | RTMP / HLS |
| PC点播 | HTTP / HLS |
| iOS | HLS |
| Android | HLS / RTMP |
HLS部署实例
创建配置:
conf/hls.conflisten 1935;
max_connections 1000;
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 60;
}
}启动:
./objs/srs -c conf/hls.conf推流:
for((;;)); do \
./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
-vcodec copy -acodec copy \
-f flv -y rtmp://192.168.1.170/live/livestream; \
sleep 1; \
done生成地址:
RTMP:
rtmp://192.168.1.170/live/livestreamHLS:
http://192.168.1.170:8080/live/livestream.m3u8播放:
VLC:
http://192.168.1.170:8080/live/livestream.m3u8常见问题
RTMP能看,HLS不能看
检查:
- HTTP服务是否启动
- 浏览器能否访问 m3u8
- 用 VLC 测试播放
RTMP和HLS内容不一致
通常原因:
- 编码格式不正确
- HLS 需要 H.264 + AAC
解决方法:
使用转码。
Transcode2HLS注意
所有示例中的:
192.168.1.170都需要替换为你的服务器 IP。
のBlog