從 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_ID | AWS 存取金鑰 ID |
AWS_SECRET_ACCESS_KEY | AWS 秘密存取金鑰 |
REMOTION_APP_REGION | 部署的 AWS 區域,例如 us-east-1 |
REMOTION_APP_FUNCTION_NAME | Lambda 函式名稱 |
REMOTION_APP_SERVE_URL | Webpack 打包的服務 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");主要步驟說明
上述範例的主要步驟如下:
- 建立
PHPClient:傳入 AWS 區域、服務 URL、函式名稱及憑證提供者 - 設定
RenderParams:指定要渲染的 composition 名稱及輸入參數 - 呼叫
renderMediaOnLambda():發起渲染請求,取得含有renderId與bucketName的回應 - 輪詢渲染進度:持續呼叫
getRenderProgress()直到done為true
憑證驗證方式
CredentialProvider::defaultProvider() 會按以下順序自動尋找 AWS 憑證:
- 環境變數(
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY) - AWS 共用憑證檔案(
~/.aws/credentials) - IAM 實例設定檔(適用於在 EC2 或 ECS 上執行的應用程式)
若要使用 IAM 角色取代 IAM 使用者,請參閱使用 IAM 角色取代 IAM 使用者。
更新日誌
| 版本 | 更新內容 |
|---|---|
| v4.0.15 | 欄位現已有型別定義;->setInputProps() 現在可正確運作,會自動將輸入參數序列化為 JSON |
| v4.0.6 | 回應 payload 結構已變更,請查閱本頁歷史以了解先前的結構 |
| v3.3.96 | 初始版本發布 |