通过以下方式节省成本并获得更多功能 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 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 输入和输出存储桶
打开 Amazon S3 控制台
。 在控制台中,单击创建存储桶。
在存储桶名称字段,输入所需的输入存储桶名称。
仍在 Amazon S3 控制台中,再次单击创建存储桶。
在存储桶名称字段,输入所需的输出存储桶名称。
创建 Amazon SNS 主题以接收任务状态通知
打开 Amazon SNS 控制台
。 在控制台中,单击创建并添加,然后选择创建新主题。
在主题名称字段中,输入
ets-sample-topic
,然后单击创建主题。记录下
ets-sample-topic
的 ARN。
创建 Amazon SQS 队列以轮询任务状态通知
打开 Amazon SQS 控制台
。 在控制台中,单击创建新队列。
在队列名称字段中,输入
ets-sample-queue
,然后单击创建队列。记录下 Amazon SQS 队列的网址。
为 Amazon SQS 队列订阅 Amazon SNS 主题
打开 Amazon SQS 控制台
。 在控制台中,从队列列表中选择 ets-sample-queue。
在队列操作下,选择订阅 Amazon SNS 主题的队列。
在选择主题 下,选择 ets-sample-topic,然后单击订阅。
您应该会看到一条队列已成功订阅主题的确认消息。
创建 Elastic Transcoder 管道
在控制台中,单击创建新管道。
在管道名称字段中,输入
ets-sample-pipeline
。在输入存储桶字段中,输入输入存储桶的名称。
将 IAM 角色保留为
Console Default Role
。在为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。
仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别。
展开通知下拉菜单。
对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择
ets-sample-topic
。单击创建管道。
记录 Elastic Transcoder 管道 ID。
创建 Amazon CloudFront 分配以通过可扩展方式分发内容
在控制台的导航窗格中,展开私有内容,然后单击原始访问身份。
选择创建原始访问身份。
单击创建。
记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。
在导航窗格中,单击分配。
单击创建分配。
选择 Web,然后单击继续。
在原始设置下,输入 Amazon S3 输出存储桶作为原始域名。
在 原始 ID字段中,输入
S3-transcoder-sample-output
。为限制存储桶访问 选择是。
单击创建分配,然后记录分配的域名。
修改 Amazon S3 存储桶策略
打开 Amazon S3 控制台
。 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。
展开权限,然后单击添加存储桶策略。
输入以下策略语句,用
your recorded Amazon S3 canonical user ID
替换为 CloudFront-oai-s3-canonical-user-id,用the name of your output bucket
替换为 s3-output-bucket-name。单击保存。
{ "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
在此处
gem install aws-sdk
有关更多信息,请参阅适用于 Ruby 的 AWS SDK 文档
创建 Amazon S3 输入和输出存储桶
打开 Amazon S3 控制台
。 在控制台中,单击创建存储桶。
在存储桶名称字段,输入所需的输入存储桶名称。
仍在 Amazon S3 控制台中,再次单击创建存储桶。
在存储桶名称字段,输入所需的输出存储桶名称。
创建 Amazon SNS 主题以接收任务状态通知
打开 Amazon SNS 控制台
。 在控制台中,单击创建并添加,然后选择创建新主题。
在主题名称字段中,输入
ets-sample-topic
,然后单击创建主题。记录下
ets-sample-topic
的 ARN。
创建 Amazon SQS 队列以轮询任务状态通知
打开 Amazon SQS 控制台
。 在控制台中,单击创建新队列。
在队列名称字段中,输入
ets-sample-queue
,然后单击创建队列。记录下 Amazon SQS 队列的网址。
为 Amazon SQS 队列订阅 Amazon SNS 主题
打开 Amazon SQS 控制台
。 在控制台中,从队列列表中选择 ets-sample-queue。
在队列操作下,选择订阅 Amazon SNS 主题的队列。
在选择主题 下,选择 ets-sample-topic,然后单击订阅。
您应该会看到一条队列已成功订阅主题的确认消息。
创建 Elastic Transcoder 管道
在控制台中,单击创建新管道。
在管道名称字段中,输入
ets-sample-pipeline
。在输入存储桶字段中,输入输入存储桶的名称。
将 IAM 角色保留为
Console Default Role
。在为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。
仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别。
展开通知下拉菜单。
对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择
ets-sample-topic
。单击创建管道。
记录 Elastic Transcoder 管道 ID。
创建 Amazon CloudFront 分配以通过可扩展方式分发内容
在控制台的导航窗格中,展开私有内容,然后单击原始访问身份。
选择创建原始访问身份。
单击创建。
记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。
在导航窗格中,单击分配。
单击创建分配。
选择 Web,然后单击继续。
在原始设置下,输入 Amazon S3 输出存储桶作为原始域名。
在原始 ID字段中,输入
S3-transcoder-sample-output
。为限制存储桶访问 选择是。
单击创建分配,然后记录分配的域名。
修改 Amazon S3 存储桶策略
打开 Amazon S3 控制台
。 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。
展开权限,然后单击添加存储桶策略。
输入以下策略语句,用
your recorded Amazon S3 canonical user ID
替换为 CloudFront-oai-s3-canonical-user-id,用the name of your output bucket
替换为 s3-output-bucket-name。单击保存。
{ "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.php
和 JobStatusNotificationsSample.php
中,您需要将路径更新为 autoload.php
。如果您使用 phar 安装,可以使用指向已下载 aws.phar
文件的路径,其中包括所有必需的依赖项。
设置适用于 PHP 的 AWS SDK
在此处
有关更多信息,请参阅适用于 PHP 的 AWS SDK 文档
创建 Amazon S3 输入和输出存储桶
打开 Amazon S3 控制台
。 在控制台中,单击创建存储桶。
在存储桶名称字段,输入所需的输入存储桶名称。
仍在 Amazon S3 控制台中,再次单击创建存储桶。
在存储桶名称字段,输入所需的输出存储桶名称。
创建 Amazon SNS 主题以接收任务状态通知
打开 Amazon SNS 控制台
。 在控制台中,单击创建并添加,然后选择创建新主题。
在主题名称字段中,输入
ets-sample-topic
,然后单击创建主题。记录下
ets-sample-topic
的 ARN。
为服务器订阅 Amazon SNS
验证是否已安装 PHP 示例代码。
打开 Amazon SNS 控制台
。 在 AdditionalActions 下,单击创建订阅。
根据您的服务器配置,选择 HTTP 或 HTTPS。
在端点中,输入服务器的端点。端点的路径应指向
JobStatusNotificationsSampleNotificationHandler.php
。单击订阅。这会向 PHP 端点发送一个订阅请求。
PHP 示例代码将自动处理订阅请求并确认订阅。该订阅请求和响应将写入 /tmp/subscribe_requests.txt
。
创建 Elastic Transcoder 管道
在控制台中,单击创建新管道。
在管道名称字段中,输入
ets-sample-pipeline
。在输入存储桶字段中,输入输入存储桶的名称。
将 IAM 角色保留为
Console Default Role
。在为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。
仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别。
展开通知下拉菜单。
对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择
ets-sample-topic
。单击创建管道。
记录 Elastic Transcoder 管道 ID。
创建 Amazon CloudFront 分配以通过可扩展方式分发内容
在控制台的导航窗格中,展开私有内容,然后单击原始访问身份。
选择创建原始访问身份。
单击创建。
记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。
在导航窗格中,单击分配。
单击创建分配。
选择 Web,然后单击继续。
在原始设置下,输入 Amazon S3 输出存储桶作为原始域名。
在原始 ID字段中,输入
S3-transcoder-sample-output
。为限制存储桶访问 选择是。
单击创建分配,然后记录分配的域名。
修改 Amazon S3 存储桶策略
打开 Amazon S3 控制台
。 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。
展开权限,然后单击添加存储桶策略。
输入以下策略语句,用
your recorded Amazon S3 canonical user ID
替换为 CloudFront-oai-s3-canonical-user-id,用the name of your output bucket
替换为 s3-output-bucket-name。单击保存。
{ "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
在此处
pip-2.7 install boto
有关更多信息,请参阅适用于 Python 的 AWS SDK 文档
创建 Amazon S3 输入和输出存储桶
打开 Amazon S3 控制台
。 在控制台中,单击创建存储桶。
在存储桶名称字段,输入所需的输入存储桶名称。
仍在 Amazon S3 控制台中,再次单击创建存储桶。
在存储桶名称字段,输入所需的输出存储桶名称。
创建 Amazon SNS 主题以接收任务状态通知
打开 Amazon SNS 控制台
。 在控制台中,单击创建并添加,然后选择创建新主题。
在主题名称字段中,输入
ets-sample-topic
,然后单击创建主题。记录下
ets-sample-topic
的 ARN。
创建 Amazon SQS 队列以轮询任务状态通知
打开 Amazon SQS 控制台
。 在控制台中,单击创建新队列。
在队列名称字段中,输入
ets-sample-queue
,然后单击创建队列。记录下 Amazon SQS 队列的网址。
为 Amazon SQS 队列订阅 Amazon SNS 主题
打开 Amazon SQS 控制台
。 在控制台中,从队列列表中选择 ets-sample-queue。
在队列操作下,选择订阅 Amazon SNS 主题的队列。
在选择主题 下,选择 ets-sample-topic,然后单击订阅。
您应该会看到一条队列已成功订阅主题的确认消息。
创建 Elastic Transcoder 管道
在控制台中,单击创建新管道。
在管道名称字段中,输入
ets-sample-pipeline
。在输入存储桶字段中,输入输入存储桶的名称。
将 IAM 角色保留为
Console Default Role
。在为转码文件和播放列表配置 Amazon S3 存储桶中,输入输出存储桶的名称。
仍在为转码文件和播放列表配置 Amazon S3 存储桶中,选择标准存储类别。
展开通知下拉菜单。
对于所有四种事件类型,选择使用现有 SNS 主题,然后在选择主题下选择
ets-sample-topic
。单击创建管道。
记录 Elastic Transcoder 管道 ID。
创建 Amazon CloudFront 分配以通过可扩展方式分发内容
在控制台的导航窗格中,展开私有内容,然后单击原始访问身份。
选择创建原始访问身份。
单击创建。
记录下您在创建原始访问身份时生成的 Amazon S3 规范用户 ID。
在导航窗格中,单击分配。
单击创建分配。
选择 Web,然后单击继续。
在原始设置下,输入 Amazon S3 输出存储桶作为原始域名。
在原始 ID字段中,输入
S3-transcoder-sample-output
。为限制存储桶访问 选择是。
单击创建分配,然后记录分配的域名。
修改 Amazon S3 存储桶策略
打开 Amazon S3 控制台
。 在输出存储桶旁边,单击放大镜图标以显示存储桶属性。
展开权限,然后单击添加存储桶策略。
输入以下策略语句,用
your recorded Amazon S3 canonical user ID
替换为 CloudFront-oai-s3-canonical-user-id,用the name of your output bucket
替换为 s3-output-bucket-name。单击保存。
{ "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 HLS 示例下载
您可以在此处下载示例代码。
示例代码片段
Java 代码示例包括:
HlsJobCreationSample
类
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Java 环境
下载示例代码。
在 Eclipse 中打开
com/amazonaws/services/elastictranscoder/samples/HlsJobCreationSample.java
。使用适当的值替换 PIPELINE_ID 和 INPUT_KEY。
在 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 通知示例下载
您可以在此处下载示例代码。
示例代码片段
Java 代码示例包括:
Notification
类:为了在 Java 中使用通知,我们使用 Jackson JSON 库将任务状态通知反序列化到 POJO 中。Notification
类模拟我们从 Amazon SQS 队列获得的消息。JobStatusNotification
类:JobStatusNotification
类模拟 Elastic Transcoder 通知。SqsQueueNotificationWorker
类:SqsQueueNotificationWorker
类可以在单独线程中启动,以轮询 Amazon SQS 并处理任务状态通知。该类接收消息,为接收的每条通知调用所有注册的处理程序,并从队列中删除消息。JobStatusNotificationHandler
接口:可以实施JobStatusNotificationHandler
接口以支持对通知进行自定义处理。JobStatusNotificationsSample
类:JobStatusNotificationsSample
类会创建任务并等待任务完成。当任务进入最终状态时,该队列的工作线程会关闭且应用程序退出。
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Java 环境。
下载示例代码。
将示例代码解压缩到 JAVA 项目的源目录中。
在 Eclipse 中打开
com/amazonaws/services/elastictranscoder/samples/JobStatusNotificationsSample.java
。使用适当的值替换 PIPELINE_ID、SQS_QUEUE_URL 和 INPUT_KEY。
在 Eclipse 中运行示例。
Ruby 示例
所有 Ruby 示例基于一个主要假设:
编写的示例与 Ruby 版本 1.9 兼容。
HLS 示例
该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。
Ruby HLS 示例下载
您可以在此处下载示例代码。
示例代码片段
Ruby 代码示例包括:
HlsJobCreationSample.rb
文件
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Ruby 环境
下载示例代码。
将示例代码解压缩到 Ruby 项目的源目录中。
编辑
HlsJobCreationSample.rb
,使用适当的值替换 pipeline_id 和 input_key。从终端导航到将示例代码解压缩到其中的目录并运行:
$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 通知示例下载
您可以在此处下载示例代码。
示例代码片段
Ruby 代码示例包括:
SqsQueueNotificationWorker
类:SqsQueueNotificationWorker
类轮询 Amazon SQS 中的通知,为每条通知调用注册的所有处理程序,并从队列中删除消息。请注意,工作线程在单独的线程中运行。如果使用的 Ruby 实施具有“绿色”线程,则每次仅运行单一线程(不是真正的多处理)。JobStatusNotificationsSample.rb
脚本:该脚本将创建一个 Elastic Transcoder 任务,启动 Amazon SQ 工作线程并等待任务完成。提供的处理程序在所创建任务的处理完成时通知 Amazon SQS 工作线程停止。处理通知的方法是调用 add_handlers 方法,并提供使用单一参数的 Proc 或 lambda 作为处理程序。对于接收的每条通知,会调用所有注册的处理程序,并提供通知作为处理程序的输入参数。
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Ruby 环境
下载示例代码。
将示例代码解压缩到 Ruby 项目的源目录中。
编辑
JobStatusNotificationsSample.rb
,使用适当的值替换 pipeline_id、sqs_queue_url 和 input_key。从终端导航到将示例代码解压缩到其中的目录并运行:
$ruby JobStatusNotificationsSample.rb
PHP 示例
所有 PHP 示例基于三个主要假设:
PHP 示例在 Apache 服务器上运行。
Apache 服务器必须能够获取来自 Internet 的输入才能接收 Amazon SNS 通知。
编写的示例用于 PHP 版本 5.4 或更高版本。
HLS 示例
该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。
PHP HLS 示例下载
您可以在此处下载示例代码。
示例代码片段
PHP 代码示例包括:
HlsJobCreationSample.php
文件
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 PHP 环境
下载示例代码。
在您的浏览器中,加载页面 http://<your-endpoint>/transcoder-samples/HlsJobCreationSample.php。
填写管道 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 通知示例下载
您可以在此处下载示例代码。
示例代码片段
PHP 代码示例包括:
JobStatusNotificationsSampleNotificationHandler.php
文件:将通知发布到服务器后,通知处理程序将状态写回 /tmp/<job-id> 下的文件。JobStatusNotificationsSample.php
文件:当通知处理程序将状态写回 /tmp/<job-id> 下的文件之后,JobStatusNotificationsSample.php
将加载查询字符串中为其提供的 ID 指定的 /tmp/<job-id> 状态文件。
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 PHP 环境
下载示例代码。
将示例代码解压缩到 PHP 项目的源目录中。
在您的浏览器中,加载页面 http://<your-endpoint>/transcoder-samples/JobStatusNotificationsSample.php。
填写要转码的管道 ID 和输入密钥,然后按创建任务按钮。
Python 示例
所有 Python 示例基于一个主要假设:
编写的示例与 Python 版本 2.7 兼容。
HLS 示例
该示例向您展示如何创建 HLS 任务和可用于播放自适应位元速率流的 HLS 播放列表文件。
Python HLS 示例下载
您可以在此处下载示例代码。
示例代码片段
Python 代码示例包括:
HlsJobCreationSample.py
文件
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Python 环境
下载示例代码。
将示例代码解压缩。
编辑
HlsJobCreationSample.py
,使用适当的值替换 pipeline_id 和 input_key。从终端导航到将示例代码解压缩到其中的目录并运行:
$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 通知示例下载
您可以在此处下载示例代码。
示例代码片段
Python 代码示例包括:
SqsQueueNotificationWorker.py
类:SqsQueueNotificationWorker
类轮询 Amazon SQS 并在单独进程中处理通知。因此,在 Python 中可实现真正的多处理。该类接收消息,为接收的每条通知调用所有注册的处理程序,并从队列中删除消息。该类还包括JobStatusNotificationHandler
类的定义,提供后者是为了提供处理 Elastic Transcoder 通知的框架。可以将该类扩展,并覆盖处理方法以提供自定义的任务处理。请注意,这不符合鸭子类型的 Pythons 标准,但确实提供了用于本示例的处理程序的正式定义。JobStatusNotificationSample.py
脚本:JobStatusNotificationSample.py
脚本在 Elastic Transcoder 中创建任务并等待任务完成。当任务完成后,它将停止队列轮询进程并退出。有必要使用多处理值对象进行跨进程同步,因为处理程序与其轮询的队列在单独进程中运行。
任务
要运行示例,请执行下列步骤:
根据以下说明设置环境:设置 Python 环境
下载示例代码。
将示例代码解压缩到本地文件夹中。
编辑
JobStatusNotificationsSample.py
,使用适当的值替换 pipeline_id、sqs_queue_url 和 input_key。从终端导航到将示例代码解压缩到其中的目录并运行:
$python JobStatusNotificationsSample.py