通过 HTML5 API(RecordJS 或替代方法)将音频录制到 AAC

Posted

技术标签:

【中文标题】通过 HTML5 API(RecordJS 或替代方法)将音频录制到 AAC【英文标题】:Record audio through HTML5 API (RecordJS or alternative) to AAC 【发布时间】:2015-04-17 21:56:09 【问题描述】:

我需要录制音频文件,将其导出(存储到服务器)为 aac 格式,获取它的链接并将链接和实际音频 (aac) 文件发送到 RESTful WS。

我找到了这个库来录制音频(利用 html5 Audio API):RecordJS https://github.com/mattdiamond/Recorderjs

我设置了它(初始化 + 开始录制 + 停止录制)。 现在我应该处理音频以将其导出

插件创建者提供的示例是:

  function createDownloadLink() 
    recorder && recorder.exportWAV(function(blob) 
      var url = URL.createObjectURL(blob);
      var li = document.createElement('li');
      var au = document.createElement('audio');
      var hf = document.createElement('a');

      au.controls = true;
      au.src = url;
      hf.href = url;
      hf.download = new Date().toISOString() + '.wav';
      hf.innerHTML = hf.download;
      li.appendChild(au);
      li.appendChild(hf);
      recordingslist.appendChild(li);
    );
  

提供的示例非常简单。 但是,我不知道如何

    实际上获取一个 aac 音频文件 存储它(示例显示如何下载,而不是如何存储在服务器上) 获取文件的链接(服务器路径)。

很抱歉,我无法提供有效的小提琴,但我对 HTML5 API 很陌生,也很困惑。

如果需要,我可以使用其他库或纯 HTML5 API。只需要一些关于如何进行的线索。如果这对其他人有帮助,即使是通用解决方案(即不仅可以导出到 AAC,还可以导出到 MP3 或其他)也可以。

【问题讨论】:

【参考方案1】:

提供的示例非常简单。但是,我不知道如何

    实际获取的是 aac 音频文件

你不能……至少今天不能。我认为 MediaRecorder API 旨在解决这个问题,但它还没有得到真正的支持,也没有标准化。

有些人使用emscripten 为 MP3 编码构建 LAME。您可以尝试对开源 AAC 编码器执行相同的操作,例如 FFmpeg 内置的编码器。查看videoconverter.js。请注意,这非常慢,实验性很强,并不适合所有用例。

    存储它(示例显示如何下载,而不是如何存储在服务器上)

使用您想将该数据发送到服务器的任何内容。如果是我,我会通过二进制网络套接字发送它。

    获取文件的链接(服务器路径)。

这取决于您在服务器端使用它做什么,我们无法为您解答。随心所欲。

【讨论】:

【参考方案2】:

我不知道我的解决方案是否会回答您的问题。首先,您必须将 blob 格式转换为 URL 格式才能传输它。之后,使用 ajax 将其上传到服务器。 url 将在服务器端使用 php 脚本转换为 AAC 格式。

javascript中:

function saveToServer() 

       recorder && recorder.exportWAV(function(blob) 
       var data = "";
       var reader = new FileReader();
       reader.readAsDataURL(blob);
       reader.onloadend = function()
          data =  reader.result;
          //your ajax code here
       

       );


php脚本示例:

$audioData = substr($_POST['data'], strpos($_POST['data'], ",") + 1);
$decodedAudioData = base64_decode($audioData); 
$upload_dir = "/this/is/AAC/directory/";  
mkdir($upload_dir); //create dir
$aacFile = $upload_dir."myAudio.aac";  // create AAC file  in the dir 
$fileHandle = fopen($aacFile, 'wb');
$fwrite($fileHandle, $decodedAudioData); // write data into the AAC file
$fclose($fileHandle);

我一周前做了这件事,请不要完全按照我写的上面的代码,因为我只是大致了解如何将 AAC 格式从 RecordJS 存储到服务器。我没有检查上面代码的语法。

传输录制的音频的唯一方法是将其转换为 javascript 中的 URL 格式。无法将 blob 或 AAC 文件从 Web 浏览器传输到服务器。

【讨论】:

以上是关于通过 HTML5 API(RecordJS 或替代方法)将音频录制到 AAC的主要内容,如果未能解决你的问题,请参考以下文章

与 Meteor 配合良好的 HTML5 音频的替代品?

在 Chrome 浏览器中使用 recordJs 库期间将定义的变量转换为未定义

HTML5替代div的元素

DOJO官方API翻译或解读-dojo/store (自定制存储器)

HTML5 页面编辑API之Range对象

HTML5 本地存储 - 我可以为每个键存储多个值,如果不能,我可以使用啥替代方案?