Remotion LabRemotion Lab
Lambda從 PHP 使用 Lambda

從 PHP 使用 Lambda

如何使用 PHP 搭配 remotion/lambda Composer 套件,透過 Remotion Lambda 觸發影片與靜態圖片的渲染請求,包含 HTTP API 呼叫與驗證設定。

從 PHP 使用 Lambda

此功能自 Remotion v3.3.96 起提供。

本頁說明如何從 PHP 應用程式觸發 Remotion Lambda 渲染,包含套件安裝、環境設定與完整的程式碼範例。

安裝

透過 PHP 觸發 Lambda 渲染,需使用 Composer 安裝 remotion/lambda 套件:

composer require remotion/lambda

請使用與 NPM 上 Remotion 版本相同的版本號,並在 composer.json 中移除版本號前的 ^ 符號以鎖定版本:

{
  "require": {
    "remotion/lambda": "4.0.15"
  }
}

重要:PHP 客戶端版本必須與已部署的 Lambda 函式版本完全一致,版本不符會導致呼叫失敗。

前置條件

在繼續之前,請先完成 Lambda 環境設定,確保已完成:

  • 建立 IAM 角色與政策
  • 部署 Lambda 函式
  • 部署 Remotion 站台至 S3
  • 取得 AWS 存取金鑰

環境變數設定

請設定以下環境變數(範例支援 .env 檔案):

變數名稱說明
AWS_ACCESS_KEY_IDAWS 存取金鑰 ID
AWS_SECRET_ACCESS_KEYAWS 秘密存取金鑰
REMOTION_APP_REGION部署的 AWS 區域,例如 us-east-1
REMOTION_APP_FUNCTION_NAMELambda 函式名稱
REMOTION_APP_SERVE_URLWebpack 打包的服務 URL

渲染影片範例

以下範例展示如何發起渲染請求並追蹤渲染進度:

<?php
use Aws\Credentials\CredentialProvider;
 
// 假設你使用 Composer,它會自動加入 autoload.php
require_once dirname(__DIR__) . '/vendor/autoload.php';
 
use Dotenv\Dotenv;
use Remotion\LambdaPhp\PHPClient;
use Remotion\LambdaPhp\RenderParams;
 
// 載入環境變數
// 使用 "unsafe" 因為 AWS 從 getenv() 讀取環境變數,而非 $_ENV
$dotenv = Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->load();
 
// 指定部署的區域,例如 "us-east-1"
$region = getenv('REMOTION_APP_REGION');
 
// 指定要呼叫的函式名稱
$functionName = getenv('REMOTION_APP_FUNCTION_NAME');
 
// 指定 Webpack 打包的 URL
$serveUrl = getenv('REMOTION_APP_SERVE_URL');
 
$provider = CredentialProvider::defaultProvider();
 
// 建立客戶端實例
$client = new PHPClient($region, $serveUrl, $functionName, $provider);
 
// 建立參數物件並依需求設定
$params = new RenderParams();
$params->setComposition('MyVideo');
 
// 設定輸入參數
$params->setInputProps([
    'title' => '我的影片標題',
    'subtitle' => '副標題文字',
]);
 
// 執行渲染並取得回應
$renderResponse = $client->renderMediaOnLambda($params);
 
// 輸出渲染回應
print_r($renderResponse);
 
// 取得渲染進度
$renderId = $renderResponse->renderId;
$bucketName = $renderResponse->bucketName;
$renderProgressResponse = $client->getRenderProgress($renderId, $bucketName);
 
while (!$renderProgressResponse->done) {
    // 渲染尚未完成
    $renderProgress = $renderProgressResponse->overallProgress;
 
    // 輸出渲染進度
    print_r("progress: " . ($renderProgress * 100) . "%\n");
 
    // 等待 1 秒
    sleep(1);
 
    // 再次取得渲染進度
    $renderProgressResponse = $client->getRenderProgress($renderId, $bucketName);
}
 
print_r("Render is done!\n");
print_r("Output URL: " . $renderProgressResponse->outputFile . "\n");

渲染靜態圖片範例

若要渲染單張靜態圖片,可使用 renderStillOnLambda() 方法:

<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
 
use Dotenv\Dotenv;
use Aws\Credentials\CredentialProvider;
use Remotion\LambdaPhp\PHPClient;
use Remotion\LambdaPhp\RenderStillParams;
 
$dotenv = Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->load();
 
$region = getenv('REMOTION_APP_REGION');
$functionName = getenv('REMOTION_APP_FUNCTION_NAME');
$serveUrl = getenv('REMOTION_APP_SERVE_URL');
 
$provider = CredentialProvider::defaultProvider();
$client = new PHPClient($region, $serveUrl, $functionName, $provider);
 
// 建立靜態圖片渲染參數
$params = new RenderStillParams();
$params->setComposition('Thumbnail');
$params->setImageFormat('png');
$params->setInputProps([
    'title' => '縮圖標題',
]);
 
// 執行靜態圖片渲染(同步,直接回傳結果)
$renderResponse = $client->renderStillOnLambda($params);
 
print_r("Output URL: " . $renderResponse->url . "\n");

主要步驟說明

上述範例的主要步驟如下:

  1. 建立 PHPClient:傳入 AWS 區域、服務 URL、函式名稱及憑證提供者
  2. 設定 RenderParams:指定要渲染的 composition 名稱及輸入參數
  3. 呼叫 renderMediaOnLambda():發起渲染請求,取得含有 renderIdbucketName 的回應
  4. 輪詢渲染進度:持續呼叫 getRenderProgress() 直到 donetrue

憑證驗證方式

CredentialProvider::defaultProvider() 會按以下順序自動尋找 AWS 憑證:

  1. 環境變數(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  2. AWS 共用憑證檔案(~/.aws/credentials
  3. IAM 實例設定檔(適用於在 EC2 或 ECS 上執行的應用程式)

若要使用 IAM 角色取代 IAM 使用者,請參閱使用 IAM 角色取代 IAM 使用者

更新日誌

版本更新內容
v4.0.15欄位現已有型別定義;->setInputProps() 現在可正確運作,會自動將輸入參數序列化為 JSON
v4.0.6回應 payload 結構已變更,請查閱本頁歷史以了解先前的結構
v3.3.96初始版本發布

相關資源