Запрос сервиса Amazon Transcribe Streaming в Node.js с Http / 2 не дает ответа - PullRequest
10 голосов
/ 09 марта 2019

Я пытаюсь использовать 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"}

1 Ответ

0 голосов
/ 01 июля 2019

Я обратился в службу поддержки AWS, и они предоставили мне это.Я проверил это локально, и он, кажется, работает

...