亚马逊 S3 交付入门 - Amazon Kinesis Video Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

亚马逊 S3 交付入门

当前,客户运行和管理自己的图像转码管道,以创建用于各种目的的图像,例如清理、图像预览、在图像上运行 ML 模型等。Kinesis Video Streams 提供了对图像进行转码和传送的功能。Kinesis Video Streams 将根据标签自动实时从视频数据中提取图像,并将图像传送到客户指定的 S3 存储桶。

UpdateImageGenerationConfiguration

要设置 Kinesis 视频流以允许向 Amazon S3 生成图像,请执行以下操作:
  1. 创建一个S3 存储桶用于基于使用新 API 在 SDK 中添加的标签生成图像。请注意S3 网址,这是下一步更新流的图像生成配置时所必需的。

  2. 创建一个名为的 JSON 文件update-image-generation-input.json使用以下内容作为输入。

{ "StreamName": "TestStream", "ImageGenerationConfiguration": { "Status": "ENABLED", "DestinationConfig": { "DestinationRegion": "us-east-1", "Uri": "s3://bucket-name" }, "SamplingInterval": 200, "ImageSelectorType": "PRODUCER_TIMESTAMP", "Format": "JPEG", "FormatConfig": { "JPEGQuality": "80" }, "WidthPixels": 320, "HeightPixels": 240 } }

你可以使用Amazon CLI调用UpdateImageGenerationConfiguration用于添加先前创建的 Amazon S3 ARN 并将状态更改为 API 操作ENABLED

aws kinesisvideo update-image-generation-configuration \ --cli-input-json file://./update-image-generation-input.json \

请求:

