cloudflare/moq-rs
GitHub: cloudflare/moq-rs
该项目是 IETF MoQ Transport 协议的 Rust 实现,提供核心协议库、relay 服务器和客户端工具,用于基于 QUIC 的超低延迟实时媒体传输。
Stars: 141 | Forks: 49
# moq-rs
Media over QUIC Transport (MoQT) 协议的一个实现,用于通过 QUIC 进行实时媒体传输,符合 IETF MoQ 工作组的规范。
该代码库最初由 [Luke Curley (@kixelated)](https://github.com/kixelated) 创建。[Mike English (@englishm)](https://github.com/englishm) 参与了早期设计,并一直维护着这个与 IETF 对齐的分支。该项目目前由 Cloudflare 维护。此实现的目标是 [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/draft-ietf-moq-transport/14/)。
## 协议支持
`main` 分支的目标是 MoQT 规范的 **draft-14**。如需 draft-07 兼容性(用于 [Cloudflare 当前的生产部署](https://developers.cloudflare.com/moq/)),请参见 [`draft-ietf-moq-transport-07`](https://github.com/cloudflare/moq-rs/tree/draft-ietf-moq-transport-07) 分支。
### 包含内容
本仓库提供:
- **moq-transport**:一个完整的 MoQT 协议库实现
- **moq-relay-ietf**:一个可用于生产环境的 relay 服务器
- **示例客户端**:一个 fMP4 发布者 (moq-pub) 和一个演示时钟应用程序 (moq-clock-ietf)
### 协议功能支持
**已支持:**
- CLIENT_SETUP / SERVER_SETUP
- PUBLISH_NAMESPACE
- SUBSCRIBE
- WebTransport 和原生 QUIC 传输层
- 流("subgroup")和数据报(datagram)交付模式
**不支持:**
- SUBSCRIBE_NAMESPACE(即将支持)
- FETCH(近期不会支持)
## 互操作性
运行最新 `main` 分支的公开 relay 实例可用于互操作性测试,地址如下:
```
https://interop-relay.cloudflare.mediaoverquic.com:443
```
作为针对 IETF 规范的实现,此代码库应与针对相同 draft 版本的其他实现兼容。有关其他实现的列表,请参见 [moq-wg/moq-transport wiki](https://github.com/moq-wg/moq-transport/wiki/Interop)。
流媒体格式兼容性:
- **[video-dev/moq-js](https://github.com/video-dev/moq-js)**:一个 TypeScript 播放器实现,兼容 moq-pub 的 fMP4 输出。选择分支时请检查 draft 版本兼容性。
- **[gst-moq-pub](https://github.com/rafaelcaricio/gst-moq-pub)**:基于 moq-pub 构建的 GStreamer 发布者插件,同样兼容 moq-js。
## 组件
本仓库包含多个 crate:
- **moq-transport**:一个与媒体无关的库,实现了核心 MoQT 协议。
- **moq-native-ietf**:用于原生传输的 QUIC 和 TLS 工具。
- **moq-relay-ietf**:一个 relay 服务器,用于将内容从发布者转发给订阅者,具有缓存和去重功能。
- **moq-api**:一个 HTTP API 服务器,用于源站发现和 relay 协调,由 Redis 提供支持。
- **moq-pub**:一个发布者客户端,通过 MoQT 广播 fMP4 流。
- **moq-catalog**:Catalog 格式处理。
- **moq-sub**:一个用于消费 MoQT 流的订阅者客户端。
- **moq-clock-ietf**:一个简单的时间发布者/订阅者,用于演示非媒体用例。
## 开发
典型的开发工作流程:
1. 在一个终端中启动本地 relay:
./dev/relay
2. 在另一个终端中启动发布者:
./dev/pub
如果你不想安装本地证书,请添加 `--tls-disable-verify`。
3. 如需播放,请在本地克隆并运行 [moq-js](https://github.com/video-dev/moq-js),然后在使用浏览器打开并将其指向你的本地 relay。
有关更多选项和工作流程,请参见 [开发辅助脚本](dev/README.md)。
## 用法
有关详细的用法信息,请参见每个 crate 目录中的 README:
- [moq-transport](moq-transport/README.md) - 协议库文档
- [moq-relay-ietf](moq-relay-ietf/README.md) - Relay 服务器配置
- [moq-pub](moq-pub/README.md) - 发布者客户端用法
moq-transport crate 也发布在 [crates.io](https://crates.io/crates/moq-transport) 上,并附有 [API 文档](https://docs.rs/moq-transport/latest/moq_transport/)。
## 许可证
根据以下任一许可证授权:
- Apache License, Version 2.0([LICENSE-APACHE](LICENSE-APACHE) 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license([LICENSE-MIT](LICENSE-MIT) 或 http://opensource.org/licenses/MIT)
标签:MoQT, QUIC, Rust, WebTransport, 内核驱动, 可视化界面, 底层编程, 搜索引擎查询, 流媒体, 网络协议, 网络流量审计, 通知系统