继WebRTC生态简介(一):RTMP、HLS、MPEG-DASH、HTTP-FLV、WHIP、WHEP、RTSP/RTP/RTCP体系、SRS、ZLMediaKit、Janus、MediaSoup。
媒体服务器
FreeSWITCH
推流工具与客户端
OBS Studio
目前最流行的免费开源录屏和直播软件,在GitHub上获得超过38,000颗星标。OBS最初作为Windows平台的录屏工具,后来扩展支持macOS和Linux,成为跨平台的直播解决方案。被广泛应用于游戏直播、在线教育、企业会议、远程协作等场景。
核心功能包括多场景切换、媒体源嵌入、实时滤镜和转码输出。支持多种输入源,包括窗口捕获、屏幕捕获、摄像头、麦克风、图片、文本等。内置丰富滤镜,包括颜色校正、噪点去除、模糊、变换等,无需第三方插件即可实现专业级的画面效果。
OBS在WebRTC生态中的地位尤为重要。2024年发布的OBS 30版本带来对WebRTC的原生支持,用户可直接通过WHIP协议推流到WebRTC服务器,无需RTMP中转。显著降低WebRTC推流的门槛,使得直播延迟降低到200毫秒级别。还支持虚拟摄像头功能,可作为其他应用的视频输入源。
OBS的配置灵活性高,支持高级场景编辑和脚本扩展。提供丰富的第三方插件生态,包括增强的转码滤镜、统计信息显示、多平台同步推流等。OBS还支持NDI(Network Device Interface)协议,可作为专业视频制作系统的输入输出节点。
FFmpeg
音视频处理领域的瑞士军刀,是功能最强大、应用最广泛的命令行工具集。FFmpeg项目由Fabrice Bellard于2000年发起,至今已发展为涵盖编码、解码、转码、流媒体处理等完整功能的工具链。FFmpeg被广泛应用于视频网站、流媒体平台、影视制作等领域,是几乎所有音视频技术栈的基础组件。
FFmpeg的核心组件包括ffmpeg(转码工具)、ffplay(播放器)和ffprobe(分析工具)。ffmpeg可完成音视频格式转换、封装格式转换、编码器切换、缩放、裁剪、滤镜处理等各种操作。ffplay提供基于SDL的简单播放器,可快速测试媒体流。ffprobe可分析媒体文件的元数据、流信息、编码参数等。
在流媒体处理方面,支持几乎所有主流协议的输入输出。可作为推流客户端将本地文件或采集设备推送到RTMP服务器,也可作为拉流客户端录制或转存直播流。还内置简单的服务器功能,可将本地文件或设备通过RTSP、RTMP、HLS等协议对外分发。
FFmpeg的filter_complex功能是其最强大的特性之一,支持链式连接各种音视频滤镜。可实现画面拼接、文字叠加、画中画、时间轴特效等复杂处理。FFmpeg支持数百种编码器,包括H.264/H.265/AV1视频编码和AAC/MP3/Opus音频编码,能够满足各种质量需求。
mpv
官网,基于MPlayer和MPlayer2、开源(GitHub,36.5K Star,3.5K Fork)命令行媒体播放器,以其简洁的设计和强大的性能著称。采用C语言编写,支持GPU加速解码,提供高质量的视频渲染。配置灵活性高,支持脚本扩展,是技术用户和专业玩家的首选播放器。
支持所有常见的音视频格式和协议,包括本地文件和网络流媒体。可通过lavf库支持各种协议,包括RTMP、HLS等流媒体协议。命令行参数丰富,可精细控制播放行为,适合批量处理和自动化脚本。
提供文本配置文件,用户可高度自定义快捷键、滤镜、输出设置等。支持Lua脚本扩展,可实现自动化操作和增强功能。其OSD(On-Screen Display)功能可显示详细的播放信息,便于调试流媒体问题。
VLC
即VLC Media Player简称,官网,VideoLAN开源(GitHub,19.3K Star,6.1K Fork)跨平台多媒体播放器,由法国École Polytechnique大学的学生于1996年发起。
VLC支持几乎所有音视频格式和协议,包括本地文件、网络流、光盘等,是功能最全面的播放器之一。VLC被下载超过30亿次,是世界上最流行的媒体播放器。
核心优势在于其广泛的格式支持和强大的协议能力。可播放本地文件、DVD、CD、VCD、网络流媒体等各种来源的内容。在协议方面,VLC支持RTSP、RTMP、HLS、UDP、TCP等几乎所有流媒体协议,常用于测试服务器发出的流是否正常。还可作为流媒体服务器使用,支持RTSP、HTTP等协议的输出。
VLC的串流功能(Stream)允许用户将本地媒体或设备通过各种协议对外分发。支持转码输出,可在串流的同时进行格式转换。支持节目单(Playlist)功能,可按预设顺序播放多个媒体。这些功能使VLC成为简单的直播或录播解决方案。
支持Windows、macOS、Linux、iOS、Android等全平台,提供统一的用户体验。提供命令行工具cvlc,可在无图形界面的服务器环境使用。VLC的libVLC库可被其他应用集成,提供媒体播放能力。
GStreamer
官网,Linux平台最具影响力的开源(GitHub,3.3K Star,756 Fork)多媒体处理框架。采用插件化架构,提供丰富的音视频处理组件,支持从简单的播放到复杂的转码、流媒体处理等各种场景。许多Linux发行版默认的多媒体框架,也是许多专业应用的基础。
核心概念是管道(Pipeline),由多个元素(Element)串联组成。每个元素负责特定的功能,如数据源、解码器、编码器、过滤器、输出等。开发者可通过编程方式构建管道,实现灵活的多媒体处理流程。GStreamer支持C、C++、Python、Ruby等多种语言的绑定。
在流媒体处理方面功能完善。它支持RTSP、RTP、SRT等协议,可作为客户端或服务器使用。还支持WebRTC的某些功能,但相较于专门的WebRTC服务器实现,其WebRTC支持不够完整。GStreamer被许多专业音视频软件采用,包括Pitivi视频编辑器、Ardour音频工作站等。
转码网关与代理服务器
MediaMTX
官网,原名rtsp-simple-server,功能强大的开源(GitHub,19.8K Star,2.3K Fork)流媒体服务器和网关,采用Go语言编写。支持多种协议的相互转换,包括RTSP、RTMP、HLS、WebRTC、SRT等。
通过单一二进制文件提供所有功能,无需复杂的配置文件,通过命令行参数即可完成配置。支持按需拉流和推流,可作为统一入口访问各种协议的媒体源。
对WebRTC的支持包括WHIP推流和WHEP拉流,可直接与OBS等推流工具对接。还支持录制功能,可将任意协议的流录制为MP4文件。性能表现优秀,资源占用低,适合资源受限的环境。
nginx-rtmp-module
官网,用C开发、最早的开源(GitHub,14K Star,3.6K Fork)RTMP服务器方案之一。Nginx的RTMP模块,为Nginx增加流媒体服务器功能,允许Nginx同时提供HTTP服务和RTMP服务,适合需要Web服务与直播服务共存的场景。
其配置与Nginx的风格一致,简洁明了,支持RTMP推流、拉流、转码、录制等功能。通过与Nginx的其他模块配合,还可实现基于HLS的分发。性能稳定,资源效率高,适合中等规模的直播场景。
但活跃度已大不如前,多年没有重大更新。不支持WebRTC,无法满足新一代低延迟直播的需求。对于新项目,建议考虑SRS、ZLMediaKit、MediaMTX等更现代的方案。
go2rtc
官网,Go语言编写、开源(GitHub,13.9K Star,1.2K Fork)全能型的实时通信和流媒体工具,由俄语区开发者创建和维护。提供统一的流媒体处理框架,支持WebRTC、RTSP、RTMP、FLV、HLS等多种协议,实现各种协议之间的灵活转换。
核心特点是其模块化的架构设计,将不同的协议实现为独立的模块,通过统一的内部流格式进行转换,使得go2rtc可方便地支持新的协议。还提供丰富的客户端库,支持Home Assistant、HomeKit等智能家居平台的集成。
特别适合家庭实验室和小型部署场景,可作为所有摄像头的统一入口,将各种协议的监控摄像头流统一转换为WebRTC或HLS。还支持多流聚合,可将多个源合并为一个流输出。提供Web界面,简洁易用,可方便地查看流状态和管理配置。
Oryx
项目主页,SRS团队推出的一体化、开箱即用、开源(GitHub,875 Star,155 Fork)、视频直播解决方案,将SRS与其他必要组件打包为容器化部署方案,可部署在云上或自建机房,以直播和WebRTC等能力赋能业务。Oryx的名称来源于"oarsman",寓意在直播的海洋中划桨。简化SRS的部署过程,同时提供更丰富的功能。
后端组件包括SRS(流媒体服务器)、FFmpeg(转码)、Prometheus(监控)等,通过Docker Compose进行编排。提供HTTP API进行流管理和控制,支持WebRTC推拉流、RTMP推流、HLS分发等。前端界面简洁直观,可查看流状态、在线人数等信息。
Oryx特别适合快速部署直播服务的场景,可将复杂的多组件系统简化为几次点击即可完成的安装过程。提供Kubernetes部署支持,可扩展到大规模生产环境。
完整平台与解决方案
参考开源视频会议系统:Jitsi Meet、BigBlueButton、La Suite Meet、Galene。
Coturn
开源(GitHub,14.3K Star,2.3K Fork)的STUN/TURN服务器,是WebRTC部署中不可或缺的组件。实现RFC 5766定义的TURN协议,支持UDP、TCP、TLS等多种传输方式。可将媒体数据中继转发,帮助WebRTC客户端在对称型NAT或防火墙环境下建立连接。
部署相对简单,但配置需要一定的网络知识。需要公网IP地址和端口映射才能正常工作。支持多种认证方式,可与WebRTC的信令服务器集成实现动态凭证。支持负载均衡,可部署多实例应对大规模并发。
Coturn的性能直接影响WebRTC的通话质量。在公网环境下,大约10%的WebRTC连接需要TURN中继。部署Coturn是WebRTC生产环境的标准做法。
Ant Media Server
官网,基于Java开发、商业级的实时流媒体平台,支持水平扩展,提供社区版和企业版两个版本。支持WebRTC、RTSP、RTMP、HLS等多种协议,提供低延迟直播、大规模直播、视频会议等多种场景解决方案。
核心优势在于其丰富的功能和企业级支持。提供Adaptive Bitrate(自适应码率)功能,可自动根据观众的网络条件调整视频质量。还支持AI驱动的分析功能,提供观众行为洞察。文档完善,技术支持响应迅速。
企业版提供更多高级功能,包括集群支持、SRT协议、DRM数字版权管理等。在欧美市场有较多企业用户,适合对稳定性和支持有较高要求的场景。
Cloudflare Stream与RealtimeKit
Cloudflare Stream是Cloudflare提供的视频托管和流媒体服务,采用Cloudflare的全球CDN网络。支持上传、转码、存储、分发全流程,开发者可通过API集成视频功能;特点是简单易用,按使用量计费。
Cloudflare RealtimeKit是Cloudflare新推出的实时通信服务,提供SFU能力;完全托管,用户只需关注应用开发。支持WebRTC的接入和分发,可与现有WebRTC应用集成;计费基于参与方分钟数。
Cloudflare的优势在于其全球网络覆盖和与CDN服务的集成。对于已经使用Cloudflare CDN的用户,集成Stream或RealtimeKit可简化架构。
Wowza Streaming Engine
官网,商业级的流媒体服务器软件,提供RTMP、RTSP、HLS、WebRTC等协议支持。流媒体领域的老牌厂商,产品成熟稳定,功能丰富;支持多种部署方式,包括物理服务器、虚拟机、云服务器。
提供丰富的转码、录制、DRM等功能。支持多种CDN集成,可将流分发到Akamai、Cloudflare等全球CDN。还提供Streaming Engine Java API,允许开发者扩展功能。
定价较高,适合有预算的企业用户;提供详细的文档、培训课程和技术支持。还运营着Wowza Streaming Cloud全托管服务,用户无需管理服务器即可使用流媒体功能。
其他
PyMKUI
ZLMediakit官方开源(GitHub,192 Star,44 Fork)、JavaScript和Python编写、现代化前端管理界面,提供直观美观的视频流管理功能,为流媒体服务器的管理和监控提供全新的解决方案。
功能特性:
- 视频流管理:查看、播放、停止流,获取截图
- 拉流代理:多备用地址、按需/立即模式、自动故障切换、持久化恢复、在线编辑
- 转协议预设:保存多套转协议参数,拉流时一键加载,支持加载服务器默认值
- 观众列表:实时查看每路流的在线观众及连接信息
- 服务器监控:CPU、内存、磁盘、网络实时图表
- 服务配置:在线读写ZLMediaKit配置项
- 在线推流:基于WHIP协议的浏览器端直播推流
- 网络连接:查看和管理当前所有TCP/UDP会话
- 录像管理:录像文件分流、分日期浏览,支持检索、在线播放与下载,自动按策略清理过期文件
- 插件系统:内置可扩展Python事件钩子,支持用户自定义推流鉴权、录制回调、流上下线通知等业务逻辑,无需修改核心代码
- 视频质量探针:对推拉流实时采样分析,输出码率、帧率、GOP、音视频交织性等多维度质量指标,以折线图与打点图直观呈现,快速定位卡顿、花屏等异常
核心创新
- Cookie登录模式:解决
secret硬编码鉴权的安全风险,用户不再需要在前每次HTTP请求都传递secret密钥明文,而是通过服务器返回的Cookie进行身份验证,大大提高系统安全性。
- Python混合编程模式,支持:
- 使用Python编写ZLMediakit的HTTP API
- 构建完整的业务系统
- 实现Python与C++对象级别的交互
技术栈:Tailwind CSS+Font Awesome+原生HTML5视频播放器+Jessibuca(FLV播放)+WHEP(WebRTC播放)
实战
安装前,需确保ZLMediakit服务器已编译安装成功:
gitclone https://github.com/ZLMediaKit/pymkui.gitcdpymkui/backend pipinstall-rrequirements.txt然后直接打开frontend/login.html,功能界面:
- 服务器状态:服务器运行状态和资源使用情况
- 视频管理:查看所有当前活跃的流,包括应用名称、流ID、协议、观众数等信息
- 流信息查看:查看每个流的详细信息,包括基本信息、源信息、轨道信息等
- 流播放:直接在浏览器中用各种协议播放视频流
- 观众列表:显示当前观看流的观众信息
- 系统设置:管理服务器配置
- 连接管理:显示所有当前的网络连接
- 在线推流:在线发起whip推流测试
EchoChat
开源(GitHub,43 Star,15 Fork)跨端可用、可扩展、可演进的实时音视频会议直播系统。支持即时聊天、多人音视频会议、互动直播等核心功能。
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 前台前端 | uniapp(Vue3)+mediasoup-client | 多端适配(H5/App/小程序) |
| 后台管理端 | Vue3+Vite+ElementPlus | PC Web管理后台 |
| 后端服务 | Go(Gin+GORM+Wire+zap) | 业务逻辑、信令控制 |
| 媒体服务 | Node.js+mediasoup | SFU媒体控制与转发 |
| 数据库 | PostgreSQL17 | 持久化数据存储 |
| 缓存 | Redis7 | 实时状态、会话缓存 |
| 部署 | Docker Compose/Nginx | 容器化部署,预留K8s |
采用控制面与媒体面彻底分离的架构设计
客户端 (uniapp / Vue3 管理端) │ WebSocket + HTTP Go 单体服务 (模块化) │ ├── auth 用户认证鉴权 │ ├── im 即时通讯 │ ├── contact 联系人管理 │ ├── meeting 会议控制/信令 │ ├── notify 消息通知 │ └── admin 后台管理 ├── PostgreSQL 持久化数据 ├── Redis 实时状态 │ HTTP mediasoup Node服务 │ IPC mediasoup Worker (C++ SFU)核心设计思想:控制面与媒体面分离。Go处理所有业务逻辑和信令控制,专注音视频媒体转发,音视频流直连SFU Worker,不经过Go服务。
项目结构:
EchoChat/ ├── frontend/ # 前台用户端:uni-app、Vue 3.4 ├── admin/ # 后台管理端:Vue 3.5、Element Plus ├── backend/ │ └── go-service/ # Go后端服务:Gin、GORM、Wire │ ├── app/ # 业务模块:auth、admin │ ├── cmd/server/ # 服务入口 │ ├── config/ # 配置文件 │ ├── pkg/ # 公共包:db、logs、middleware、utils │ └── router/ # 路由聚合 ├── media-server/ # Node媒体服务 (Phase 3) ├── deploy/ # 部署配置,Docker Compose ├── design-system/ # UI设计系统,ui-ux-pro-max生成 ├── docs/ # 项目文档 │ ├── progress/ # 开发进度 │ ├── plans/ # 实施计划 │ ├── api/ # API接口文档 │ └── architecture/ # 架构设计文档 └── README.md实战
本地部署
gitclone https://github.com/bojinyuan00/EchoChat.gitcdbackend/go-service go mod tidy go run cmd/server/main.gocdfrontendnpminstall--legacy-peer-depsnpmrun dev:h5cdadminnpminstallnpmrun devscripts/目录脚本
| 脚本 | 用途 | 使用频率 |
|---|---|---|
dev-setup.sh | 首次环境初始化:检查Docker、拉起Postgres/Redis/MinIO、重试式健康检查 | 仅首次clone或重建卷时 |
start.sh | 日常启动:秒级拉起全部服务(容器+应用层) | 每天多次 |
stop.sh | 日常停止:优雅终止应用层,默认保留容器 | 每天多次 |
status.sh | 状态查看:端口/PID/容器一览 | 排障随时 |
各服务地址:
| 服务 | 端口 | 说明 |
|---|---|---|
| 前台用户端(H5) | 5173 | http://localhost:5173 |
| 后台管理端 | 3100 | http://localhost:3100 |
| Go后端API | 8085 | http://localhost:8085,/health健康检查 |
| PostgreSQL | 5432 | Docker容器echochat-postgres |
| Redis | 6379 | Docker容器echochat-redis |
| MinIO API | 9000 | 对象存储,S3兼容 |
| MinIO Console | 9001 | http://localhost:9001,echochat/echochat123456 |