使用 Transcoder API 对视频进行转码

本页面介绍如何使用 Transcoder API 和 curl、Windows PowerShell 或客户端库的默认设置创建基本视频转码作业。

您还可以使用以下任一编程语言直接在 Google Cloud 控制台中执行本快速入门:

准备工作

  1. 安装 Google Cloud CLI。

  2. 配置 gcloud CLI 以使用您的联合身份。

    如需了解详情,请参阅使用联合身份登录 gcloud CLI

  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  5. 验证是否已为您的 Google Cloud 项目启用结算功能

  6. 启用 Transcoder API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable transcoder.googleapis.com
  7. 为您的用户账号创建本地身份验证凭证:

    gcloud auth application-default login

    如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI

  8. 向您的用户账号授予角色。对以下每个 IAM 角色运行以下命令一次: roles/transcoder.admin, roles/storage.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • USER_IDENTIFIER:您的用户 账号。如需查看示例,请参阅 在 IAM 政策中表示员工池用户
    • ROLE:您向用户账号授予的 IAM 角色。

创建 Cloud Storage 存储桶

  1. 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区页面。

    进入“存储桶”

  2. 点击 创建
  3. 创建存储桶页面上,输入您的存储桶信息。要转到下一步,请点击继续
    1. 指定存储桶的名称中,输入唯一的存储桶名称。请勿在存储桶名称中添加敏感信息,因为存储桶命名空间是全局性的,公开可见。
    2. 选择数据存储位置部分,执行以下操作:
      1. 选择位置类型
      2. 位置类型下拉菜单中选择一个位置,用于永久存储存储桶的数据。
      3. 如需设置跨存储桶复制,请选择通过 Storage Transfer Service 添加跨存储桶复制,然后按照以下步骤操作:

        设置跨存储桶复制

        1. 存储桶菜单中,选择一个存储桶。
        2. 复制设置部分中,点击配置以配置复制作业的设置。

          系统会显示配置跨存储桶复制窗格。

          • 如需按对象名称前缀过滤要复制的对象,请输入要用于包含或排除对象的前缀,然后点击 添加前缀
          • 如需为复制的对象设置存储类别,请从存储类别菜单中选择一个存储类别。 如果您跳过此步骤,则复制的对象会默认使用目标存储桶的存储类别。
          • 点击完成
    3. 选择数据存储方式部分中,执行以下操作:
      1. 设置默认类别部分,选择以下选项: 标准
      2. 如需启用分层命名空间,请在针对数据密集型工作负载优化存储部分中,选择在此存储桶上启用分层命名空间
    4. 选择如何控制对对象的访问权限部分中,选择存储桶是否强制执行禁止公开访问,然后为存储桶对象选择访问权限控制方法
    5. 选择如何保护对象数据部分中,执行以下操作:
      • 数据保护下,选择您要为存储桶设置的任何选项。
        • 如需启用软删除,请选中软删除政策(用于数据恢复)复选框,然后指定您希望在删除对象后保留对象的天数。
        • 如需设置对象版本控制,请选中对象版本控制(用于版本控制)复选框,然后指定每个对象的最大版本数以及非当前版本过期前的天数。
        • 如需为对象和存储分区启用保留政策,请点击保留(合规性)复选框,然后执行以下操作:
          • 如需启用对象保留锁定,请点击启用对象保留复选框。
          • 如需启用存储桶锁定,请点击设置存储桶保留政策复选框,然后为保留期限选择时间单位和时长。
      • 如需选择对象数据的加密方式,请展开数据加密部分 (),然后选择数据加密方法
  4. 点击创建
  5. 点击创建文件夹并输入名称,以创建一个用于保存已编码的视频输出的文件夹。

使用 Transcoder API 对视频进行转码

执行以下步骤时,本地机器上必须至少有时长为 5 秒的视频(示例视频)。请参阅支持的输入和输出格式列表

将视频上传到 Cloud Storage 存储桶

  1. 在 Google Cloud 控制台中,前往 Cloud Storage 浏览器页面。
    转到“Cloud Storage 浏览器”页面
  2. 点击相应存储桶的名称将其打开。
  3. 点击上传文件
  4. 选择要从本地机器上传的视频文件。

您的视频现已保存到 Cloud Storage 存储桶。

创建转码作业

默认情况下,Transcoder API 使用 H.264 编码以及 MP4、HLS 和 MPEG-DASH 包装对视频进行转码。对于每个输入视频,它以高清(1280x720 像素)和标清(640x360 像素)提供输出呈现方式。

要创建作业,请使用 projects.locations.jobs.create 方法。 以下代码示例使用预设创建基本转码作业。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_IDIAM 设置中列出的 Google Cloud 项目 ID。
  • LOCATION:运行作业的位置。请使用其中一个支持的区域
    显示位置
    • us-central1
    • us-west1
    • us-west2
    • us-east1
    • us-east4
    • southamerica-east1
    • northamerica-northeast1
    • asia-east1
    • asia-northeast1
    • asia-northeast3
    • asia-south1
    • asia-southeast1
    • australia-southeast1
    • europe-west1
    • europe-west2
    • europe-west4
    • me-west1
    • me-central1
    • me-central2
  • STORAGE_BUCKET_NAME:您创建的 Cloud Storage 存储分区的名称。
  • STORAGE_INPUT_VIDEO:您要对其进行转码的 Cloud Storage 存储桶中的视频的名称,例如 my-vid.mp4。此字段应考虑您在存储分区中创建的任何文件夹(例如 input/my-vid.mp4)。
  • STORAGE_OUTPUT_FOLDER:您要在其中保存已编码视频输出的 Cloud Storage 文件夹名称。

