Skip to main content

Remotion Lambda工作原理

本文描述了当触发Remotion Lambda视频渲染时执行的过程。

note

本文解释了从版本4.0.165开始的Lambda架构。
以前,Lambda函数不使用响应流,并且将块保存到S3中。

使用 renderMediaOnLambda() 调用单个Lambda函数 - 直接调用或通过调用此API的CLI。此调用称为主函数
2
主函数访问传递给它的 Serve URL 的无头浏览器。
3
主函数根据传递的组合ID找到组合,并运行 属性分辨率 算法,以确定应传递给视频的属性以及元数据(例如帧持续时间)。
4
基于视频的确定持续时间和 并发性 ,会生成多个渲染器函数,这些函数负责渲染视频的一部分。
5
渲染器函数使用 AWS Lambda响应流 来报告进度以及二进制视频块。
6
主函数将进度报告合并为简洁的progress.json文件,并定期上传到S3。
7
getRenderProgress() API查询S3存储桶中的progress.json文件,并返回渲染的进度。
8
一旦所有块都到达主函数,它们会被无缝连接。目前连接算法不是公共API。
9
主函数将最终视频上传到S3并关闭。

常见问题

我可以自己制作分布式渲染器吗?

目前无法公开使用块的无缝连接。
您可以使用 frameRangeaudioCodec: "pcm-16" 渲染块,然后使用 FFmpeg 进行连接。

构建分布式渲染器很困难,不建议大多数人这样做。

每个块会下载所有资源吗?

每个块将下载在该块中引用的所有资源。
这可能导致多次同时下载相同的资源,可能会使服务器不堪重负或触发速率限制。
此外,即使资源位于 S3 上,您也需要支付带宽费用1)

在设计解决方案时请牢记这一点,并考虑使用 CDN 来提供资源。


1) 有一个用于避免 S3 带宽费用的 API 计划中,详情请参见 此处