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。
你可以使用 frameRange 和 audioCodec: "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 資料給主函式,效能更佳 |