我使用了python 3.6,我想用API将视频流发布到aws kinesis。
我使用python aws客户端来创建流和GetDataEndPoint
但是当我想用我的自定义请求发布我的数据时(PutMedia
实际上并没有包含在python客户端中),我收到错误{{ 1}}。
我已经关注了aws kinesis视频媒体PutMedia和GetMedia的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
答案 0 :(得分:1)
您得到的错误是因为您提供的端点可能没有在您的情况下为putMedia
的“动作”。
尝试将/putMedia
附加到端点,不要忘记指定"content-type": "application/json"
标头。
此外,您还必须为您的请求生成v4 signatures。您可以使用lib或遵循此python guide进行操作。