AWS SDK for JavaScript V3 API 参考指南详细描述了 AWS SDK for JavaScript 版本 3 (V3) 的所有API操作。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 MediaConvert 中创建和管理转码作业
此 Node.js 代码示例演示:
如何指定区域特定的端点以用于 MediaConvert。
如何在 MediaConvert 中创建转码作业。
如何取消转码作业。
如何检索已完成转码作业的 JSON。
如何检索最多 20 个最新创建的作业的 JSON 数组。
情景
在此示例中,您使用 Node.js 模块调用 MediaConvert 来创建和管理转码作业。该代码使用 SDK for JavaScript,通过 MediaConvert 客户端类的以下方法来完成此操作:
完成先决条件任务
要设置和运行此示例,请先完成以下任务:
-
设置项目环境以运行这些 Node TypeScript 示例,并安装所需的 AWS SDK for JavaScript 和第三方模块。请按照 GitHub
上的说明进行操作。 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅《AWS SDK 和工具参考指南》中的共享配置和凭证文件。
创建和配置 Amazon S3 存储桶,提供作业输入文件和输出文件的存储。有关详细信息,请参阅《AWS Elemental MediaConvert 用户指南》中的创建用于文件的存储。
将输入视频上传到您为输入存储预置的 Amazon S3 存储桶。有关支持的输入视频编解码器和容器的列表,请参阅《AWS Elemental MediaConvert 用户指南》中的支持的输入编解码器和容器。
创建一个 IAM 角色,该角色使 MediaConvert 能够访问输入文件以及存储输出文件的 Amazon S3 存储桶。有关更多信息,请参阅《AWS Elemental MediaConvert 用户指南》中的设置 IAM 权限。
重要
此示例使用 ECMAScript6 (ES6)。这需要使用 Node.js 版本 13.x 或更高版本。要下载并安装最新版本的 Node.js,请参阅 Node.js 下载
但是,如果您更喜欢使用 CommonJS 语法,请参阅 JavaScript ES6/CommonJS 语法。
配置 SDK
如前所示配置 SDK,包括下载所需的客户端和软件包。由于 MediaConvert 对每个账户使用自定义端点,因此,您还必须配置 MediaConvert
客户端类以使用您的区域特定的端点。为此,您需要在 mediaconvert(endpoint)
上设置 endpoint
参数。
// Import required AWS-SDK clients and commands for Node.js import { CreateJobCommand } from "@aws-sdk/client-mediaconvert"; import { emcClient } from "./libs/emcClient.js";
定义简单的转码作业
创建一个 libs
目录,然后使用文件名 emcClient.js
创建一个 Node.js 模块。将下面的代码复制并粘贴到其中,这将创建 MediaConvert 客户端对象。将 REGION
替换为您的 AWS 区域。将 ENDPOINT
替换为您的 MediaConvert 账户端点,您可以在 MediaConvert 控制台的账户页面上获取该端点。
import { MediaConvertClient } from "@aws-sdk/client-mediaconvert"; // Set the account end point. const ENDPOINT = { endpoint: "https://ENDPOINT_UNIQUE_STRING.mediaconvert.REGION.amazonaws.com", }; // Set the MediaConvert Service Object const emcClient = new MediaConvertClient(ENDPOINT); export { emcClient };
此示例代码可在 GitHub 上的此处
创建文件名为 emc_createjob.js
的 Node.js 模块。确保如前所示配置 SDK,包括安装所需的客户端和软件包。创建定义转码任务参数的 JSON。
这些参数有非常详细的说明。您可以使用 AWS Elemental MediaConvert 控制台
注意
将 JOB_QUEUE_ARN
替换为 M ediaConvert 作业队列,将 IAM_ROLE_ARN
替换为 IAM 角色的 Amazon 资源名称 (ARN),将 OUTPUT_BUCKET_NAME
替换为目标存储桶名称(例如“s3://OUTPUT_BUCKET_NAME/”),将 INPUT_BUCKET_AND_FILENAME
替换为输入存储桶和文件名,例如“s3://INPUT_BUCKET/FILE_NAME”。
const params = { Queue: "JOB_QUEUE_ARN", //JOB_QUEUE_ARN UserMetadata: { Customer: "Amazon", }, Role: "IAM_ROLE_ARN", //IAM_ROLE_ARN Settings: { OutputGroups: [ { Name: "File Group", OutputGroupSettings: { Type: "FILE_GROUP_SETTINGS", FileGroupSettings: { Destination: "OUTPUT_BUCKET_NAME", //OUTPUT_BUCKET_NAME, e.g., "s3://BUCKET_NAME/" }, }, Outputs: [ { VideoDescription: { ScalingBehavior: "DEFAULT", TimecodeInsertion: "DISABLED", AntiAlias: "ENABLED", Sharpness: 50, CodecSettings: { Codec: "H_264", H264Settings: { InterlaceMode: "PROGRESSIVE", NumberReferenceFrames: 3, Syntax: "DEFAULT", Softness: 0, GopClosedCadence: 1, GopSize: 90, Slices: 1, GopBReference: "DISABLED", SlowPal: "DISABLED", SpatialAdaptiveQuantization: "ENABLED", TemporalAdaptiveQuantization: "ENABLED", FlickerAdaptiveQuantization: "DISABLED", EntropyEncoding: "CABAC", Bitrate: 5000000, FramerateControl: "SPECIFIED", RateControlMode: "CBR", CodecProfile: "MAIN", Telecine: "NONE", MinIInterval: 0, AdaptiveQuantization: "HIGH", CodecLevel: "AUTO", FieldEncoding: "PAFF", SceneChangeDetect: "ENABLED", QualityTuningLevel: "SINGLE_PASS", FramerateConversionAlgorithm: "DUPLICATE_DROP", UnregisteredSeiTimecode: "DISABLED", GopSizeUnits: "FRAMES", ParControl: "SPECIFIED", NumberBFramesBetweenReferenceFrames: 2, RepeatPps: "DISABLED", FramerateNumerator: 30, FramerateDenominator: 1, ParNumerator: 1, ParDenominator: 1, }, }, AfdSignaling: "NONE", DropFrameTimecode: "ENABLED", RespondToAfd: "NONE", ColorMetadata: "INSERT", }, AudioDescriptions: [ { AudioTypeControl: "FOLLOW_INPUT", CodecSettings: { Codec: "AAC", AacSettings: { AudioDescriptionBroadcasterMix: "NORMAL", RateControlMode: "CBR", CodecProfile: "LC", CodingMode: "CODING_MODE_2_0", RawFormat: "NONE", SampleRate: 48000, Specification: "MPEG4", Bitrate: 64000, }, }, LanguageCodeControl: "FOLLOW_INPUT", AudioSourceName: "Audio Selector 1", }, ], ContainerSettings: { Container: "MP4", Mp4Settings: { CslgAtom: "INCLUDE", FreeSpaceBox: "EXCLUDE", MoovPlacement: "PROGRESSIVE_DOWNLOAD", }, }, NameModifier: "_1", }, ], }, ], AdAvailOffset: 0, Inputs: [ { AudioSelectors: { "Audio Selector 1": { Offset: 0, DefaultSelection: "NOT_DEFAULT", ProgramSelection: 1, SelectorType: "TRACK", Tracks: [1], }, }, VideoSelector: { ColorSpace: "FOLLOW", }, FilterEnable: "AUTO", PsiControl: "USE_PSI", FilterStrength: 0, DeblockFilter: "DISABLED", DenoiseFilter: "DISABLED", TimecodeSource: "EMBEDDED", FileInput: "INPUT_BUCKET_AND_FILENAME", //INPUT_BUCKET_AND_FILENAME, e.g., "s3://BUCKET_NAME/FILE_NAME" }, ], TimecodeConfig: { Source: "EMBEDDED", }, }, };
创建转码作业
在创建作业参数 JSON 后,调用异步 run
方法以调用 MediaConvert
客户端服务对象并传递参数。所创建作业的 ID 在响应 data
中返回。
const run = async () => { try { const data = await emcClient.send(new CreateJobCommand(params)); console.log("Job created!", data); return data; } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符中键入以下内容。
node emc_createjob.js
此完整示例代码可在 GitHub 上的此处
取消转码作业
创建一个 libs
目录,然后使用文件名 emcClient.js
创建一个 Node.js 模块。将下面的代码复制并粘贴到其中,这将创建 MediaConvert 客户端对象。将 REGION
替换为您的 AWS 区域。将 ENDPOINT
替换为您的 MediaConvert 账户端点,您可以在 MediaConvert 控制台的账户页面上获取该端点。
import { MediaConvertClient } from "@aws-sdk/client-mediaconvert"; // Set the account end point. const ENDPOINT = { endpoint: "https://ENDPOINT_UNIQUE_STRING.mediaconvert.REGION.amazonaws.com", }; // Set the MediaConvert Service Object const emcClient = new MediaConvertClient(ENDPOINT); export { emcClient };
此示例代码可在 GitHub 上的此处
创建文件名为 emc_canceljob.js
的 Node.js 模块。请务必如前所示配置 SDK,包括下载所需的客户端和软件包。创建包含要取消的作业的 ID 的 JSON。然后,通过创建一个 promise 来调用 MediaConvert
客户端服务对象并传递参数,以此调用 CancelJobCommand
方法。处理 promise 回调中的响应。
注意
将 JOB_ID
替换为要取消的作业的 ID。
// Import required AWS-SDK clients and commands for Node.js import { CancelJobCommand } from "@aws-sdk/client-mediaconvert"; import { emcClient } from "./libs/emcClient.js"; // Set the parameters const params = { Id: "JOB_ID" }; //JOB_ID const run = async () => { try { const data = await emcClient.send(new CancelJobCommand(params)); console.log("Job " + params.Id + " is canceled"); return data; } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符中键入以下内容。
node ec2_canceljob.js
此示例代码可在 GitHub 上的此处
列出最近的转码作业
创建一个 libs
目录,然后使用文件名 emcClient.js
创建一个 Node.js 模块。将下面的代码复制并粘贴到其中,这将创建 MediaConvert 客户端对象。将 REGION
替换为您的 AWS 区域。将 ENDPOINT
替换为您的 MediaConvert 账户端点,您可以在 MediaConvert 控制台的账户页面上获取该端点。
import { MediaConvertClient } from "@aws-sdk/client-mediaconvert"; // Set the account end point. const ENDPOINT = { endpoint: "https://ENDPOINT_UNIQUE_STRING.mediaconvert.REGION.amazonaws.com", }; // Set the MediaConvert Service Object const emcClient = new MediaConvertClient(ENDPOINT); export { emcClient };
此示例代码可在 GitHub 上的此处
创建文件名为 emc_listjobs.js
的 Node.js 模块。确保如前所示配置 SDK,包括安装所需的客户端和软件包。
创建包括值的参数 JSON,这些值指定是按 ASCENDING
还是 DESCENDING
对列表排序、要检查的作业队列的 Amazon 资源名称 (ARN),以及要包含的作业的状态。然后,通过创建一个 promise 来调用 MediaConvert
客户端服务对象并传递参数,以此调用 ListJobsCommand
方法。
注意
将 QUEUE_ARN
替换为要检查的作业队列的 Amazon 资源名称 (ARN),将 STATUS
替换为队列的状态。
// Import required AWS-SDK clients and commands for Node.js import { ListJobsCommand } from "@aws-sdk/client-mediaconvert"; import { emcClient } from "./libs/emcClient.js"; // Set the parameters const params = { MaxResults: 10, Order: "ASCENDING", Queue: "QUEUE_ARN", Status: "SUBMITTED", // e.g., "SUBMITTED" }; const run = async () => { try { const data = await emcClient.send(new ListJobsCommand(params)); console.log("Success. Jobs: ", data.Jobs); } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符中键入以下内容。
node emc_listjobs.js
此示例代码可在 GitHub 上的此处