本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
GetMedia
使用此 API 从 Kinesis 视频流中检索媒体内容。在请求中,您可以识别直播名称或流 Amazon 资源名称 (ARN) 以及起始区块。然后,Kinesis Video Streams 按片段编号的顺序返回区块流。
注意
您必须先调用 GetDataEndpoint
API 才能获取终端节点。然后使用 --endpoint-url 参数将GetMedia
请求发送到此端点。
当你在直播中放置媒体数据(片段)时,Kinesis Video Streams 会将每个传入的片段和相关元数据存储在所谓的 “块” 中。有关更多信息,请参阅PutMedia。GetMedia
API 会从您在请求中指定的区块开始返回这些区块的流。
使用 GetMedia
API 时适用以下限制:
-
每个直播每秒
GetMedia
最多可以呼叫五次。 -
在会话期间,Kinesis Video Streams 以高达每秒 25 兆字节(或每秒 200 兆比特)的速度发送媒体数据。
GetMedia
注意
GetMedia
HTTP 响应状态码将立即返回,但如果没有已摄取的片段可供播放,则读取 HTTP 响应负载将在 3 秒后超时。
注意
如果在调用 Kinesis Video Streams 媒体 API 后出现错误,则除了 HTTP 状态代码和响应正文外,还会包含以下信息:
-
x-amz-ErrorType
HTTP 标头 — 除了 HTTP 状态码提供的错误类型外,还包含更具体的错误类型。 -
x-amz-RequestId
HTTP 标头 — 如果你想向报告问题 AWS,如果给出请求编号,支持团队可以更好地诊断问题。
HTTP 状态码和 ErrorType 标头都可用于对错误是否可重试以及在什么条件下做出编程决策,并提供有关客户端程序员可能需要采取哪些操作才能成功重试的信息。
有关更多信息,请参阅本主题底部的错误部分以及常见错误。
请求语法
POST /getMedia HTTP/1.1
Content-type: application/json
{
"StartSelector": {
"AfterFragmentNumber": "string
",
"ContinuationToken": "string
",
"StartSelectorType": "string
",
"StartTimestamp": number
},
"StreamARN": "string
",
"StreamName": "string
"
}
URI 请求参数
该请求不使用任何 URI 参数。
请求体
请求接受采用 JSON 格式的以下数据。
- StartSelector
-
标识要从指定流中获取的起始块。
类型:StartSelector 对象
必需:是
- StreamARN
-
你想从哪里获取媒体内容的直播的 ARN。如果未指定
streamARN
,则必须指定streamName
。类型:字符串
长度限制:长度下限为 1。长度上限为 1024。
模式:
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
必需:否
- StreamName
-
您要从中获取媒体内容的 Kinesis 视频流名称。如果未指定
streamName
,则必须指定streamARN
。类型:字符串
长度限制:最小长度为 1。最大长度为 256。
模式:
[a-zA-Z0-9_.-]+
必需:否
响应语法
HTTP/1.1 200
Content-Type: ContentType
Payload
响应元素
如果此操作成功,则该服务将会发送回 HTTP 200 响应。
响应将返回以下 HTTP 标头。
- ContentType
-
所请求媒体的内容类型。
长度限制:长度下限为 1。长度上限为 128。
模式:
^[a-zA-Z0-9_\.\-]+$
响应将以下内容作为 HTTP 正文返回。
- Payload
-
Kinesis Video Streams 返回的有效载荷是来自指定直播的一系列块。有关区块的更多信息,请参阅PutMedia。Kinesis Video Streams 在通话中返回
GetMedia
的区块还包括以下其他 Matroska (MKV) 标签:-
AWS_KINESISVIDEO_CONTINUATION_TOKEN(UTF-8 字符串)-如果您的
GetMedia
呼叫终止,则可以在下一个请求中使用此延续令牌来获取最后一个请求终止的下一个区块。 -
AWS_KINESISVIDEO_MILLIS_BEHIND_NOW(UTF-8 字符串)-客户端应用程序可以使用此标签值来确定响应中返回的区块与流中的最新区块相差多远。
-
AWS_KINESISVIDEO_FRAGMENT_NUMBER-分块中返回的片段编号。
-
AWS_KINESISVIDEO_SERVER_TIMESTAMP-片段的服务器时间戳。
-
AWS_KINESISVIDEO_PRODUCER_TIMESTAMP-片段的制作者时间戳。
如果发生错误,将显示以下标签:
-
AWS_KINESISVIDEO_ERROR_CODE-导致停止的错误的字符串描述。 GetMedia
-
AWS_KINESISVIDEO_ERROR_ID:错误的整数代码。
错误代码如下:
-
3002-写入直播时出错
-
4000-未找到请求的片段
-
4500-直播的 KMS 密钥被拒绝访问
-
4501-直播的 KMS 密钥已禁用
-
4502-直播的 KMS 密钥存在验证错误
-
4503-直播中指定的 KMS 密钥不可用
-
4504-直播中指定的 KMS 密钥的使用无效
-
4505-直播中指定的 KMS 密钥的状态无效
-
4506-找不到直播中指定的 KMS 密钥
-
5000-内部错误
-
错误
有关所有操作的常见错误信息,请参阅常见错误。
- ClientLimitExceededException
-
Kinesis Video Streams 已限制该请求,因为你已超过允许的客户端调用限制。稍后再尝试拨打电话。
HTTP 状态代码:400
- ConnectionLimitExceededException
-
Kinesis Video Streams 已限制该请求,因为您已超过允许的客户端连接限制。
HTTP 状态代码:400
- InvalidArgumentException
-
此输入参数的值无效。
HTTP 状态代码:400
- InvalidEndpointException
-
呼叫者使用了错误的端点将数据写入流。收到此类异常后,用户必须在
APIName
设置为的情况下调GetDataEndpoint
用,PUT_MEDIA
并使用响应中的端点来调用下一个PutMedia
调用。HTTP 状态代码:400
- NotAuthorizedException
-
调用者无权对给定直播执行操作,或者令牌已过期。
HTTP 状态代码:401
- ResourceNotFoundException
-
状态码:404,给定名称的直播不存在。
HTTP 状态代码:404
另请参阅
有关在特定语言的 AWS SDK 中使用此 API 的更多信息,请参阅以下内容: