MoQ:实时直播媒体传输协议栈
基于 QUIC 的实时直播媒体协议与 Rust / TypeScript 实现,面向需要低延迟、大规模分发的开发者和运维者。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- vmoq-ffi-v0.4.20
- 平台
- Linux、macOS
详细介绍
项目简介
Media over QUIC(MoQ)是一个新一代实时媒体协议,目标是在大规模分发下提供实时延迟。它基于现代 Web 技术构建,能给出接近 WebRTC 的延迟,却没有 WebRTC 的那些限制;核心网络层交给 QUIC 库,其余部分都在应用空间里实现,媒体管线完全可控。
本仓库实现的是 moq-lite,即 IETF moq-transport 草案的前向兼容子集,可以与任何 moq-transport CDN(例如 Cloudflare)配合使用。它的目标更聚焦,优先考虑简单性和可部署性。
主要功能
- 实时延迟:利用 QUIC 的优先级和部分可靠性。
- 大规模:为 fan-out 场景设计,支持跨区域集群。
- 现代 Web:使用 WebTransport、WebCodecs 和 WebAudio。
- 多语言:同时提供 Rust(原生)与 TypeScript(Web)库。
- 通用:适用于任何实时数据,不只限于媒体;文本聊天既是示例,也是核心功能。
协议采用分层设计,CDN 不需要了解应用、编解码器或轨道,业务逻辑完全留在客户端侧:
┌─────────────────┐
│ Application │ 业务逻辑:鉴权、非媒体轨道等
├─────────────────┤
│ hang │ 媒体编码与流式传输:编解码器、容器、catalog
├─────────────────┤
│ moq-lite │ 通用发布/订阅传输:broadcast、track、group、frame
├─────────────────┤
│ WebTransport │ 浏览器兼容的 QUIC
│ QUIC │ HTTP/3 握手、多路复用等
└─────────────────┘
主要库对照(Rust / TypeScript):
| 层 | Rust | TypeScript |
|---|---|---|
| 实时发布订阅 | moq-net |
@moq/net |
| 媒体 catalog 与容器 | hang、moq-mux |
@moq/hang |
| 采集与播放 | moq-audio、moq-video |
@moq/publish、@moq/watch |
| 房间与聊天 | moq-room |
@moq/room |
| 授权 | moq-auth |
@moq/auth |
Rust 核心还提供 Python、Swift、Kotlin、Go、Dart、C++ 和 C 绑定。
安装与使用
完整文档在 doc.moq.dev。按需求选择入口:
- 想快速体验:查看 本地 demo 或 在线演示。
- 想为应用加入流媒体能力:从选择库开始,再看示例。
- 想接入已有媒体工具:使用 CLI、OBS、GStreamer 和网关,见 bin 文档。
- 想运行 relay:先安装,再做生产部署。
最快的体验方式需要带 flakes 的 Nix:
# 启动 relay、演示媒体和 Web 服务器
nix develop -c just
运行后会在浏览器打开 watch、publish 和 stats 页面,也可以直接访问 http://localhost:5173/watch.html。没有 Nix 时请参考 demo 指南手动搭建。
仓库开发使用 just:
just --list # 查看所有命令
just build # 构建全部
just check # 对分支改动做 lint、编译与测试
注意事项
release分支是稳定分支,也是发布来源;main是主干,破坏性 API 变更会在两次发布之间进入main。所有包遵循 semver,破坏性 API 变更会递增第一个非零版本号。- 破坏性的线路格式变更极少发生。
- 项目同时以 Apache-2.0 与 MIT 许可发布;例外是
cpp/obs/下的 OBS 插件,因链接 OBS Studio 的libobs而采用 GPL-2.0-or-later,属于可单独分发的工作,不影响项目其余部分的 MIT/Apache 许可。
本作品整理自 GitHub 开源项目 moq-dev/moq,原作者 @moq-dev,许可证 Apache-2.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- vmoq-ffi-v0.4.20当前版本
修复 flate 解压超大帧、net 对等端错误码与部分 lite group 处理;回移 relay 的 mesh gossip 修复;auth 支持 WebTransport 等传输名;修复 fMP4 导出中的 Opus 时间戳;升级多个 JS 包版本。
- vmoq-ffi-v0.4.19
0.4.19:修复音频缓冲和订阅重排解码,改进 PUBLISH_NAMESPACE、WebTransport 头限制、H.265 画面比例及 HLS 导入,并为 FFI 增加 drain()。
- vobs-moq-v0.6.18
新增 moq-rtsp crate,支持导入 RTSP;moq-net 支持压缩轨道;QUIC 层改为流与数据报使用发送选项并收紧发送域;补充各包 MIGRATE.md 文档与 Nix 构建配置。
评论