getUserMedia MediaRecorder Данные отсутствуют

Я пытаюсь записать звук в своем проекте Angular. Для этого я использую MediaStream Recording API ( https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API).

Он записывает мой аудиовход, и я могу загрузить аудиофайл в соответствии с типом, который я ему предоставляю. Для этого я использую этот бит кода.

navigator.mediaDevices.getUserMedia({audio: true, video: false})
    .then(stream => {
      mediaRecorder = new MediaRecorder(stream);
      mediaRecorder.start();

      mediaRecorder.ondataavailable = event => {
        audioChunks.push(event.data);
        this.translate(audioChunks);
      };

      this.stopRecording = setTimeout(async() => {
        await mediaRecorder.stop();
      }, 5000);
    });

    blob = new Blob(audio, { 'type' : 'audio/x-flac; rate=44100;  codecs=opus' });
    url = window.URL.createObjectURL(blob);

После этого я отправляю данные как byteArray в мой REST API и отправляю их в Google Speech API v2, используя ( https://www.google.com/speech-api/v2/recognize?)

Теперь это работает, когда я сам создаю аудиофайл, но когда я использую MediaRecorder, ответ, который я получаю, пуст. Теперь я проверил свойства аудиофайлов и вижу, что некоторые свойства отсутствуют (длина звука и битрейт). Помимо свойств я слышу аудио этих файлов.

Есть ли способ добавить эти свойства или есть лучший API для этого?

1 ответ

Работает над аналогичным случаем и имеет такой же пустой ответ от речевого API

Можете ли вы проверить, что у вас есть что-то в объекте blob, который вы создаете? Я использую onstop создать блоб, затем преобразовать его в base64 и передать в запрос. (разделить и пропустить первую часть, которая является заголовком)

    mediaRecorder.onstop = (e) => {
                    const blob = chunks[0];//new Blob(chunks, { 'type': 'audio/webm;codec=opus' });
                    var reader = new FileReader();
                    reader.readAsDataURL(blob);
                    reader.onloadend = () => {
                        const base64data = reader.result;
                        console.info('sending request to gcloud');
                        expect(base64data).to.exist;

                        gCloudRequest(base64data.split(',')[1])
Другие вопросы по тегам