做流媒体开发这几年,我几乎把市面上的开源方案摸了个遍。如果你正打算给项目加直播、监控上云、在线课堂或者低延迟互动能力,又不想一上来就买商业CDN产品,那开源流媒体这条路线绝对值得认真看。今天不聊虚的,结合我自己实际部署过、踩过坑、现在还跑在生产环境的方案,围绕 SRS、ZLMediaKit、MediaMTX 这几个主流开源项目,把整个链路从选型到落地完整梳理一遍,顺便把 RTSP、RTMP、HLS、HTTP-FLV、WebRTC 这些协议在什么场景该用哪个讲清楚。
1. 开源流媒体生态全景:为什么值得把精力押在这里
1.1 从闭源黑盒到开源可选:流媒体不再是巨头的专利
早些年提到流媒体服务器,大家第一反应是商业方案或者大厂自研。中小企业想搞直播,要么买云厂商的标准化产品,要么直接走高额定制路线,成本高,灵活性还差。但最近几年开源流媒体服务器的成熟度已经高到可以挑大梁了,尤其在国内社区里,SRS 和 ZLMediaKit 这两个项目几乎成了自建流媒体的事实标准。它们不是玩具,是真的能支撑几万路并发、稳定跑几个月的生产级系统。
为什么开源流媒体能这么快追上商业产品?核心在于两点:一是音视频协议栈本身已经标准化,RTMP、HLS、HTTP-FLV、WebRTC 这些协议都有公开规范,给了开源项目明确的实现目标;二是社区贡献者足够多,FFmpeg、OBS Studio、VLC 这些老牌开源项目已经把推流端、播放端的用户习惯培养起来了,服务器端顺势补位,自然就水到渠成。
1.2 开源流媒体到底能做什么:直播、监控、课堂、连麦全覆盖
我在实际项目中用开源流媒体解决过的场景大概有四类。
第一类是传统直播业务。游戏直播、活动直播、企业内部培训直播,用 SRS 做直播源站,推流端用 OBS Studio,播放端走 HLS 或者 HTTP-FLV,加上一个简单的 Web 管理后台,一套完整直播系统就起来了。这套方案在数千人同时在线的规模下,单台服务器完全扛得住。
第二类是安防监控上云。摄像头普遍走 RTSP 协议,但 RTSP 不适合直接在网页里播放,所以需要把 RTSP 拉流转成 HLS 或者 HTTP-FLV。这个场景 ZLMediaKit 特别擅长,它原生支持做 RTSP 拉流代理,配合 FFmpeg 转码,能把海康、大华这类摄像头的画面直接变成浏览器可播的流。
第三类是在线课堂和低延迟互动。这类场景对延迟要求很高,传统 HLS 五六秒的延迟根本不行。用 SRS 或 OvenMediaEngine 的 WebRTC 出入口,可以把延迟压到 1 秒以内,互动问答、双向连麦都能做。
第四类是内部系统的音视频处理能力。比如做 AI 识别、录制存档、多平台分发,先用开源流媒体统一接入,再挂 FFmpeg 做转码和抽帧,整个管线都在自己手里,可控性很强。
1.3 一个典型的开源流媒体链路长什么样
把上面的场景抽象出来,一条典型的开源流媒体链路大概是这样的:推流端(OBS、FFmpeg、摄像头)通过 RTMP 或 RTSP 把流推到流媒体服务器;服务器负责协议转换、转码、录制、分发;播放端通过 HTTP-FLV、HLS 或 WebRTC 拉流播放。
因为整条链路的核心部件都是开源的,所以任何一个环节都能替换。推流端不想用 OBS 可以用 FFmpeg,服务器不想用 SRS 可以用 ZLMediaKit,播放器不想用 VLC 可以用网页上的 flv.js 或 hls.js。这种"拼装感"正是开源生态最大的价值:你不必忠于某个厂商,只需要忠于标准协议。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件选型:SRS、ZLMediaKit、MediaMTX怎么选
2.1 SRS:直播场景的常青树
SRS 全称 Simple Realtime Server,作者 winlinvip,是 GitHub 上非常活跃的国产开源流媒体项目。它的定位非常精准:直播服务器。RTMP 推流、HTTP-FLV 分发、HLS 切片、WebRTC 播放,这些核心功能开箱即用,配置文件的风格也清晰,学习成本不高。
我最早接触 SRS 是 v2 时代,当时用它做 RTMP 直播,稳定跑了一年多没重启过,后来升级到 v4,接触了 WebRTC 入口,又解决了低延迟互动的需求。现在 SRS 主推 v5 和 v6,底层架构调整较大,性能也更强。如果你需要一个功能全面、社区活跃、文档完善的直播服务器,SRS 是第一选择。
SRS 的部署方式很多样,最简单的是 Docker 一条命令拉起来,想深入研究源码也可以用编译方式安装。它支持通过 HTTP API 做流状态查询和控制,这对集成到现有业务系统特别友好。比如你可以定时调用 API 拉取在线流列表,自动检测断流后重启推流。
2.2 ZLMediaKit:安防与协议兜底利器
如果说 SRS 是直播小能手,那 ZLMediaKit 就是协议缝合怪加安防大管家。这个项目基于 C++11 开发,设计目标就是"一个入口,多协议输出"。它原生支持 RTSP、RTMP、HLS、HTTP-FLV、WebSocket-FLV 的输入输出,还内置了 GB28181 国标接入能力,这让它在安防监控领域占据了很强的话语权。
我记得有一次接一个智慧园区的项目,园区有十几个摄像头,协议既有 RTSP 也有 GB28181,平台要求所有视频在 Web 端实时预览,还要能回放录像。当时就是用 ZLMediaKit 做统一接入,GB28181 国标设备直接注册进服务器,RTSP 摄像头用拉流代理接入,播放端统一走 HTTP-FLV,一套服务器全部搞定。
ZLMediaKit 的使用门槛比 SRS 稍高一点,因为它是一个 C++ 工程,源码编译需要依赖很多库,不过官方提供了预编译包和 Docker 镜像,非硬核场景下直接跑镜像就行。它的 Web API 设计得很贴心,像鉴权、录像查询、按需拉流这些能力都有现成接口。
