我使用的是Python 3.6,想通过API将视频流发布到AWS Kinesis。我使用Python AWS客户端创建了一个流和
我遵循了AWS Kinesis视频媒体PutMedia和GetMedia的API文档。
因此,我首先使用
GetDataEndPoint
,但是当我想要使用自定义请求发布数据时(实际上Python客户端中不包括PutMedia
),我会收到一个错误信息:无法确定要授权的服务/操作名称
。我遵循了AWS Kinesis视频媒体PutMedia和GetMedia的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
进行请求。所以方法出现错误无法确定要授权的服务/操作名称
,如故障排除中所述。