做视频业务这几年,开源流媒体几乎是绕不开的选项。不管是给监控摄像头做直播分发,还是给在线课程做点播回看,又或者是给内部系统加一路实时画面,开源的 SRS、ZLMediaKit、MediaMTX 这几个项目,基本能覆盖 80% 以上的需求。这篇文章我会从选型、部署、拉流测试、安全鉴权到开源许可证合规,把整个链路按我实际跑通的顺序讲一遍。你不一定需要全看懂每个源码,但跟着操作下来,至少能自己搭起一套能出画面的流媒体服务。适合刚上手视频方向的开发、运维,也适合想给个人项目加直播能力的独立开发者。
1. 开源流媒体自建方案怎么选:从需求反推技术栈
1.1 为什么自建,而不是直接买云服务
我遇到过不少团队,视频需求一出来就直奔云厂商的直播产品,结果账单和定制化限制撑过三个月就受不了了。云直播的优势确实明显,接入快、转码强、CDN 分发能力成熟,但缺点也很具体:计费复杂、出问题要提工单、协议覆盖不一定满足你的私有场景。
自建开源流媒体适合的场景我总结过几个:
- 内网环境,比如园区、工厂、学校,视频流不能出内网,云直播根本不可行。
- 私有化交付,客户明确要求整套系统部署在客户机房,你不可能把客户摄像头拉到第三方平台。
- 长期规模大、流量稳定,自建服务器带宽成本比按量付费低很多。
- 需要深度定制,比如要改协议、叠加自己的鉴权逻辑、对接内部账号体系。
当然,自建不是“免费”的。服务器成本、带宽成本、日常监控、故障处理都要自己扛。如果只是小规模测试或个人学习,开源项目完全够用;如果是商业项目,要把运维成本、资源规划、合规问题一起算进去,再决定到底自建还是买云。
1.2 主流开源项目对比与我的选型倾向
说到开源流媒体服务器,绕不开这几家:SRS、ZLMediaKit、MediaMTX、Janus,还有偏历史的 Nginx-RTMP 和 Red5。我前几年每个都折腾过,先给一张对比表,再讲我实际项目里怎么搭配。
| 项目 | 主要协议 | 延迟表现 | 许可证 | 适合场景 | 上手难度 |
|---|---|---|---|---|---|
| SRS | RTMP、HTTP-FLV、HLS、WebRTC、SRT | 低,WebRTC 可到几百毫秒 | MIT | 直播分发、录制、回源 | 中等,文档全 |
| ZLMediaKit | RTSP、RTMP、HLS、WebRTC、GB28181 | 低,WebRTC 支持好 | MIT | 摄像头接入、多协议流媒体网关 | 中等,需要自己编译 |
| MediaMTX | RTSP、RTMP、HLS、SRT、WebRTC | 低 | MIT | 轻量转流、调试工具 | 低 |
| Janus | WebRTC 为主 | 低,面向实时通信 | GPL-3.0 | 视频会议、SFU | 高 |
| Nginx-RTMP | RTMP、HLS | 中等 | BSD-2-Clause | 老项目、简单直播 | 中等,已基本停更 |
| Red5 | RTMP 为主 | 中等 | Apache-2.0 | Java 技术栈 | 高 |
我的选型逻辑很简单:
- 做直播分发,优先 SRS。它在中国社区活跃度最高,中文文档和群聊都很多,遇到问题搜得到答案。
- 要从摄像头取流并统一转成多种协议,优先 ZLMediaKit。它对 RTSP、GB28181 这类安防协议支持非常成熟,拉流、转流、推流一把梭。
- 只是临时把一路 RTSP 转给播放器看,MediaMTX 最省事,单二进制文件就能跑。
- 要做连麦、视频会议这种双向实时通信,再考虑 Janus 或 mediasoup。
我实际项目里经常是 SRS 和 ZLMediaKit 同时用:摄像头通过 ZLMediaKit 接入,统一成 RTMP 或 WebRTC 后,再转给 SRS 做公网分发和录制。这套组合的好处是各管一段,出问题隔离得开。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 服务器部署实操:SRS 和 ZLMediaKit 我都帮你跑了一遍
2.1 SRS 部署与最小配置
SRS 的部署方式非常灵活,最简单的是直接跑 Docker。我测试环境常用这一条命令:
bash复制docker run --rm -p 1935:1935 -p 1985:1985 -p 8080:8080 \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5
这样起来之后,RTMP 入口是 1935 端口,HTTP API 是 1985,HTTP 文件服务是 8080。
如果你要改配置或编译扩展,建议还是走源码编译。我一般从 Gitee 拉代码,速度稳定:
bash复制git clone -b 5.0release https://gitee.com/ossrs/srs.git
cd srs/trunk
./configure --full
make -j$(nproc)
./objs/srs -c conf/srs.conf
编译时间取决于机器性能,4 核机器大概十分钟左右。注意 configure 时如果缺依赖,先装一下 gcc、make、pkg-config、libssl-dev 这类基础包。
SRS 默认配置可以直接用,但如果你想验证 HLS 播放,可以看下 conf/srs.conf 里是否开了 HLS。我经常用的一个最
