getUserMedia MediaRecorder 数据丢失

问题描述 投票:0回答:2

我正在尝试在我的 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-text mediarecorder-api
2个回答
0
投票

正在处理类似的案例,并且语音 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])

0
投票

我遇到了类似的问题。

首先,添加错误处理程序

mediaRecorder.onerror = console.warn.bind(console, 'mediaRecorder error');

当您收到实际错误时,可能与我的错误相同:“视频编码失败。”。

然后尝试通过任何你喜欢的

options.mimeType
。一种与默认不同的方法有望发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.