Remotion LabRemotion Lab
LambdaLambda 運作原理

Lambda 運作原理

深入了解 Remotion Lambda 觸發影片渲染時的內部執行流程,包含主函式、渲染器函式、Response Streaming 及 S3 串接機制。

Remotion Lambda 運作原理

本文說明當 Remotion Lambda 影片渲染被觸發時,系統內部所執行的完整流程。

本文說明的是 v4.0.165 起的 Lambda 架構。在此版本之前,Lambda 函式不使用 Response Streaming,而是將 chunk 儲存至 S3。

完整渲染流程

第一步:呼叫主函式

透過 renderMediaOnLambda() 觸發單一 Lambda 函式調用,無論是直接呼叫或透過 CLI(CLI 同樣會呼叫此 API)。這次調用稱為主函式(main function)

第二步:載入服務 URL

主函式使用無頭瀏覽器(headless browser)造訪傳入的 Serve URL。

第三步:解析 Composition

主函式根據傳入的 composition ID 找到對應的 composition,並執行 props 解析演算法,以確定傳入影片的參數以及元資料(如影格數量/影片時長等)。

第四步:生成渲染器函式

根據確定的影片時長與設定的並行數(concurrency),主函式會生成多個渲染器函式(renderer functions),每個渲染器函式負責渲染影片的一個片段(chunk)。

第五步:使用 Response Streaming 回報進度

渲染器函式使用 AWS Lambda Response Streaming 技術,即時回報渲染進度以及二進位影片 chunk 資料。

第六步:更新進度至 S3

主函式將各個渲染器函式的進度回報整合為簡潔的 progress.json 檔案,並定期上傳至 S3。

第七步:查詢渲染進度

getRenderProgress() API 查詢 S3 儲存桶中的 progress.json 檔案,並回傳目前的渲染進度。

第八步:無縫串接 Chunk

一旦所有 chunk 到達主函式,系統會對其進行無縫串接(seamless concatenation)。

注意:串接演算法目前不是公開 API。

第九步:上傳最終影片

主函式將最終影片上傳至 S3 後關閉。

架構圖

客戶端 (SDK/CLI)
     |
     | renderMediaOnLambda()
     v
+------------------+
|   主函式          |
|  (main function) |
|                  |
|  1. 載入 Serve URL (無頭瀏覽器)
|  2. 解析 Composition
|  3. 生成渲染器函式 |
+------------------+
     |          |
     | 生成      | 定期上傳
     v          v
+----------+  +----------+
| 渲染器1   |  | S3 進度   |
| (chunk 1)|  | progress  |
+----------+  | .json    |
+----------+  +----------+
| 渲染器2   |      ^
| (chunk 2)|      |
+----------+  getRenderProgress()
     ...           |
+----------+  客戶端輪詢
| 渲染器N   |
| (chunk N)|
+----------+
     |
     | Response Streaming
     v
+------------------+
|   主函式          |
|  串接所有 chunks  |
|  上傳最終影片至   |
|  S3               |
+------------------+

常見問題

能否自行建立分散式渲染器?

目前 chunk 的無縫串接演算法不是公開 API。

你可以使用 frameRangeaudioCodec: "pcm-16" 渲染各個 chunk,並使用 FFmpeg 進行串接。然而,建立分散式渲染器相當複雜,不建議大多數使用者嘗試。

每個 chunk 都會下載所有資產嗎?

每個 chunk 會下載在該 chunk 中被引用的所有資產。這可能導致相同資產被多個 chunk 同時大量下載,可能超出伺服器負載或觸發速率限制。

此外,即使資產存放在 S3 上,你仍需支付頻寬費用。在設計解決方案時請牢記這一點,建議考慮使用 CDN 來提供資產服務。

計劃中有一個避免 S3 頻寬費用的 API,但尚未推出。

版本差異

版本架構說明
v4.0.165 之前Lambda 函式不使用 Response Streaming,而是將 chunk 儲存至 S3,主函式再從 S3 讀取並串接
v4.0.165 起採用 AWS Lambda Response Streaming,渲染器函式透過串流即時傳送進度與 chunk 資料給主函式,效能更佳

相關資源