如需发送您的请求,请展开以下选项之一:

此特定 REST 示例使用可选的 fields 查询参数来仅在显示响应中的已创建的资源名称。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID"
}

gcloud

  1. gcloud 命令进行以下替换:
    • STORAGE_BUCKET_NAME:您创建的 Cloud Storage 存储桶的名称。
    • STORAGE_INPUT_VIDEO:您要对其进行转码的 Cloud Storage 存储桶中的视频的名称,例如 my-vid.mp4。此字段应考虑您在存储分区中创建的任何文件夹(例如 input/my-vid.mp4)。
    • LOCATION:运行作业的位置。请使用其中一个支持的区域
      显示位置
      • us-central1
      • us-west1
      • us-west2
      • us-east1
      • us-east4
      • southamerica-east1
      • northamerica-northeast1
      • asia-east1
      • asia-northeast1
      • asia-northeast3
      • asia-south1
      • asia-southeast1
      • australia-southeast1
      • europe-west1
      • europe-west2
      • europe-west4
      • me-west1
      • me-central1
      • me-central2
    • STORAGE_OUTPUT_FOLDER:您要在其中保存已编码视频输出的 Cloud Storage 文件夹名称。
  2. 运行以下命令:
    gcloud transcoder jobs create \
      --input-uri="gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" \
      --location=LOCATION \
      --output-uri="gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/"
    您应该会看到如下所示的响应:
    {
      "config": {
       ...
      },
      "createTime": CREATE_TIME,
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID",
      "state": "PENDING",
      "ttlAfterCompletionDays": 30
    }
    

C#

在试用此示例之前,请按照《Transcoder API 快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 Transcoder API C# API 参考文档

如需向 Transcoder API 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Video.Transcoder.V1;

public class CreateJobFromPresetSample
{
    public Job CreateJobFromPreset(
        string projectId, string location, string inputUri, string outputUri, string preset)
    {
        // Create the client.
        TranscoderServiceClient client = TranscoderServiceClient.Create();

        // Build the parent location name.
        LocationName parent = new LocationName(projectId, location);

        // Build the job.
        Job newJob = new Job
        {
            InputUri = inputUri,
            OutputUri = outputUri,
            TemplateId = preset
        };

        // Call the API.
        Job job = client.CreateJob(parent, newJob);

        // Return the result.
        return job;
    }
}

Go

在试用此示例之前,请按照《Transcoder API 快速入门:使用客户端库》中的 Go 设置说明进行操作。 如需了解详情,请参阅 Transcoder API Go API 参考文档

如需向 Transcoder API 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

import (
	"context"
	"fmt"
	"io"

	transcoder "cloud.google.com/go/video/transcoder/apiv1"
	"cloud.google.com/go/video/transcoder/apiv1/transcoderpb"
)

// createJobFromPreset creates a job based on a given preset template. See
// https://cloud.google.com/transcoder/docs/how-to/jobs#create_jobs_presets
// for more information.
func createJobFromPreset(w io.Writer, projectID string, location string, inputURI string, outputURI string) error {
	// projectID := "my-project-id"
	// location := "us-central1"
	// inputURI := "gs://my-bucket/my-video-file"
	// outputURI := "gs://my-bucket/my-output-folder/"
	preset := "preset/web-hd"
	ctx := context.Background()
	client, err := transcoder.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	req := &transcoderpb.CreateJobRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		Job: &transcoderpb.Job{
			InputUri:  inputURI,
			OutputUri: outputURI,
			JobConfig: &transcoderpb.Job_TemplateId{
				TemplateId: preset,
			},
		},
	}
	// Creates the job, Jobs take a variable amount of time to run.
	// You can query for the job state.
	response, err := client.CreateJob(ctx, req)
	if err != nil {
		return fmt.Errorf("createJobFromPreset: %w", err)
	}

	fmt.Fprintf(w, "Job: %v", response.GetName())
	return nil
}

Java

在试用此示例之前,请按照《Transcoder API 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Transcoder API Java API 参考文档

如需向 Transcoder API 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证


import com.google.cloud.video.transcoder.v1.CreateJobRequest;
import com.google.cloud.video.transcoder.v1.Job;
import com.google.cloud.video.transcoder.v1.LocationName;
import com.google.cloud.video.transcoder.v1.TranscoderServiceClient;
import java.io.IOException;

public class CreateJobFromPreset {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project-id";
    String location = "us-central1";
    String inputUri = "gs://my-bucket/my-video-file";
    String outputUri = "gs://my-bucket/my-output-folder/";
    // See https://cloud.google.com/transcoder/docs/concepts/overview#job_template
    // for information on this preset.
    String preset = "preset/web-hd";

    createJobFromPreset(projectId, location, inputUri, outputUri, preset);
  }

  // Creates a job from a preset.
  public static void createJobFromPreset(
      String projectId, String location, String inputUri, String outputUri, String preset)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (TranscoderServiceClient transcoderServiceClient = TranscoderServiceClient.create()) {

      CreateJobRequest createJobRequest =
          CreateJobRequest.newBuilder()
              .setJob(
                  Job.newBuilder()
                      .setInputUri(inputUri)
                      .setOutputUri(outputUri)
                      .setTemplateId(preset)
                      .build())
              .setParent(LocationName.of(