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, 内核驱动, 可视化界面, 底层编程, 搜索引擎查询, 流媒体, 网络协议, 网络流量审计, 通知系统