Cosmos 是 Netflix 的下一代媒体计算平台。Cosmos 将微服务架构与异步工作流和无服务器功能相结合,旨在通过提高灵活性、效率和开发人员生产力来实现 Netflix 媒体处理管道的现代化。在过去几年中,编码技术(ET)内的视频团队一直致力于在 Cosmos 上重建整个视频管道。
这个新的管道由多个微服务组成,每个微服务专注于单一功能。其中一个这样的微服务是视频编码服务(VES)。编码是视频管道的重要组成部分。从高层次来看,它接收摄入的中间素材,并将其编码为适合 Netflix 流媒体或满足某些工作室/制作用例的视频流。对于 Netflix 而言,此服务有多项要求:
-
鉴于从手机到浏览器再到智能电视的设备种类繁多,需要支持多种编解码器格式、分辨率和质量级别。
-
分块编码是满足我们业务需求的延迟要求所必需的,并且需要适应具有不同延迟敏感度的用例。
-
持续发布的能力对于在流媒体和工作室领域实现快速产品创新至关重要。
-
每天都有大量的编码工作。该服务需要具有成本效益,并充分利用可用资源。
在本技术博客中,我们将介绍如何构建 VES 以实现上述目标,并分享我们在构建微服务过程中吸取的一些经验教训。请注意,为了简单起见,我们选择省略了某些与 Netflix 特定但并非本博客文章主要信息不可或缺的细节。
在 Cosmos 上构建视频编码服务
Cosmos 微服务由三层组成:接收请求的 API 层(Optimus)、协调媒体处理流程的工作流层(Plato)和处理媒体的无服务器计算层(Stratum)。这三层通过一个内部开发的、基于优先级的消息系统Timestone异步通信。我们选择 Protobuf 作为有效负载格式,因为其高效且具有成熟的跨平台支持。
为帮助服务开发人员快速起步,Cosmos 平台提供了强大的服务生成器。该生成器具有直观的用户界面。只需点击几下,它就能创建一个基本但完整的 Cosmos 服务:创建所有 3 层的代码库;启用所有平台功能,包括发现、日志记录、跟踪等;设置发布管道,并可轻松访问仪表板。我们可以立即开始添加视频编码逻辑,并将服务部署到云端进行实验。
Optimus
作为 API 层,Optimus 充当 VES 的入口,这意味着服务用户只能通过 Optimus 与 VES 进行交互。定义的 API 接口是 VES 与外部世界之间的强大契约。只要 API 稳定,用户就不会受到 VES 内部变化的影响。这种解耦有助于更快