MoQ API: 为您的应用程序提供隔离中继

发布于

# MoQ API: 为您的应用程序提供隔离中继

去年,[我们在每个 Cloudflare 服务器上启用了 Media over QUIC (MoQ)](https://blog.cloudflare.com/moq/) 并开放了网络供任何人测试。这个全球 MoQ 端点虽然提供了基本功能,但缺乏运行应用所需的隔离性和访问控制。

今天,我们终于增加了这些隔离和访问控制。新的 MoQ 配置 API 让您能为您的应用创建一个隔离中继,并为发布者和订阅者发放不同的凭证。您创建的中继将在几秒内在 Cloudflare 的网络上可用,无需部署服务器、设置规模或负载均衡。

Cloudflare 现在支持 [draft-14](https://datatracker.ietf.org/doc/draft-ietf-moq-transport/14/) 和 [draft-16](https://www.ietf.org/archive/id/draft-ietf-moq-transport-16.html) 版本的 MoQ 传输协议,并具备身份验证支持。

您可以通过 [API](https://developers.cloudflare.com/api/resources/moq) 和 [Cloudflare 控制面板](https://dash.cloudflare.com/) 创建中继。在测试期间,使用这些中继完全免费。

## MoQ 概述

MoQ(最初指 Media over QUIC)是一个正在 IETF(互联网工程任务组)开发的新开放协议,该组织也标准化了 HTTP、TLS 和 QUIC。它将在公开环境中开发,并将成为任何人都可以实施的免费公共标准(RFC)。没有任何公司拥有它。

MoQ 是一个发布/订阅系统。发布者发送带有名称的数据流,而订阅者通过名称请求这些数据流。在它们之间的是中继,实际上是复制每个流到每个想要接收的人的 CDN 服务器。中继并不需要查看其转发的数据,这样一个发布者就可以轻松接触到大规模的受众,而无需处理复杂的分发问题。

由于中继不关心数据的内容,相同的协议可以承载许多之前需要不同系统的内容:实时视频、视频通话、低延迟消息传递等。它基于 QUIC,这是一种保持低延迟的运输协议。

实际结果是,您无需构建和运行自己专门的服务器集群。您只需通过一个简单的 API 发布到 CDN,并以更低的成本实现低延迟和大规模。

## 我们如何走到今天:MoQ 开放预览

去年,我们推出了 [第一个全球 MoQ 中继网络](https://blog.cloudflare.com/moq/):每个 Cloudflare 服务器在 330 多个城市作为 MoQ 中继,免费向任何人开放。由于这些端点不需要身份验证,它们非常适合协议测试和客户端开发。每天仍有超过 1000 个独特客户端连接以进行测试。

但未经身份验证的中继并不适合生产环境,因为您无法控制谁可以发布和谁可以订阅。这排除了任何需要机密性、访问控制或清晰的发布者与订阅者角色分离的应用。例如,一个实时拍卖网站,出价必须在毫秒内传达给投标者。MoQ 是一个不错的选择,但发布者和订阅者需要不同的权限,以防止观众的凭证被用来劫持发布者的轨道。

### 什么是 Cloudflare MoQ 网络上的中继?

在当前大多数 MoQ 部署中,中继是一个专用服务器或共享服务器上的专用进程。扩展这种架构意味着运行更多实例,将客户分配到它们,并根据需求变化添加负载均衡器。这与 Cloudflare 的任何服务,包括我们的 [实时 SFU WebRTC 服务](https://blog.cloudflare.com/cloudflare-calls-anycast-webrtc/#eliminating-sfu-region-selection),并不相同。

配置中继并不会启动虚拟机、容器或专用进程。相反,它是在现有全球网络上创建一个隔离范围。

该范围将您的命名空间、轨道和对象与其他中继的那些隔离开来。它还定义了谁可以进入该范围以及他们是否可以发布或订阅。客户端连接到 [Anycast](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) 端点,Cloudflare 会处理网络路由。

如果您熟悉网页托管,创建 Cloudflare 中继更像是添加虚拟主机,而不是启动新的网站服务器。由于基础设施已经在运行,配置 API 添加了您应用的配置和凭证,使中继立即可用,而无需选择地区、估算容量或设置负载均衡器。

## Cloudflare 的 MoQ 控制平面 API

配置 API 是一个控制平面:它管理中继和用于访问中继的令牌,且从不处理流经它们的媒体。

这里有两类资源:

- **中继** 是前面部分描述的隔离范围,确保一个应用的流不会与另一个应用的流混合。
- **令牌** 是授予在单个中继上执行一组操作(发布、订阅或两者)的凭证。通过为发布者和订阅者分配不同的令牌,可以阻止观众接管广播者的轨道。

每个令牌的作用范围限于客户端所需的操作,可以设置过期时间,并且可以单独撤销。这使您能够精确授予客户端应有的访问权限,并在不干扰其他人的情况下收回权限。

目前,每个令牌适用于整个中继,并允许发布、订阅或两者兼而有之。我们正在与 IETF 和更广泛的 MoQ 社区合作,制定一个为所有人服务的丰富方案。如果您有意见,请通过 [moq@cloudflare.com](mailto:moq@cloudflare.com) 告诉我们。

### 配置中继

您可以通过 [HTTP API](https://developers.cloudflare.com/api/resources/moq) 和 [Cloudflare 控制面板](https://dash.cloudflare.com/) 以这两种方式配置中继。

#### 使用 API

创建中继只需一次 API 调用,只需提供一个名称:

Cloudflare 返回一个中继 ID 和两个默认令牌:
第一个令牌可以同时发布和订阅,第二个只能订阅。

要给客户端更窄的访问权限,请添加更多令牌。例如,这是一个到 2027 年开始时过期的仅订阅令牌:

#### 在 Cloudflare 控制面板中

您也可以在控制面板中创建中继:

转到 **媒体 > 实时 > MoQ 中继**。选择 **创建中继**,给它一个名称,然后确认。

### 连接发布者和订阅者

您可以通过 API 或控制面板创建和管理令牌,就像管理中继一样。给您的广播者发布-订阅令牌,并给您的观众分配仅订阅令牌。每个客户端在打开 MoQ 会话时发送其令牌,而中继会强制执行该令牌的权限。

令牌通过 URL 路径传输。例如,使用开源的 [moq-rs](https://github.com/cloudflare/moq-rs) 工具,广播者可以从 ffmpeg 发布一个分片的 MP4 流:

观众连接时使用 moq-sub:

中继在会话开启时读取令牌并检查请求的操作是否被允许。

## 我们为支持 draft-16 所做的改变

配置 API 只是新功能的一部分。MoQ 传输本身也在快速发展,Cloudflare 现在在其中继中支持 [IETF MoQ 规范的 draft-16](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-16)。该草案增加了两个与发布和订阅相关的特性。

`PUBLISH` 现在允许发布者在观众请求之前将轨道发送到中继。在没有 `PUBLISH` 的情况下,第一次订阅必须通过中继链传递给发布者,然后发布者才开始发送。而使用 `PUBLISH`,中继可以在第一个观众连接时就开始接收轨道。

`SUBSCRIBE_NAMESPACE` 允许订阅者请求在命名空间下宣布的每个轨道,而不是单独请求轨道。该订阅还涵盖了后续添加的轨道,例如在直播期间引入的新视频或音频轨道。

您现在可以连接 draft-16 客户端以使用这两个特性。

## 开放式开发

MoQ 是一个开放标准,由各行业的工程师在 IETF 开发。这使得客户端和中继能够实现一个通用协议。如果每个中继提供商都需要不同的控制平面来创建范围和发放凭证,那么这种互操作性将大打折扣。

在此方面,我们正在 [MoQ CDN Provisioning Internet-Draft](https://datatracker.ietf.org/doc/draft-englishm-moq-cdn-provisioning/) 中记录此 API 背后的设计。该草案将配置资源称为范围,而不是中继,但两个术语都指的是相同的逻辑传递上下文:一个应用创建的边界,然后凭借凭证进入。

目标是让多个 CDN 和中继实现支持通用的配置模型。该文档仍然是一个 Internet 草案,而非 RFC,并且其 API 模型可能会随着工作组的发展而变化。

## 今天可用,在 Beta 期间仍然免费

MoQ 中继配置 API 现在已可用,作为 MoQ beta 的一部分。在预览期间,您可以在任何规模下免费使用它。

随着我们的发展,API 将会变化,因此我们建议您查看 [开发者文档](https://developers.cloudflare.com/moq) 获取更新和重大变化。

我们也非常希望了解您希望看到的后续功能。更细粒度的权限?自带签名密钥?请通过 [moq@cloudflare.com](mailto:moq@cloudflare.com) 与我们联系。

## 今天开始

- 阅读 [开发者文档](https://developers.cloudflare.com/moq)
- 阅读 [API 参考文档](https://developers.cloudflare.com/api/resources/moq)
- 阅读 [基础设施草案](https://datatracker.ietf.org/doc/draft-englishm-moq-cdn-provisioning/)
- 给我们发邮件: [moq@cloudflare.com](mailto:moq@cloudflare.com)
- 使用 MoQ 构建?加入 [Cloudflare Developers Discord](https://discord.cloudflare.com/) 分享您的项目,告诉我们技术预览需要什么。

---

原文链接:[点击查看](https://blog.cloudflare.com/moq-relays/)

评论

暂无评论。

0.068374s