我有一个类似的问题(也使用recorder.js),并设法使用精湛的videoconverter.js项目解决了这个问题,该项目包括使用emscripen 将ffmpeg 移植到Javascript 的端口。缺点是 ffmpeg.js 文件大约 25Mb。
我修改了 recorderWorker.js 中的现有exportWAV
函数以返回 WAV(用于 HTML5<audio>
播放)和包含编码 MP2 文件的 Blob:
function encodeWAV(samples) {
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);
/* ... various writing methods */
return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) };
}
function ffmpeg_convert(buffer) {
console.log("starting mp2 conversion");
var args = "-i input -f mp2 output.mp2";
var results = ffmpeg_run({
arguments: args.split(" "),
files: [
{
data: new Uint8Array(buffer),
"name": "input"
}
]
});
if (results) {
var file = results[0];
console.log("File recieved", file.name, file.data);
return new Blob([file.data], { type: "audio/mpeg" });
}
return null;
}
此方法可用于将 WAV 编码为 ffmpeg 支持的任何编解码器libavcodec