亚马逊Kinesis视频GetMedia/PutMedia

4
我使用的是Python 3.6,想通过API将视频流发布到AWS Kinesis。我使用Python AWS客户端创建了一个流和GetDataEndPoint,但是当我想要使用自定义请求发布数据时(实际上Python客户端中不包括PutMedia),我会收到一个错误信息:无法确定要授权的服务/操作名称
我遵循了AWS Kinesis视频媒体PutMediaGetMedia的API文档。
因此,我首先使用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文档中找到了故障排除。但他们说我们必须指定ApiName参数。我该怎么办...

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

我也在想,当我调试GetMedia方法时,客户端是否真的按照他们在这里所说的实现了该方法,因为客户端没有调用GetDataEndPoint,而是在https://kinesisvideo.region.amazonaws.com而不是https://ID_EXAMPLE.kinesisvideo.region.amazonaws.com进行请求。所以方法出现错误无法确定要授权的服务/操作名称,如故障排除中所述。

2
我卡在同一个问题上了,你能分享一下如何使用Python的PutMedia发送媒体的完整代码吗? - Binary
我写了一段代码,已经可以运行:https://dev59.com/V7jna4cB1Zd3GeqP7knh#59551573 - minghua
1个回答

3
你得到的错误是因为你可能没有在端点上提供"action",在你的情况下应该是putMedia
尝试将/putMedia附加到你的端点,并不要忘记指定"content-type": "application/json"头文件。
顺便说一下,你还需要为你的请求生成v4签名。你可以使用库或遵循这个Python指南来完成它。

注意到github上的一个问题说负载哈希应该被排除在v4签名之外。 - minghua
你能分享完整的代码示例吗?无论如何非常感谢! - minghua
实际上我在这里请求样例:https://dev59.com/V7jna4cB1Zd3GeqP7knh。你能在那里回答吗? - minghua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接