Я пытаюсь использовать Amazon Transcribe Streaming Service с запросом http2 от Node.js. Вот ссылки на документацию, по которым я следую
Формат запроса потоковой передачи . Согласно этому документу конечной точкой является https://transcribe -streaming . <'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.
Обновление:
Изменение Content-type на 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"}