AWS SDK 示例代码 - Amazon Elastic Transcoder

通过以下方式节省成本并获得更多功能 AWS Elemental MediaConvert

MediaConvert 是一项较新的基于文件的视频转码服务,它提供了一套全面的高级转码功能,按需费率起价为每分钟 0.0075 美元。阅读更多

已经在使用 Amazon Elastic Transcoder? 迁移到很简单 MediaConvert。有关更多信息,请参阅本概述,其中包含有关迁移过程的重要信息以及指向其他资源的链接。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS SDK 示例代码

此部分提供示例代码,用于演示如何使用适用于 Java、Ruby、PHP 和 Python 的 AWS SDK 执行以下操作:

  • 在 Amazon Elastic Transcoder 中创建 HLS 播放列表

  • 在 Elastic Transcoder 中创建任务

  • 轮询 Amazon Simple Queue Service (Amazon SQS) 队列

  • 解析来自 Amazon Simple Notification Service (Amazon SNS) 的通知

  • 处理来自 Amazon SNS 的通知

这些操作代表了 Elastic Transcoder 的最佳实践。轮询 Amazon SQS 队列可实现长轮询,与普通轮询相比,该轮询能够更高效地扩展;而设置 Amazon SNS 通知使 Elastic Transcoder 能够将消息发送至 Amazon SQS 队列。

示例代码演示如何为 HLS(HTTP 实时流)进行转码,以及在从 Amazon SQS 队列中删除此流后如何处理 Amazon SNS 通知。

如果您使用的语言有对应的 SDK,建议您使用该 SDK 而不是尝试通过 API 自行操作。您会发现使用 SDK 可简化身份验证,轻松与您的开发环境集成,并可让您轻松访问相关命令。

AWS SDK 示例代码的背景

HTTP 实时流 (HLS)

您可以使用 HTTP 实时流 (HLS) 输出向支持 HLS 的播放器提供自适应位元速率的内容。支持 HLS 的设备包括 Android 4+ 设备、iOS 设备、QuickTime 或 VLC 等桌面媒体播放器以及 jwplayer 等浏览器播放器。自适应位元速率允许您根据客户端连接的质量自动调整所交付内容的质量。

通知

如果您轮询 Elastic Transcoder 的 ReadJob API 来跟踪任务状态,则需要持续调用每个提交任务的 ReadJob。这种方法无法随着转码任务数量的增加而扩展。为了解决这个问题,Elastic Transcoder 可以向 Amazon SNS 发布通知,后者提供了一种事件驱动的机制来跟踪任务状态。

每条 Elastic Transcoder 通知都以 Message 字段中的 JSON 对象形式发送。由于通知本身是以 JSON 格式发送的,因此您需要逃避消息字符串中的 Elastic Transcoder 通知。有关 Elastic Transcoder 通知的格式和内容的信息,请参阅通知部分。

在编写用于处理任务状态通知的自定义代码时,请遵循以下最佳实践:

  • 处理程序必须具有幂等性。通知可能会多次发送。

  • 处理程序必须支持乱序通知。通知可能会出现乱序发送的情况。

  • 处理程序必须能够处理任何任务的通知。无法保证特定任务的通知会发送给特定的工作人员。

  • 处理程序应该是短操作。必须在可见性超时前处理并删除所有消息。如果可见性超时为 15 秒,并且 Amazon SQS 最多返回 5 条消息,则每条消息都必须在 3 秒内处理完毕并从队列中删除。如果处理时间超过此时间,则未处理的消息将超时并发送给其他工作人员。

对于 Java、Python 和 Ruby,我们建议您通过轮询订阅了通知主题的 Amazon SQS 队列来使用通知。由于 Amazon SQS 使用长轮询机制,因此轮询 Amazon SQS 队列是一种可扩展的任务通知使用方法。Amazon SQS 还简化了主机故障或高负载时的可用性和扩展,通常不需要特殊的 ACL 设置。

对于在 Apache 中运行的 PHP,我们建议您直接为端点订阅 Amazon SNS 主题。这就要求您的端点是公开可用的,因为 Amazon SNS 需要能够直接向您推送通知。

设置环境

要运行示例代码,您需要设置 AWS 环境。此部分将引导您完成设置过程,并演示如何创建 Elastic Transcoder 以最佳方式工作时需要的 AWS 资源。

设置 Java 环境

此部分引导您完成 Java 环境的设置。

示例代码基于两个主要假设:

  • 编写的示例用于 Java 版本 1.6 或更高版本。

  • 示例使用带 AWS Toolkit for Eclipse 的 Eclipse 运行。

设置适用于 Java 的 AWS SDK

