Я пытаюсь использовать Amazon Transcribe Streaming Service с запросом http2 от Node.js. Вот ссылки на документацию, по которым я следую Формат потокового запроса. Согласно этому документу конечной точкой является https://transcribe-streaming. & Lt; 'region'>. Amazonaws.com, но при запросе по этому URL-адресу URL-адрес не найден. Но в примере Java найдена конечная точка как https://transcribestreaming. ''. Amazonaws.com, поэтому выполнение запроса по этому URL-адресу не возвращает никаких ошибок или ответов. Я пытаюсь из нас-восток-1 регион.
Вот код, который я пытаюсь использовать.
const http2 = require('http2');
var aws4 = require('aws4');
var opts = {
service: 'transcribe',
region: 'us-east-1',
path: '/stream-transcription',
headers:{
'content-type': 'application/json',
'x-amz-target': 'com.amazonaws.transcribe.Transcribe.StartStreamTranscription'
}
}
var urlObj = aws4.sign(opts, {accessKeyId: '<access key>', secretAccessKey: '<aws secret>'});
const client = http2.connect('https://transcribestreaming.<region>.amazonaws.com');
client.on('error', function(err){
console.error("error in request ",err);
});
const req = client.request({
':method': 'POST',
':path': '/stream-transcription',
'authorization': urlObj.headers.Authorization,
'content-type': 'application/json',
'x-amz-content-sha256': 'STREAMING-AWS4-HMAC-SHA256-EVENTS',
'x-amz-target': 'com.amazonaws.transcribe.Transcribe.StartStreamTranscription',
'x-amz-date': urlObj['headers']['X-Amz-Date'],
'x-amz-transcribe-language-code': 'en-US',
'x-amz-transcribe-media-encoding': 'pcm',
'x-amz-transcribe-sample-rate': 44100
});
req.on('response', (headers, flags) => {
for (const name in headers) {
console.log('${name}: ${headers[name]}');
}
});
let data = '';
req.on('data', (chunk) => { data += chunk; });
req.on('end', () => {
console.log('\n${data}');
client.close();
});
req.end();
Кто-нибудь может указать, что мне здесь не хватает. Я не смог найти ни одного примера, реализующего это с HTTP/2.
Обновить: Изменение типа контента на application/json вернулось со статусом ответа 200, но со следующим исключением:
'{"Output":{"__type":"com.amazon.coral.service#SerializationException"},"Version":"1.0"}'
Обновление (22 апреля 2009 г.):
req.setEncoding('utf8');
req.write(audioBlob);
var audioBlob = new Buffer(JSON.stringify({
"AudioStream": {
"AudioEvent": {
"AudioChunk": audioBufferData
}
}
Перед завершением запроса я добавляю "аудиоблод" в качестве полезной нагрузки путем сериализации. Мои "audioBufferData" находятся в необработанном аудио формате PCM из браузера. Я вижу из документации полезная нагрузка должна быть закодирована в "Event Stream Encoding", но не могла понять, как ее реализовать.
Так что без этой кодировки потока событий в настоящее время я получаю следующее исключение с 200 статусом ответа.
{"Output":{"__type":"com.amazon.coral.service#UnknownOperationException"},"Version":"1.0"}