Я использовал python 3.6 и хочу отправить видеопоток в aws kinesis с помощью API.
Я использовал клиент python aws для создания потока и GetDataEndPoint, но когда я хочу опубликовать свои данные с помощью своего пользовательского запроса (PutMedia на самом деле не входит в клиент python), я получаю сообщение об ошибке Unable to determine service/operation name to be authorized.
Я следую api doc видео носителей aws kinesis PutMedia и GetMedia.
Итак, я начинаю с получения конечной точки с 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. Что я делаю...
This error might occur if the endpoint is not properly specified. When you are getting the endpoint, be sure to include the following parameter in the GetDataEndpoint call, depending on the API to be called:
Мне также интересно, действительно ли метод GetMedia реализован в клиенте, как они говорят, здесь, потому что, когда я отлаживаю этот метод, клиент не вызывает GetDataEndPoint и поэтому делает запрос в https://kinesisvideo.region.amazonaws.com, кроме https://ID_EXAMPLE.kinesisvideo.region.amazonaws.com. Таким образом, метод получает ошибку Unable to determine service/operation name to be authorized, как описано в поиск проблемы
Я заставил работать кусок кода: stackoverflow.com/a/59551573/362754






Вы получаете ошибку, потому что вы, вероятно, предоставляете конечную точку без «действия», которым в вашем случае будет putMedia.
Попробуйте добавить /putMedia к своей конечной точке и не забудьте указать заголовок "content-type": "application/json".
Кстати, вы также должны сгенерировать v4 подписи для вашего запроса. Вы можете использовать библиотеку или следовать этому руководство по питону, чтобы сделать это.
Обратите внимание, что проблема на github говорит, что хэш полезной нагрузки должен быть исключен из подписи v4.
Не могли бы вы поделиться полным примером кода? В любом случае большое вам спасибо!
Собственно образцы я просил здесь: stackoverflow.com/questions/59481174/…. Вы можете туда ответить?
Я застрял на одном и том же, не могли бы вы поделиться полным кодом того, как отправить мультимедиа с помощью PutMedia с python ??