Skip to main content

通过 Go 触发渲染

EXPERIMENTAL

该功能是新功能。请报告您遇到的任何问题。

要使用 Go 触发 Lambda 渲染,您可以使用 Remotion Lambda Go 客户端。请注意以下内容:

  • 您首先需要完成 Lambda 设置
  • 目前不支持使用 Go 发送大型输入属性(>200KB)。
  • 请始终将 Go 客户端的版本与您部署的 Lambda 函数的版本匹配。否则,由于版本不匹配,调用将失败!
main.go
go
package main
import (
"fmt"
"log"
"os"
"github.com/go-playground/validator/v10"
"github.com/joho/godotenv"
"github.com/remotion-dev/lambda_go_sdk"
)
type ValidationError struct {
Field string
Message string
}
func msgForTag(fe validator.FieldError) string {
switch fe.Tag() {
case "required":
return "This field is required"
}
return fe.Error() // default error
}
func main() {
// Load the environment variables from the .env file
err := godotenv.Load()
if err != nil {
log.Fatal(err)
}
// Specify the URL to your Webpack bundle
serveUrl := os.Getenv("REMOTION_APP_SERVE_URL")
// Specify the function you would like to call
functionName := os.Getenv("REMOTION_APP_FUNCTION_NAME")
// Specify the region you deployed to, for example "us-east-1"
region := os.Getenv("REMOTION_APP_REGION")
// Set parameters for render
renderInputRequest := lambda_go_sdk.RemotionOptions{
ServeUrl: serveUrl,
FunctionName: functionName,
Region: region,
// The data that composition will use
InputProps: map[string]interface{}{
"data": "Let's play",
},
Composition: "main", // The composition to use
}
// Execute the render process
renderResponse, renderError := lambda_go_sdk.RenderMediaOnLambda(renderInputRequest)
// Check if there are validation errors
if renderError != nil {
validationOut := make([]ValidationError, len(renderError.(validator.ValidationErrors)))
for i, fieldError := range renderError.(validator.ValidationErrors) {
validationOut[i] = ValidationError{fieldError.Field(), msgForTag(fieldError)}
}
for _, apiError := range validationOut {
fmt.Printf("%s: %s\n", apiError.Field, apiError.Message)
}
return
}
fmt.Print(renderResponse.RenderId)
/// Get bucket information
fmt.Printf("bucketName: %s\nRenderId: %s\n", renderResponse.RenderId, renderResponse.RenderId)
// Render Progress request
renderProgressInputRequest := lambda_go_sdk.RenderConfig{
FunctionName: functionName,
Region: region,
RenderId: renderResponse.RenderId,
BucketName: renderResponse.BucketName,
LogLevel: "info",
}
// Execute getting the render progress
renderProgressResponse, renderProgressError := lambda_go_sdk.GetRenderProgress(renderProgressInputRequest)
// Check if we have error
if renderProgressError != nil {
log.Fatalf("%s %s", "Invalid render progress response", renderProgressError)
}
// Get the overall render progress
fmt.Printf("overallprogress: %f ", renderProgressResponse.OverallProgress)
}
main.go
go
package main
import (
"fmt"
"log"
"os"
"github.com/go-playground/validator/v10"
"github.com/joho/godotenv"
"github.com/remotion-dev/lambda_go_sdk"
)
type ValidationError struct {
Field string
Message string
}
func msgForTag(fe validator.FieldError) string {
switch fe.Tag() {
case "required":
return "This field is required"
}
return fe.Error() // default error
}
func main() {
// Load the environment variables from the .env file
err := godotenv.Load()
if err != nil {
log.Fatal(err)
}
// Specify the URL to your Webpack bundle
serveUrl := os.Getenv("REMOTION_APP_SERVE_URL")
// Specify the function you would like to call
functionName := os.Getenv("REMOTION_APP_FUNCTION_NAME")
// Specify the region you deployed to, for example "us-east-1"
region := os.Getenv("REMOTION_APP_REGION")
// Set parameters for render
renderInputRequest := lambda_go_sdk.RemotionOptions{
ServeUrl: serveUrl,
FunctionName: functionName,
Region: region,
// The data that composition will use
InputProps: map[string]interface{}{
"data": "Let's play",
},
Composition: "main", // The composition to use
}
// Execute the render process
renderResponse, renderError := lambda_go_sdk.RenderMediaOnLambda(renderInputRequest)
// Check if there are validation errors
if renderError != nil {
validationOut := make([]ValidationError, len(renderError.(validator.ValidationErrors)))
for i, fieldError := range renderError.(validator.ValidationErrors) {
validationOut[i] = ValidationError{fieldError.Field(), msgForTag(fieldError)}
}
for _, apiError := range validationOut {
fmt.Printf("%s: %s\n", apiError.Field, apiError.Message)
}
return
}
fmt.Print(renderResponse.RenderId)
/// Get bucket information
fmt.Printf("bucketName: %s\nRenderId: %s\n", renderResponse.RenderId, renderResponse.RenderId)
// Render Progress request
renderProgressInputRequest := lambda_go_sdk.RenderConfig{
FunctionName: functionName,
Region: region,
RenderId: renderResponse.RenderId,
BucketName: renderResponse.BucketName,
LogLevel: "info",
}
// Execute getting the render progress
renderProgressResponse, renderProgressError := lambda_go_sdk.GetRenderProgress(renderProgressInputRequest)
// Check if we have error
if renderProgressError != nil {
log.Fatalf("%s %s", "Invalid render progress response", renderProgressError)
}
// Get the overall render progress
fmt.Printf("overallprogress: %f ", renderProgressResponse.OverallProgress)
}

更新日志

v4.0.6:响应有效载荷结构已更改。请查看此页面的历史记录以查看以前的结构。

参见