从视频流中提取图像 - Amazon Kinesis Video Streams

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

从视频流中提取图像

你可以使用 Amazon Kinesis Video APIs Streams 来帮助你从视频流SDKs中提取图像。您可以将这些图像用于增强的播放应用程序(例如缩略图或增强的拖动),或者用于机器学习管道。Kinesis Video Streams 通过API提取视频中的元数据标签或自动提取图像来提供按需图像提取。

有关使用 Kinesis Video Streams 托管支持图像的信息,请参阅:

自动生成图像(亚马逊 S3 交付)

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

UpdateImageGenerationConfiguration

要设置 Kinesis 视频流以支持向 Amazon S3 生成图像,请执行以下操作:
  1. SDK使用新版本根据中添加的标签创建 S3 存储桶以生成图像API。在更新直播的图像生成配置时,请注意下一步中需要的 S3 URI

  2. 使用以下内容作为输入创建一个名为 update-image-generation-input.json 的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 } }

您可以使用调用UpdateImageGenerationConfigurationAPI操作 AWS CLI 来添加之前ARN创建的 Amazon S3 并将状态更改为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 Video Streams 开发者指南

制作人MKV标签

你可以使用 Kinesis Video Streams SDK 制作器通过在中公开API操作来标记感兴趣的特定片段。SDK有关标签的示例,请参阅此代码。调用此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

SDK使用在制作器中添加元数据标签 PutEventMetaData

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

限制

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

限制 最大值 可调整

图像前缀长度

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_AccountID_StreamName_ImageTimecode_RandomID.file-extension

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