在 MediaConvert 中创建和管理转码作业 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

在 MediaConvert 中创建和管理转码作业

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何指定区域特定的端点以用于 MediaConvert。

  • 如何在 MediaConvert 中创建转码作业。

  • 如何取消转码作业。

  • 如何检索已完成转码作业的 JSON。

  • 如何检索最多 20 个最新创建的作业的 JSON 数组。

情景

在此示例中,您使用 Node.js 模块调用 MediaConvert 来创建和管理转码作业。该代码使用 SDK for JavaScript,通过 MediaConvert 客户端类的以下方法来完成此操作:

先决条件任务

要设置和运行此示例,请先完成以下任务:

  • 安装 Node.js。有关更多信息,请参阅 Node.js 网站。

  • 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证

  • 创建和配置 Amazon S3 桶,提供作业输入文件和输出文件的存储。有关详细信息,请参阅《AWS Elemental MediaConvert User Guide》中的 Create Storage for Files

  • 将输入视频上传到您为输入存储预置的 Amazon S3 存储桶。有关支持的输入视频编解码器和容器的列表,请参阅《AWS Elemental MediaConvert User Guide》中的 Supported Input Codecs and Containers

  • 创建一个 IAM 角色,该角色使 MediaConvert 能够访问输入文件以及存储输出文件的 Amazon S3 存储桶。有关详细信息,请参阅《AWS Elemental MediaConvert User Guide》中的 Set Up IAM Permissions

配置 SDK

通过创建全局配置对象然后为代码设置区域,来配置 SDK for JavaScript。在此示例中,区域设置为 us-west-2。由于 MediaConvert 对每个账户使用自定义端点,因此,您还必须配置 AWS.MediaConvert 客户端类以使用您的区域特定端点。为此,您需要在 AWS.config.mediaconvert 上设置 endpoint 参数。

// Load the SDK for JavaScript var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the custom endpoint for your account AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" };

定义简单的转码任务

创建文件名为 emc_createjob.js 的 Node.js 模块。请确保按前面所示配置开发工具包。创建定义转码任务参数的 JSON。

这些参数有非常详细的说明。您可以使用 AWS Elemental MediaConvert 控制台生成 JSON 作业参数,方法是在控制台中选择您的作业设置,然后选择作业部分底部的显示作业 JSON。本示例说明了简单作业的 JSON。

var params = { Queue: "JOB_QUEUE_ARN", UserMetadata: { Customer: "Amazon", }, Role: "IAM_ROLE_ARN", Settings: { OutputGroups: [ { Name: "File Group", OutputGroupSettings: { Type: "FILE_GROUP_SETTINGS", FileGroupSettings: { Destination: "s3://OUTPUT_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: "s3://INPUT_BUCKET_AND_FILE_NAME", }, ], TimecodeConfig: { Source: "EMBEDDED", }, }, };

创建转码作业

在创建作业参数 JSON 后,通过创建 promise 来调用 AWS.MediaConvert 服务对象并传递参数,以此调用 createJob 方法。然后处理 promise 回调中的 response。所创建作业的 ID 在响应 data 中返回。

// Create a promise on a MediaConvert object var endpointPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .createJob(params) .promise(); // Handle promise's fulfilled/rejected status endpointPromise.then( function (data) { console.log("Job created! ", data); }, function (err) { console.log("Error", err); } );

要运行示例,请在命令行中键入以下内容。

node emc_createjob.js

此示例代码可在 GitHub 上的此处找到。

取消转码作业

创建文件名为 emc_canceljob.js 的 Node.js 模块。请确保按前面所示配置开发工具包。创建包含要取消的作业的 ID 的 JSON。然后,通过创建一个 promise 来调用 AWS.MediaConvert 服务对象并传递参数,以此调用 cancelJob 方法。承诺处理响应中的回调。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set MediaConvert to customer endpoint AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { Id: "JOB_ID" /* required */, }; // Create a promise on a MediaConvert object var endpointPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .cancelJob(params) .promise(); // Handle promise's fulfilled/rejected status endpointPromise.then( function (data) { console.log("Job " + params.Id + " is canceled"); }, function (err) { console.log("Error", err); } );

要运行示例,请在命令行中键入以下内容。

node ec2_canceljob.js

此示例代码可在 GitHub 上的此处找到。

列出最近的转码任务

创建文件名为 emc_listjobs.js 的 Node.js 模块。请确保按前面所示配置开发工具包。

创建包括值的参数 JSON,这些值指定是按 ASCENDING 还是 DESCENDING 对列表排序、要检查的作业队列的 ARN,以及要包含的作业的状态。然后,通过创建一个 promise 来调用 AWS.MediaConvert 服务对象并传递参数,以此调用 listJobs 方法。承诺处理响应中的回调。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the customer endpoint AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { MaxResults: 10, Order: "ASCENDING", Queue: "QUEUE_ARN", Status: "SUBMITTED", }; // Create a promise on a MediaConvert object var endpointPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .listJobs(params) .promise(); // Handle promise's fulfilled/rejected status endpointPromise.then( function (data) { console.log("Jobs: ", data); }, function (err) { console.log("Error", err); } );

要运行示例,请在命令行中键入以下内容。

node emc_listjobs.js

此示例代码可在 GitHub 上的此处找到。