本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从视频流中提取图像
你可以使用 Amazon Kinesis Video APIs Streams 来帮助你从视频流SDKs中提取图像。您可以将这些图像用于增强的播放应用程序(例如缩略图或增强的拖动),或者用于机器学习管道。Kinesis Video Streams 通过API提取视频中的元数据标签或自动提取图像来提供按需图像提取。
有关使用 Kinesis Video Streams 托管支持图像的信息,请参阅:
按需生成图像 (GetImages)-这API允许客户从存储在 Kinesis Video Streams 中的视频中提取一张或多张图像。
自动生成图像(亚马逊 S3 交付)-将 Kinesis Video Streams 配置为根据上传视频中的标签自动从视频数据中实时提取图像,并将图像传送到客户指定的 S3 存储桶。
自动生成图像(亚马逊 S3 交付)
目前,客户运行和管理自己的图像转码管道,以创建用于各种目的的图像,例如擦洗、图像预览、在图像上运行机器学习模型等。Kinesis Video Streams 提供了对图像进行转码和传送的功能。Kinesis Video Streams 将根据标签自动从视频数据中实时提取图像,并将图像传送到客户指定的 S3 存储桶。
主题
UpdateImageGenerationConfiguration
要设置 Kinesis 视频流以支持向 Amazon S3 生成图像,请执行以下操作:
-
SDK使用新版本根据中添加的标签创建 S3 存储桶以生成图像API。在更新直播的图像生成配置时,请注意下一步中需要的 S3 URI。
-
使用以下内容作为输入创建一个名为 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有关标签的示例,请参阅此代码
与 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请求。