从 Blob 创建 url 时出现 416 错误
416 Error when creating url from a Blob
我正在使用网络音频 API 来录制音频源节点流。我的代码如下所示:
var context,
bufferLoader,
destination,
mediaRecorder,
source,
bufferList,
chunks = [],
sound_paths = [],
audioRecordings = [];
//fill in sound paths
sound_paths = ['sound.mp3', 'sound2.mp3'];
bufferLoader = new BufferLoader(
context,
sound_paths,
callback
);
//fill bufferList with bufferdata
bufferLoader.load();
destination = context.CreateMediaStreamDestination();
mediaRecorder = new MediaRecorder(destination);
mediaRecorder.ondataavailable = function(e){
chunks.push(e.data);
}
mediaRecorder.onstop = function (e) {
var blob = new Blob(chunks, {'type': 'audio/ogg; codecs=opus'});
var audio = document.createElement('audio');
audio.src = URL.createObjectURL(blob);
audioRecordings.push(audio);
chunks = [];
};
function startRecording(){
mediaRecorder.start();
source = Recorder.context.createBufferSource();
source.buffer = bufferList[0];
source.connect(Recorder.destination);
}
function stopRecording(){
mediaRecorder.stop();
}
//call startRecording(), then source.start(0) on user input
//call stopRecording(), then source.stop(0) on user input
我正在使用此处定义的 BufferLoader:http://middleearmedia.com/web-audio-api-bufferloader/
这在大多数情况下都有效,但有时我在创建 Blob 并从中创建 URL 时收到 416(请求的范围不可满足)。当网页开始滞后时,这种情况似乎更常发生。我猜这是因为在创建 URL 或类似的东西时 Blob 是未定义的。有没有更安全的方法来处理媒体记录器的 onstop 事件?也许使用 srcObjet 和 MediaStream 而不是 Blob 会更好?
对于我的网站 http://gtube.de (just an example no commercial) i am using recorder.js=>https://github.com/mattdiamond/Recorderjs。它工作得很好。也许您应该尝试记录上下文。
如果您将 mp3.s 与网络音频 api 加载到缓冲区中并同时播放它们,它肯定会起作用。 => https://www.html5rocks.com/en/tutorials/webaudio/intro/
但这已经是你这样做的方式=>上面的例子中缺少代码所以我不得不阅读这篇文章=>也许下次你尝试做一个更短的例子。
抱歉,我对 mediaStream 了解不够 API => 我想它坏了 ;-)
如果网络音频中的某些内容不起作用,请尝试另一种方式。它仍然不是很稳定 => 特别是 Mozilla 人对它的支持很差。
我正在使用网络音频 API 来录制音频源节点流。我的代码如下所示:
var context,
bufferLoader,
destination,
mediaRecorder,
source,
bufferList,
chunks = [],
sound_paths = [],
audioRecordings = [];
//fill in sound paths
sound_paths = ['sound.mp3', 'sound2.mp3'];
bufferLoader = new BufferLoader(
context,
sound_paths,
callback
);
//fill bufferList with bufferdata
bufferLoader.load();
destination = context.CreateMediaStreamDestination();
mediaRecorder = new MediaRecorder(destination);
mediaRecorder.ondataavailable = function(e){
chunks.push(e.data);
}
mediaRecorder.onstop = function (e) {
var blob = new Blob(chunks, {'type': 'audio/ogg; codecs=opus'});
var audio = document.createElement('audio');
audio.src = URL.createObjectURL(blob);
audioRecordings.push(audio);
chunks = [];
};
function startRecording(){
mediaRecorder.start();
source = Recorder.context.createBufferSource();
source.buffer = bufferList[0];
source.connect(Recorder.destination);
}
function stopRecording(){
mediaRecorder.stop();
}
//call startRecording(), then source.start(0) on user input
//call stopRecording(), then source.stop(0) on user input
我正在使用此处定义的 BufferLoader:http://middleearmedia.com/web-audio-api-bufferloader/
这在大多数情况下都有效,但有时我在创建 Blob 并从中创建 URL 时收到 416(请求的范围不可满足)。当网页开始滞后时,这种情况似乎更常发生。我猜这是因为在创建 URL 或类似的东西时 Blob 是未定义的。有没有更安全的方法来处理媒体记录器的 onstop 事件?也许使用 srcObjet 和 MediaStream 而不是 Blob 会更好?
对于我的网站 http://gtube.de (just an example no commercial) i am using recorder.js=>https://github.com/mattdiamond/Recorderjs。它工作得很好。也许您应该尝试记录上下文。
如果您将 mp3.s 与网络音频 api 加载到缓冲区中并同时播放它们,它肯定会起作用。 => https://www.html5rocks.com/en/tutorials/webaudio/intro/ 但这已经是你这样做的方式=>上面的例子中缺少代码所以我不得不阅读这篇文章=>也许下次你尝试做一个更短的例子。
抱歉,我对 mediaStream 了解不够 API => 我想它坏了 ;-) 如果网络音频中的某些内容不起作用,请尝试另一种方式。它仍然不是很稳定 => 特别是 Mozilla 人对它的支持很差。