通过 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的主要内容,如果未能解决你的问题,请参考以下文章
在 Chrome 浏览器中使用 recordJs 库期间将定义的变量转换为未定义