这些示例假设您使用 AWS Toolkit for Eclipse。需要适用于 Java 的 AWS SDK和下列 Jackson JSON 处理器 JAR 文件:

  • Jackson Core

  • Jackson Databind

  • Jackson Annotations

Jackson JSON 处理器处理任务状态通知。

另外,如果您使用 Maven 来管理依赖项,可以将以下代码段添加到 pom.xml 文件中:

版本属性:

<jackson-2-version>2.2.3</jackson-2-version>

附属物:

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-2-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-2-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-2-version}</version> </dependency>

有关更多信息,请参阅适用于 Java 的 AWS SDK 文档

创建 Amazon S3 输入和输出存储桶

  1. 打开 Amazon S3 控制台

  2. 在控制台中,单击创建存储桶

  3. 存储桶名称字段,输入所需的输入存储桶名称。

  4. 仍在 Amazon S3 控制台中,再次单击创建存储桶

  5. 存储桶名称字段,输入所需的输出存储桶名称。

创建 Amazon SNS 主题以接收任务状态通知

  1. 打开 Amazon SNS 控制台

  2. 在控制台中,单击创建并添加,然后选择创建新主题

  3. 主题名称字段中,输入 ets-sample-topic,然后单击创建主题

  4. 记录下 ets-sample-topic 的 ARN。

创建 Amazon SQS 队列以轮询任务状态通知

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,单击创建新队列

  3. 队列名称字段中,输入 ets-sample-queue,然后单击创建队列

  4. 记录下 Amazon SQS 队列的网址。

为 Amazon SQS 队列订阅 Amazon SNS 主题

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,从队列列表中选择 ets-sample-queue

  3. 队列操作下,选择订阅 Amazon SNS 主题的队列

  4. 选择主题 下,选择 ets-sample-topic,然后单击订阅

您应该会看到一条队列已成功订阅主题的确认消息。

创建 Elastic Transcoder 管道

  1. 打开 Amazon Elastic Transcoder 控制台

  2. 在控制台中,单击创建新管道

  3. 管道名称字段中,输入 ets-sample-pipeline

  4. 输入存储桶字段中,输入输入存储桶的名称。

  5. IAM 角色保留为 Console Default Role

  6. 为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。

  7. 仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别

  8. 展开通知下拉菜单。

  9. 对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择ets-sample-topic

  10. 单击创建管道

  11. 记录 Elastic Transcoder 管道 ID。

创建 Amazon CloudFront 分配以通过可扩展方式分发内容

  1. 打开 Amazon CloudFront 控制台

  2. 在控制台的导航窗格中,展开私有内容,然后单击原始访问身份

  3. 选择创建原始访问身份

  4. 单击创建

  5. 记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。

  6. 在导航窗格中,单击分配

  7. 单击创建分配

  8. 选择 Web,然后单击继续

  9. 原始设置下,输入 Amazon S3 输出存储桶作为原始域名

  10. 原始 ID字段中,输入 S3-transcoder-sample-output

  11. 限制存储桶访问 选择

  12. 单击创建分配,然后记录分配的域名。

修改 Amazon S3 存储桶策略

  1. 打开 Amazon S3 控制台

  2. 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。

  3. 展开权限,然后单击添加存储桶策略

  4. 输入以下策略语句,用 your recorded Amazon S3 canonical user ID 替换为 CloudFront-oai-s3-canonical-user-id,用the name of your output bucket替换为 s3-output-bucket-name

  5. 单击保存

