getUserMedia MediaRecorder Данные отсутствуют - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь записать звук в своем проекте 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 Ответ

0 голосов
/ 24 октября 2018

работает над похожим делом и имеет тот же пустой ответ от речевого 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])
...