Javascript MediaRecorder API简单示例;“你好,世界”;
下面是MediaRecorder API的一个简单示例:Javascript MediaRecorder API简单示例;“你好,世界”;,javascript,web-audio-api,web-mediarecorder,Javascript,Web Audio Api,Web Mediarecorder,下面是MediaRecorder API的一个简单示例: (async function() { let chunks = []; let stream = await navigator.mediaDevices.getUserMedia({ audio:true, video:false }); let mediaRecorder = new MediaRecorder(stream); // record for 3 seconds: mediaRecorder.st
(async function() {
let chunks = [];
let stream = await navigator.mediaDevices.getUserMedia({ audio:true, video:false });
let mediaRecorder = new MediaRecorder(stream);
// record for 3 seconds:
mediaRecorder.start();
setTimeout(() => { mediaRecorder.stop(); }, 3000)
mediaRecorder.ondataavailable = function(e) { chunks.push(e.data); };
mediaRecorder.onstop = async function() {
let blob = new Blob(chunks, { type: mediaRecorder.mimeType });
let audioURL = window.URL.createObjectURL(blob);
let arrayBuffer = await (await fetch(audioURL)).arrayBuffer();
let audioBuffer = await (new AudioContext()).decodeAudioData(arrayBuffer);
// ... do stuff with audioBuffer
};
})();
这在chrome中目前不起作用,因为opus编解码器存在漏洞。看起来它最近已经被修复了,所以应该在几个月内达到稳定版本(我想是吧?)
所以我的问题是:我上面提到的“你好世界”是正确的吗?它似乎在firefox上运行良好,并且有望很快在chrome上运行,但我并不完全确定规范的所有细节,我只是想确保我做的一切都是正确的。关于示例代码正确性的一些子问题:
- 在Firefox中,
是一个空字符串,但是mediaRecorder.mimeType
显然仍然成功创建。在chrome中,Blob
是“video/webm”,尽管我在mediaRecorder.mimeType
选项中指定了getUserMedia
。这是怎么回事video:false
- 是否需要使用
将blob转换为数组缓冲区?这不难,但似乎有点粗糙fetch
- 是否有一个解决办法,使其在Chrome中工作,而编解码器的错误得到解决?我尝试了新的MediaRecorder(流,{mimeType:“audio/wav”})代码>阅读后,但它给了我一个“不支持mimeType”错误。事实上,除了“video/webm”之外的任何
都会在chrome上出现错误,而且firefox似乎只是忽略了mimeType
选项mimeType
- 在测试中,他们使用
newblob(块,{'type':'audio/ogg;codecs=opus'})代码>。他们为什么选择这种类型和编解码器?他们怎么知道MediaRecorder使用的是真正的mime类型和编解码器?他们如何知道mime类型在所有浏览器中都能工作