{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[{ "Sid":" Granting CloudFront OAI access to private content", "Effect":"Allow", "Principal":{ "CanonicalUser":"<CloudFront-oai-s3-canonical-user-id>" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::<s3-output-bucket-name>/*" }] }

跳至 Java 示例

设置 Ruby 环境

此部分引导您完成 Ruby 环境的设置。

示例代码基于一个主要假设:

  • 编写的示例与 Ruby 版本 1.9 兼容。

设置适用于 Ruby 的 AWS SDK

此处可获得适用于 Ruby 的 AWS SDK。通过使用以下命令,可以使用 Ruby gem 轻松安装它:

gem install aws-sdk

有关更多信息,请参阅适用于 Ruby 的 AWS SDK 文档

创建 Amazon S3 输入和输出存储桶

  1. 打开 Amazon S3 控制台

  2. 在控制台中,单击创建存储桶

  3. 存储桶名称字段,输入所需的输入存储桶名称。

  4. 仍在 Amazon S3 控制台中,再次单击创建存储桶

  5. 存储桶名称字段,输入所需的输出存储桶名称。

创建 Amazon SNS 主题以接收任务状态通知

  1. 打开 Amazon SNS 控制台

  2. 在控制台中,单击创建并添加,然后选择创建新主题

  3. 主题名称字段中,输入 ets-sample-topic,然后单击创建主题

  4. 记录下 ets-sample-topic 的 ARN。

创建 Amazon SQS 队列以轮询任务状态通知

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,单击创建新队列

  3. 队列名称字段中,输入 ets-sample-queue,然后单击创建队列

  4. 记录下 Amazon SQS 队列的网址。

为 Amazon SQS 队列订阅 Amazon SNS 主题

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,从队列列表中选择 ets-sample-queue

  3. 队列操作下,选择订阅 Amazon SNS 主题的队列

  4. 选择主题 下,选择 ets-sample-topic,然后单击订阅

您应该会看到一条队列已成功订阅主题的确认消息。

创建 Elastic Transcoder 管道

  1. 打开 Amazon Elastic Transcoder 控制台

  2. 在控制台中,单击创建新管道

  3. 管道名称字段中,输入 ets-sample-pipeline

  4. 输入存储桶字段中,输入输入存储桶的名称。

  5. IAM 角色保留为 Console Default Role

  6. 为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。

  7. 仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别

  8. 展开通知下拉菜单。

  9. 对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择 ets-sample-topic

  10. 单击创建管道

  11. 记录 Elastic Transcoder 管道 ID。

创建 Amazon CloudFront 分配以通过可扩展方式分发内容

  1. 打开 Amazon CloudFront 控制台

  2. 在控制台的导航窗格中,展开私有内容,然后单击原始访问身份

  3. 选择创建原始访问身份

  4. 单击创建

  5. 记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。

  6. 在导航窗格中,单击分配

  7. 单击创建分配

  8. 选择 Web,然后单击继续

  9. 原始设置下,输入 Amazon S3 输出存储桶作为原始域名

  10. 原始 ID字段中,输入 S3-transcoder-sample-output

  11. 限制存储桶访问 选择

  12. 单击创建分配,然后记录分配的域名。

修改 Amazon S3 存储桶策略

  1. 打开 Amazon S3 控制台

  2. 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。

  3. 展开权限,然后单击添加存储桶策略

  4. 输入以下策略语句,用 your recorded Amazon S3 canonical user ID 替换为 CloudFront-oai-s3-canonical-user-id,用 the name of your output bucket 替换为 s3-output-bucket-name

  5. 单击保存

{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[{ "Sid":" Granting CloudFront OAI access to private content", "Effect":"Allow", "Principal":{ "CanonicalUser":"<CloudFront-oai-s3-canonical-user-id>" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::<s3-output-bucket-name>/*" }] }

跳至 Ruby 示例

设置 PHP 环境

此部分引导您完成 PHP 环境的设置。

示例代码基于三个主要假设:

  • PHP 示例在 Apache 服务器上运行。

  • Apache 服务器必须能够获取来自 Internet 的输入才能接收 Amazon SNS 通知。

  • 编写的示例用于 PHP 版本 5.4 或更高版本。

安装示例代码。

要使用 PHP 示例代码,必须先下载和安装它。

  • 下载示例代码:

  • 将示例代码解压缩。

  • 将代码保存到 Apache 服务器的 DocumentRoot 下。

  • 删除下载的示例代码的 .zip 文件。

  • 更新安装 AWS SDK 的路径。

注意

HlsJobCreationSample.phpJobStatusNotificationsSample.php 中,您需要将路径更新为 autoload.php。如果您使用 phar 安装,可以使用指向已下载 aws.phar 文件的路径,其中包括所有必需的依赖项。

设置适用于 PHP 的 AWS SDK

此处可获得适用于 PHP 的 AWS SDK。在本教程中,我们建议使用 phar 安装;但对于长期项目,使用编译程序进行管理效果更好。

有关更多信息,请参阅适用于 PHP 的 AWS SDK 文档

创建 Amazon S3 输入和输出存储桶

  1. 打开 Amazon S3 控制台

  2. 在控制台中,单击创建存储桶

  3. 存储桶名称字段,输入所需的输入存储桶名称。

  4. 仍在 Amazon S3 控制台中,再次单击创建存储桶

  5. 存储桶名称字段,输入所需的输出存储桶名称。

创建 Amazon SNS 主题以接收任务状态通知

  1. 打开 Amazon SNS 控制台

  2. 在控制台中,单击创建并添加,然后选择创建新主题

  3. 主题名称字段中,输入 ets-sample-topic,然后单击创建主题

  4. 记录下 ets-sample-topic 的 ARN。

为服务器订阅 Amazon SNS

  1. 验证是否已安装 PHP 示例代码。

  2. 打开 Amazon SNS 控制台

  3. AdditionalActions 下,单击创建订阅

  4. 根据您的服务器配置,选择 HTTP 或 HTTPS。

  5. 端点中,输入服务器的端点。端点的路径应指向 JobStatusNotificationsSampleNotificationHandler.php

  6. 单击订阅。这会向 PHP 端点发送一个订阅请求。

PHP 示例代码将自动处理订阅请求并确认订阅。该订阅请求和响应将写入 /tmp/subscribe_requests.txt

创建 Elastic Transcoder 管道

  1. 打开 Amazon Elastic Transcoder 控制台

  2. 在控制台中,单击创建新管道

  3. 管道名称字段中,输入 ets-sample-pipeline

  4. 输入存储桶字段中,输入输入存储桶的名称。

  5. IAM 角色保留为 Console Default Role

  6. 为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。

  7. 仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别

  8. 展开通知下拉菜单。

  9. 对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择 ets-sample-topic

  10. 单击创建管道

  11. 记录 Elastic Transcoder 管道 ID。

创建 Amazon CloudFront 分配以通过可扩展方式分发内容

  1. 打开 Amazon CloudFront 控制台

  2. 在控制台的导航窗格中,展开私有内容,然后单击原始访问身份

  3. 选择创建原始访问身份

  4. 单击创建

  5. 记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。

  6. 在导航窗格中,单击分配

  7. 单击创建分配

  8. 选择 Web,然后单击继续

  9. 原始设置下,输入 Amazon S3 输出存储桶作为原始域名

  10. 原始 ID字段中,输入 S3-transcoder-sample-output

  11. 限制存储桶访问 选择

  12. 单击创建分配,然后记录分配的域名。

修改 Amazon S3 存储桶策略

  1. 打开 Amazon S3 控制台

  2. 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。

  3. 展开权限,然后单击添加存储桶策略

  4. 输入以下策略语句,用 your recorded Amazon S3 canonical user ID 替换为 CloudFront-oai-s3-canonical-user-id,用 the name of your output bucket 替换为 s3-output-bucket-name

  5. 单击保存

{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[{ "Sid":" Granting CloudFront OAI access to private content", "Effect":"Allow", "Principal":{ "CanonicalUser":"<CloudFront-oai-s3-canonical-user-id>" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::<s3-output-bucket-name>/*" }] }

跳至 PHP 示例

设置 Python 环境

此部分引导您完成 Python 环境的设置。

它基于一个主要假设:

  • 编写的示例与 Python 版本 2.7 兼容。

设置适用于 Python 的 AWS SDK

此处可获得适用于 Python 的 AWS SDK。也通过使用以下命令,使用 PIP 轻松安装它:

pip-2.7 install boto

有关更多信息,请参阅适用于 Python 的 AWS SDK 文档

创建 Amazon S3 输入和输出存储桶

  1. 打开 Amazon S3 控制台

  2. 在控制台中,单击创建存储桶

  3. 存储桶名称字段,输入所需的输入存储桶名称。

  4. 仍在 Amazon S3 控制台中,再次单击创建存储桶

  5. 存储桶名称字段,输入所需的输出存储桶名称。

创建 Amazon SNS 主题以接收任务状态通知

  1. 打开 Amazon SNS 控制台

  2. 在控制台中,单击创建并添加,然后选择创建新主题

  3. 主题名称字段中,输入 ets-sample-topic,然后单击创建主题

  4. 记录下 ets-sample-topic 的 ARN。

创建 Amazon SQS 队列以轮询任务状态通知

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,单击创建新队列

  3. 队列名称字段中,输入 ets-sample-queue,然后单击创建队列

  4. 记录下 Amazon SQS 队列的网址。

为 Amazon SQS 队列订阅 Amazon SNS 主题

  1. 打开 Amazon SQS 控制台

  2. 在控制台中,从队列列表中选择 ets-sample-queue

  3. 队列操作下,选择订阅 Amazon SNS 主题的队列

  4. 选择主题 下,选择 ets-sample-topic,然后单击订阅

您应该会看到一条队列已成功订阅主题的确认消息。

创建 Elastic Transcoder 管道

  1. 打开 Amazon Elastic Transcoder 控制台

  2. 在控制台中,单击创建新管道

  3. 管道名称字段中,输入 ets-sample-pipeline

  4. 输入存储桶字段中,输入输入存储桶的名称。

  5. IAM 角色保留为 Console Default Role

  6. 为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。

  7. 仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别

  8. 展开通知下拉菜单。

  9. 对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择 ets-sample-topic

  10. 单击创建管道

  11. 记录 Elastic Transcoder 管道 ID。

创建 Amazon CloudFront 分配以通过可扩展方式分发内容

  1. 打开 Amazon CloudFront 控制台

  2. 在控制台的导航窗格中,展开私有内容,然后单击原始访问身份

  3. 选择创建原始访问身份

  4. 单击创建

  5. 记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。

  6. 在导航窗格中,单击分配

  7. 单击创建分配

  8. 选择 Web,然后单击继续

  9. 原始设置下,输入 Amazon S3 输出存储桶作为原始域名

  10. 原始 ID字段中,输入 S3-transcoder-sample-output

  11. 限制存储桶访问 选择

  12. 单击创建分配,然后记录分配的域名。

修改 Amazon S3 存储桶策略

  1. 打开 Amazon S3 控制台

  2. 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。

  3. 展开权限,然后单击添加存储桶策略

  4. 输入以下策略语句,用 your recorded Amazon S3 canonical user ID 替换为 CloudFront-oai-s3-canonical-user-id,用 the name of your output bucket 替换为 s3-output-bucket-name

  5. 单击保存

{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[{ "Sid":" Granting CloudFront OAI access to private content", "Effect":"Allow", "Principal":{ "CanonicalUser":"<CloudFront-oai-s3-canonical-user-id>" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::<s3-output-bucket-name>/*" }] }

跳至 Python 示例

Java 示例

所有 Java 示例基于两个假设:

  • 编写的示例用于 Java 版本 1.6 或更高版本。

  • 示例使用带 AWS Toolkit for Eclipse 的 Eclipse 运行。

HLS 示例

该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。

您可以在此处下载示例代码。

示例代码片段

Java 代码示例包括:

  • HlsJobCreationSample

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Java 环境

  2. 下载示例代码。

  3. 在 Eclipse 中打开 com/amazonaws/services/elastictranscoder/samples/HlsJobCreationSample.java

  4. 使用适当的值替换 PIPELINE_ID 和 INPUT_KEY。

  5. 在 Eclipse 中运行示例。

通知示例

通知语法示例

{ "Type" : "Notification", "MessageId" : "341527b6-9081-5f3d-b933-6c8472c3be40", "TopicArn" : "arn:aws:sns:us-east-1:123456789012:ets-sample-topic", "Subject" : "Amazon Elastic Transcoder has scheduled job 1387847681009 -abcdef for transcoding.", "Message" : "{\n \"state\" : \"PROGRESSING\",\n \"version\" : \"2012-09-25\",\n \"jobId\" : \"1387847681009-abcdef\", \n \"pipelineId\" : \"1387847629327-fedcba\",\n \"input\" : {\n \"key\" : \"input/example/key.mp4\",\n \"frameRate\" : \"auto\",\n \"resolution\" : \"auto\",\n \"aspectRatio\" : \"auto\",\n \"interlaced\" : \"auto\",\n \"container\" : \"auto\"\n },\n \"outputKeyPrefix\" : \"elastic-transcoder-samples/\",\n \"outputs\" : [ {\n \"id\" : \"1\",\n \"presetId\" : \"1351620000001-000020\",\n \"key\" : \"output/example/key.mp4\",\n \"thumbnailPattern\" : \"\",\n \"rotate\" : \"auto\",\n \"status\" : \"Progressing\"\n } ]\n}", "Timestamp" : "2013-12-24T01:14:42.493Z", "SignatureVersion" : "1", "Signature" : "ElSqJW3ZksCPViYGTayI/p+LjdF2HB42iJlIJRJ+jWzWwygXdiJXvZXl94qhd/tLln1lxPqijjivb5RWu7n5yzdZwbod6lpLwyZ2TfWM6dZt57OzsG3GbdTxgqwVsztVSyWCYhcV8f+CrT3IQrfrU3Me/SRYVUqrSUXXsu4Ls7A2q9mosG7v0Sn+3Z1rAa9+Rf6QmkfAg05UX0sLyA+I2hFqTu5oAGDK4Cm6FHuIwV+oYJXNBbGWuS7tD6mRNwrYvPBlUvBLXx9m3CbqSXv5Yoj39vglv+1djtaLA3GpwX+B1hHx8QT373lgmmsmGDRWhSQretpOTWDYb81PV2K0bg==", "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-e372f8ca30337fdb084e8ac449342c77.pem", "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action= Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:ets- sample-topic:b3ec47e5-e1f0-401f-a0a5-98c7fe405c2b" }

您可以在此处下载示例代码。

示例代码片段

Java 代码示例包括:

  • Notification 类:为了在 Java 中使用通知,我们使用 Jackson JSON 库将任务状态通知反序列化到 POJO 中。Notification 类模拟我们从 Amazon SQS 队列获得的消息。

  • JobStatusNotification 类:JobStatusNotification 类模拟 Elastic Transcoder 通知。

  • SqsQueueNotificationWorker 类:SqsQueueNotificationWorker 类可以在单独线程中启动,以轮询 Amazon SQS 并处理任务状态通知。该类接收消息,为接收的每条通知调用所有注册的处理程序,并从队列中删除消息。

  • JobStatusNotificationHandler 接口:可以实施 JobStatusNotificationHandler 接口以支持对通知进行自定义处理。

  • JobStatusNotificationsSample 类:JobStatusNotificationsSample 类会创建任务并等待任务完成。当任务进入最终状态时,该队列的工作线程会关闭且应用程序退出。

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Java 环境

  2. 下载示例代码。

  3. 将示例代码解压缩到 JAVA 项目的源目录中。

  4. 在 Eclipse 中打开 com/amazonaws/services/elastictranscoder/samples/JobStatusNotificationsSample.java

  5. 使用适当的值替换 PIPELINE_ID、SQS_QUEUE_URL 和 INPUT_KEY。

  6. 在 Eclipse 中运行示例。

Ruby 示例

所有 Ruby 示例基于一个主要假设:

  • 编写的示例与 Ruby 版本 1.9 兼容。

HLS 示例

该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。

您可以在此处下载示例代码。

示例代码片段

Ruby 代码示例包括:

  • HlsJobCreationSample.rb 文件

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Ruby 环境

  2. 下载示例代码。

  3. 将示例代码解压缩到 Ruby 项目的源目录中。

  4. 编辑 HlsJobCreationSample.rb,使用适当的值替换 pipeline_id 和 input_key。

  5. 从终端导航到将示例代码解压缩到其中的目录并运行:

$ruby HlsJobCreationSample.rb

通知示例

通知语法示例

{ "Type" : "Notification", "MessageId" : "341527b6-9081-5f3d-b933-6c8472c3be40", "TopicArn" : "arn:aws:sns:us-east-1:123456789012:ets-sample-topic", "Subject" : "Amazon Elastic Transcoder has scheduled job 1387847681009 -abcdef for transcoding.", "Message" : "{\n \"state\" : \"PROGRESSING\",\n \"version\" : \"2012-09-25\",\n \"jobId\" : \"1387847681009-abcdef\", \n \"pipelineId\" : \"1387847629327-fedcba\",\n \"input\" : {\n \"key\" : \"input/example/key.mp4\",\n \"frameRate\" : \"auto\",\n \"resolution\" : \"auto\",\n \"aspectRatio\" : \"auto\",\n \"interlaced\" : \"auto\",\n \"container\" : \"auto\"\n },\n \"outputKeyPrefix\" : \"elastic-transcoder-samples/\",\n \"outputs\" : [ {\n \"id\" : \"1\",\n \"presetId\" : \"1351620000001-000020\",\n \"key\" : \"output/example/key.mp4\",\n \"thumbnailPattern\" : \"\",\n \"rotate\" : \"auto\",\n \"status\" : \"Progressing\"\n } ]\n}", "Timestamp" : "2013-12-24T01:14:42.493Z", "SignatureVersion" : "1", "Signature" : "ElSqJW3ZksCPViYGTayI/p+LjdF2HB42iJlIJRJ+jWzWwygXdiJXvZXl94qhd/tLln1lxPqijjivb5RWu7n5yzdZwbod6lpLwyZ2TfWM6dZt57OzsG3GbdTxgqwVsztVSyWCYhcV8f+CrT3IQrfrU3Me/SRYVUqrSUXXsu4Ls7A2q9mosG7v0Sn+3Z1rAa9+Rf6QmkfAg05UX0sLyA+I2hFqTu5oAGDK4Cm6FHuIwV+oYJXNBbGWuS7tD6mRNwrYvPBlUvBLXx9m3CbqSXv5Yoj39vglv+1djtaLA3GpwX+B1hHx8QT373lgmmsmGDRWhSQretpOTWDYb81PV2K0bg==", "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-e372f8ca30337fdb084e8ac449342c77.pem", "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action= Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:ets- sample-topic:b3ec47e5-e1f0-401f-a0a5-98c7fe405c2b" }

您可以在此处下载示例代码。

示例代码片段

Ruby 代码示例包括:

  • SqsQueueNotificationWorker 类:SqsQueueNotificationWorker 类轮询 Amazon SQS 中的通知,为每条通知调用注册的所有处理程序,并从队列中删除消息。请注意,工作线程在单独的线程中运行。如果使用的 Ruby 实施具有“绿色”线程,则每次仅运行单一线程(不是真正的多处理)。

  • JobStatusNotificationsSample.rb 脚本:该脚本将创建一个 Elastic Transcoder 任务,启动 Amazon SQ 工作线程并等待任务完成。提供的处理程序在所创建任务的处理完成时通知 Amazon SQS 工作线程停止。处理通知的方法是调用 add_handlers 方法,并提供使用单一参数的 Proc 或 lambda 作为处理程序。对于接收的每条通知,会调用所有注册的处理程序,并提供通知作为处理程序的输入参数。

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Ruby 环境

  2. 下载示例代码。

  3. 将示例代码解压缩到 Ruby 项目的源目录中。

  4. 编辑 JobStatusNotificationsSample.rb,使用适当的值替换 pipeline_id、sqs_queue_url 和 input_key。

  5. 从终端导航到将示例代码解压缩到其中的目录并运行:

$ruby JobStatusNotificationsSample.rb

PHP 示例

所有 PHP 示例基于三个主要假设:

  • PHP 示例在 Apache 服务器上运行。

  • Apache 服务器必须能够获取来自 Internet 的输入才能接收 Amazon SNS 通知。

  • 编写的示例用于 PHP 版本 5.4 或更高版本。

HLS 示例

该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。

您可以在此处下载示例代码。

示例代码片段

PHP 代码示例包括:

  • HlsJobCreationSample.php 文件

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 PHP 环境

  2. 下载示例代码。

  3. 在您的浏览器中,加载页面 http://<your-endpoint>/transcoder-samples/HlsJobCreationSample.php。

  4. 填写管道 ID 和输入密钥,然后提交表单来创建任务。

通知示例

通知语法示例

{ "Type" : "Notification", "MessageId" : "341527b6-9081-5f3d-b933-6c8472c3be40", "TopicArn" : "arn:aws:sns:us-east-1:123456789012:ets-sample-topic", "Subject" : "Amazon Elastic Transcoder has scheduled job 1387847681009 -abcdef for transcoding.", "Message" : "{\n \"state\" : \"PROGRESSING\",\n \"version\" : \"2012-09-25\",\n \"jobId\" : \"1387847681009-abcdef\", \n \"pipelineId\" : \"1387847629327-fedcba\",\n \"input\" : {\n \"key\" : \"input/example/key.mp4\",\n \"frameRate\" : \"auto\",\n \"resolution\" : \"auto\",\n \"aspectRatio\" : \"auto\",\n \"interlaced\" : \"auto\",\n \"container\" : \"auto\"\n },\n \"outputKeyPrefix\" : \"elastic-transcoder-samples/\",\n \"outputs\" : [ {\n \"id\" : \"1\",\n \"presetId\" : \"1351620000001-000020\",\n \"key\" : \"output/example/key.mp4\",\n \"thumbnailPattern\" : \"\",\n \"rotate\" : \"auto\",\n \"status\" : \"Progressing\"\n } ]\n}", "Timestamp" : "2013-12-24T01:14:42.493Z", "SignatureVersion" : "1", "Signature" : "ElSqJW3ZksCPViYGTayI/p+LjdF2HB42iJlIJRJ+jWzWwygXdiJXvZXl94qhd/tLln1lxPqijjivb5RWu7n5yzdZwbod6lpLwyZ2TfWM6dZt57OzsG3GbdTxgqwVsztVSyWCYhcV8f+CrT3IQrfrU3Me/SRYVUqrSUXXsu4Ls7A2q9mosG7v0Sn+3Z1rAa9+Rf6QmkfAg05UX0sLyA+I2hFqTu5oAGDK4Cm6FHuIwV+oYJXNBbGWuS7tD6mRNwrYvPBlUvBLXx9m3CbqSXv5Yoj39vglv+1djtaLA3GpwX+B1hHx8QT373lgmmsmGDRWhSQretpOTWDYb81PV2K0bg==", "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-e372f8ca30337fdb084e8ac449342c77.pem", "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action= Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:ets- sample-topic:b3ec47e5-e1f0-401f-a0a5-98c7fe405c2b" }

您可以在此处下载示例代码。

示例代码片段

PHP 代码示例包括:

  • JobStatusNotificationsSampleNotificationHandler.php 文件:将通知发布到服务器后,通知处理程序将状态写回 /tmp/<job-id> 下的文件。

  • JobStatusNotificationsSample.php 文件:当通知处理程序将状态写回 /tmp/<job-id> 下的文件之后,JobStatusNotificationsSample.php 将加载查询字符串中为其提供的 ID 指定的 /tmp/<job-id> 状态文件。

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 PHP 环境

  2. 下载示例代码。

  3. 将示例代码解压缩到 PHP 项目的源目录中。

  4. 在您的浏览器中,加载页面 http://<your-endpoint>/transcoder-samples/JobStatusNotificationsSample.php。

  5. 填写要转码的管道 ID 和输入密钥,然后按创建任务按钮。

Python 示例

所有 Python 示例基于一个主要假设:

  • 编写的示例与 Python 版本 2.7 兼容。

HLS 示例

该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。

您可以在此处下载示例代码。

示例代码片段

Python 代码示例包括:

  • HlsJobCreationSample.py 文件

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Python 环境

  2. 下载示例代码。

  3. 将示例代码解压缩。

  4. 编辑 HlsJobCreationSample.py,使用适当的值替换 pipeline_id 和 input_key。

  5. 从终端导航到将示例代码解压缩到其中的目录并运行:

$python HlsJobCreationSample.py

通知示例

通知语法示例

{ "Type" : "Notification", "MessageId" : "341527b6-9081-5f3d-b933-6c8472c3be40", "TopicArn" : "arn:aws:sns:us-east-1:123456789012:ets-sample-topic", "Subject" : "Amazon Elastic Transcoder has scheduled job 1387847681009 -abcdef for transcoding.", "Message" : "{\n \"state\" : \"PROGRESSING\",\n \"version\" : \"2012-09-25\",\n \"jobId\" : \"1387847681009-abcdef\", \n \"pipelineId\" : \"1387847629327-fedcba\",\n \"input\" : {\n \"key\" : \"input/example/key.mp4\",\n \"frameRate\" : \"auto\",\n \"resolution\" : \"auto\",\n \"aspectRatio\" : \"auto\",\n \"interlaced\" : \"auto\",\n \"container\" : \"auto\"\n },\n \"outputKeyPrefix\" : \"elastic-transcoder-samples/\",\n \"outputs\" : [ {\n \"id\" : \"1\",\n \"presetId\" : \"1351620000001-000020\",\n \"key\" : \"output/example/key.mp4\",\n \"thumbnailPattern\" : \"\",\n \"rotate\" : \"auto\",\n \"status\" : \"Progressing\"\n } ]\n}", "Timestamp" : "2013-12-24T01:14:42.493Z", "SignatureVersion" : "1", "Signature" : "ElSqJW3ZksCPViYGTayI/p+LjdF2HB42iJlIJRJ+jWzWwygXdiJXvZXl94qhd/tLln1lxPqijjivb5RWu7n5yzdZwbod6lpLwyZ2TfWM6dZt57OzsG3GbdTxgqwVsztVSyWCYhcV8f+CrT3IQrfrU3Me/SRYVUqrSUXXsu4Ls7A2q9mosG7v0Sn+3Z1rAa9+Rf6QmkfAg05UX0sLyA+I2hFqTu5oAGDK4Cm6FHuIwV+oYJXNBbGWuS7tD6mRNwrYvPBlUvBLXx9m3CbqSXv5Yoj39vglv+1djtaLA3GpwX+B1hHx8QT373lgmmsmGDRWhSQretpOTWDYb81PV2K0bg==", "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-e372f8ca30337fdb084e8ac449342c77.pem", "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action= Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:ets- sample-topic:b3ec47e5-e1f0-401f-a0a5-98c7fe405c2b" }

您可以在此处下载示例代码。

示例代码片段

Python 代码示例包括:

  • SqsQueueNotificationWorker.py 类:SqsQueueNotificationWorker 类轮询 Amazon SQS 并在单独进程中处理通知。因此,在 Python 中可实现真正的多处理。该类接收消息,为接收的每条通知调用所有注册的处理程序,并从队列中删除消息。该类还包括 JobStatusNotificationHandler 类的定义,提供后者是为了提供处理 Elastic Transcoder 通知的框架。可以将该类扩展,并覆盖处理方法以提供自定义的任务处理。请注意,这不符合鸭子类型的 Pythons 标准,但确实提供了用于本示例的处理程序的正式定义。

  • JobStatusNotificationSample.py 脚本:JobStatusNotificationSample.py 脚本在 Elastic Transcoder 中创建任务并等待任务完成。当任务完成后,它将停止队列轮询进程并退出。有必要使用多处理值对象进行跨进程同步,因为处理程序与其轮询的队列在单独进程中运行。

任务

要运行示例,请执行下列步骤:

  1. 根据以下说明设置环境:设置 Python 环境

  2. 下载示例代码。

  3. 将示例代码解压缩到本地文件夹中。

  4. 编辑 JobStatusNotificationsSample.py,使用适当的值替换 pipeline_id、sqs_queue_url 和 input_key。

  5. 从终端导航到将示例代码解压缩到其中的目录并运行:

$python JobStatusNotificationsSample.py