亚马逊Kinesis视频GetMedia / PutMedia

时间:2018-04-08 00:55:59

标签: python amazon-web-services amazon-kinesis

我使用了python 3.6,我想用API将视频流发布到aws kinesis。 我使用python aws客户端来创建流和GetDataEndPoint但是当我想用我的自定义请求发布我的数据时(PutMedia实际上并没有包含在python客户端中),我收到错误{{ 1}}。

我已经关注了aws kinesis视频媒体PutMediaGetMedia的api文档。

所以我首先使用Unable to determine service/operation name to be authorized获取GetDataEndPoint的端点:

response = client.get_data_endpoint(  # aws client method
    StreamName=STREAM_NAME,
    APIName='PUT_MEDIA'
)
end_point = response['DataEndpoint'] # https://s-EXAMPLE.kinesisvideo.eu-west-1.amazonaws.com

我在这个网址发布我的数据:

headers = {
    "x-amzn-stream-arn": STREAM_ARN,
    "x-amzn-fragment-timecode-type": "ABSOLUTE",
    "x-amzn-producer-start-timestamp": start_tmstp
}
# Sign header...
response = requests.post(end_point, data=data, headers=headers)  # 403 - Unable to determine service/operation name to be authorized

所以我不明白为什么会收到这个错误...我在aws doc上找到了这个client method。但他们说我们必须指定ApiName参数。我做了什么...

  

如果未正确指定端点,则可能会发生此错误。获取端点时,请确保在GetDataEndpoint调用中包含以下参数,具体取决于要调用的API:

我还想知道GetMedia方法是否实际在客户端实施,因为他们说troubleshooting,因为当我调试此方法时,客户端不会调用GetDataEndPoint因此,请https://kinesisvideo.region.amazonaws.com提出https://ID_EXAMPLE.kinesisvideo.region.amazonaws.com的请求。因此,方法会得到错误Unable to determine service/operation name to be authorized,如here

中所述

1 个答案:

答案 0 :(得分:1)

您得到的错误是因为您提供的端点可能没有在您的情况下为putMedia的“动作”。

尝试将/putMedia附加到端点,不要忘记指定"content-type": "application/json"标头。

此外,您还必须为您的请求生成v4 signatures。您可以使用lib或遵循此python guide进行操作。