UpdateImageGenerationConfiguration HTTP/1.1 Method: 'POST' Path: '/updateImageGenerationConfiguration' Body: { StreamName: 'String', // Optional. Either stream name or arn should be passed StreamArn: 'String', // Optional. Either stream name or arn should be passed ImageGenerationConfiguration : { // required Status: 'Enum', // ENABLED | DISABLED, ImageSelectorType: 'Enum', // SERVER_TIMESTAMP | PRODUCER_TIMESTAMP.. DestinationConfig: { DestinationRegion: 'String', Uri: string, }, SamplingInterval: 'Number'// Format: 'Enum', // JPEG | PNG // Optional parameters FormatConfig: { 'String': 'String', }, WidthPixels: 'Number', // 1 - 3840 (4k). HeightPixels: 'Number' // 1 - 2160 (4k). } }

回应:

HTTP/1.1 200 Content-type: application/json Body: { }
注意

更新图像生成配置后,启动图像生成工作流程至少需要 1 分钟。等待至少 1 分钟后再调用PutMedia更新通话之后。

DescribeImageGenerationConfiguration

要查看已经为直播设置的图像生成配置,客户可以制作DescribeImageGenerationConfiguration请求,如下所示。

请求:

DescribeImageGenerationConfiguration HTTP/1.1 Method: 'POST' Path: '/describeImageGenerationConfiguration' Body: { StreamName: 'String', // Optional. Either stream name or arn should be passed StreamArn: 'String', // Optional. Either stream name or arn should be passed }

响应:

HTTP/1.1 200 Content-type: application/json Body: { ImageGenerationConfiguration : { Status: 'Enum', ImageSelectorType: 'Enum', // SERVER_TIMESTAMP | PRODUCER_TIMESTAMP DestinationConfig: { DestinationRegion: 'String' Uri: 'string', }, SamplingInterval: 'Number', Format: 'Enum', FormatConfig: { 'String': 'String', }, WidthPixels: 'Number', HeightPixels: 'Number' } }

要了解有关... 的更多信息DescribeImageGenerationConfiguration功能,请参见DescribeImageGenerationConfiguration 亚马逊 Kinesis 视频直播开发者指南。

制片人 MKV 标签

您可以使用 Kinesis Video Streams Producer SDK 通过在 SDK 中公开 API 操作来标记感兴趣的特定片段。有关标签的示例,请参见这段代码。调用此 API 后,SDK 将添加一组预定义的 MKV 标签以及片段数据。Kinesis Video Streams 将识别这些特殊的 MKV 标签,并根据该流的图像处理配置启动图像生成工作流程。

与 Amazon S3 图像生成标签一起提供的任何片段元数据都将另存为 Amazon S3 元数据。

制作者 MKV 标签的语法

|+ Tags | + Tag | // MANDATORY: Predefined MKV tag to trigger image generation for the fragment | + Simple | + Name: AWS_KINESISVIDEO_IMAGE_GENERATION | // OPTIONAL: S3 prefix which will be set as prefix for generated image. | + Simple | + Name: AWS_KINESISVIDEO_IMAGE_PREFIX | + String: image_prefix_in_s3 // 256 bytes max m | // OPTIONAL: Key value pairs that will be persisted as S3 Image object metadata. | + Simple | + Name: CUSTOM_KEY_1 // Max 128 bytes | + String:CUSTOM_VALUE_1 // Max 256 bytes | + Simple | + Name: CUSTOM_KEY_2 // Max 128 bytes | + String: CUSTOM_VALUE_2 // Max 256 bytes

使用 Producer SDK 添加元数据标签PutEventMetaData

这个PutEventMetaData函数追加与事件关联的 MKV 文件。PutEventMetaData需要两个参数。第一个参数是一个事件,其值来自STREAM_EVENT_TYPE枚举。第二个参数,pStreamEventMetadata,是可选的,可用于将其他元数据作为键值对包括在内。最多可以添加五对元数据的键值对。

Limits

下表列出了与元数据标签相关的限制。如果元数据标签限制是可调整的,您可以通过您的客户经理申请增加。

限制 最大值 可调整

图像前缀长度

256

可选的元数据密钥长度

128

可选的元数据值长度

256

可选元数据的最大数量

10

S3 对象元数据

默认情况下,Kinesis Video Streams 将设置片段编号制片人,以及服务器时间戳作为 Amazon S3 对象元数据生成的图像。如果在 MKV 标签中指定了任何其他片段数据,则这些标签也将添加到 Amazon S3 对象元数据中。以下示例显示了 Amazon S3 对象元数据的正确语法。

{ // KVS S3 object metadata x-amz-meta-aws_kinesisvideo_fragment_number : 'string', x-amz-meta-aws_kinesisvideo_producer_timestamp: 'number', x-amz-meta-aws_kinesisvideo_server_timestamp: 'number', // Optional key value pair sent as part of the MKV tags custom_key_1: custom_value_1, custom_key_2: custom_value_2, }

S3 对象路径(图片)

以下列表显示了对象路径的正确格式并描述了路径中的每个元素。

格式:

ImagePrefix_账户 ID_StreamName_ImageTimecode_随机 ID文件扩展名

1。ImagePrefix-的价值AWS_KINESISVIDEO_IMAGE_PREFIX

2.AccountID -创建直播时使用的账户 ID。

3。StreamName-为其生成图像的流的名称。

4。ImageTimecode-生成图像的片段中的纪元时间码。

5。RandomID-随机 GUID。

6。file-extension-基于所请求的图像格式的 JPG 或 PNG。

防止限制的 Amazon S3 URI 建议

如果您向 Amazon S3 写入数千张图片,则存在限制的风险。有关更多信息,请参见S3 前缀放置请求限制

Amazon S3 前缀的起始限制为每秒 3,500 个 PUT 请求,随着时间的推移,唯一前缀的 PUT 限制将逐渐增加。避免使用日期和时间作为 Amazon S3 前缀。时间编码的数据一次只能影响一个前缀,并且还会定期更改,从而使之前的前缀扩展无效。为了实现更快、一致的 Amazon S3 扩展,我们建议在 Amazon S3 目标 URI 中添加一个随机前缀,例如十六进制代码或 UUID。例如,十六进制代码前缀自然会将您的请求随机拆分为 16 个不同的前缀(每个唯一十六进制字符的前缀),这将允许在 Amazon S3 自动扩展后每秒 56,000 个 PUT 请求。