搭建私人 HLS 服务器的三种技术选型

目录

  1. 选型前的三个问题
  2. Nginx-RTMP:老牌稳健派
  3. SRS:一站式全能选手
  4. FFmpeg 切片 + 静态托管:最简主义
  5. 按场景对号入座

选型前的三个问题

动手之前先回答:播直播还是点播?观众是什么量级?愿意投入多少维护精力?三个答案凑齐,下面的方案基本能自己浮出来。

Nginx-RTMP:老牌稳健派

给 Nginx 挂上 RTMP 模块,推流进来自动切成 HLS 文件对外服务:

rtmp {
  server {
    listen 1935;
    application mylive {
      live on;
      hls on;
      hls_path /data/hls;
      hls_fragment 4s;
      hls_cleanup on;
    }
  }
}

OBS 把推流地址填成 rtmp://服务器IP:1935/mylive 即可开播。这套组合内存占用小、行为可预期;代价是配置项繁多,且官方主线多年未大更新,遇到疑难要做好翻文档的准备。

SRS:一站式全能选手

SRS 把推流接收、切片、HTTP 分发乃至 WebRTC 低延迟输出打包成一个二进制,几十行配置就能跑起来。想同时输出 HTTP-FLV 与 HLS,或者将来要做连麦,它省心得多,中文资料与社区问答也相当齐全。

FFmpeg 切片 + 静态托管:最简主义

点播场景根本不需要常驻流媒体进程——离线切片,静态分发:

ffmpeg -i movie.mp4 -c:v libx264 -c:a aac -f hls \
  -hls_time 8 -hls_list_size 0 -hls_segment_filename "seg%03d.ts" movie.m3u8

把生成的 m3u8 与 TS 交给任意静态服务器或对象存储加 CDN,播放器即可拉取。这套架构没有状态、几乎不会宕机,也是公网分发成本最低的方式。

按场景对号入座

搭好之后想压一压延迟,请移步 HLS 延迟优化;视频源做好后,可到 M3U8Lab 首页 快速验证播放是否正常。播放列表里各标签的含义,参考 EXT-X 标签拆解。