首页 > 解决方案 > 缺少 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 并使用(https://www.google.com/speech-api/v2/recognize?)将其发送到 Google Speech API v2

现在这在我自己创建音频文件时有效,但是当我使用 MediaRecorder 时,我得到的响应是空的。现在我检查了音频文件的属性,发现缺少一些属性(音频长度和比特率)。除了属性之外,我确实听到了这些文件的音频。

有什么方法可以添加这些属性,还是有更好的 API 可以用于此?

标签: speech-to-textmediarecorder-api

解决方案


处理类似的案例,并从语音 API 获得相同的空响应

你能验证你在你创建的 blob 对象中有什么东西吗?我使用onstop来创建 blob,然后将其转换为 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])

推荐阅读