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 是否成功启动,可以打开:

http://localhost:8080/

或者执行命令:

# 查看SRS的状态
./etc/init.d/srs status

# 或者看SRS的日志
tail -f ./objs/srs.log

使用 OBS 串流:

服务器: rtmp://localhost/live
串流密钥: livestream

RTMP低延时配置

配置 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.conf
listen              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
iOSHLS
AndroidHLS / RTMP

HLS部署实例

创建配置:

conf/hls.conf
listen              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/livestream

HLS:

http://192.168.1.170:8080/live/livestream.m3u8

播放:

VLC:

http://192.168.1.170:8080/live/livestream.m3u8

常见问题

RTMP能看,HLS不能看

检查:

  1. HTTP服务是否启动
  2. 浏览器能否访问 m3u8
  3. 用 VLC 测试播放

RTMP和HLS内容不一致

通常原因:

  • 编码格式不正确
  • HLS 需要 H.264 + AAC

解决方法:

使用转码。

Transcode2HLS

注意

所有示例中的:

192.168.1.170

都需要替换为你的服务器 IP。

最后修改:2026 年 03 月 07 日
如果我的文章对你有用,请帮助小站能够存活下去( •̀ ω •́ )✧