416从Blob创建URL时出错

时间:2017-12-01 17:35:43

标签: web-audio

我使用Web Audio 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?

1 个答案:

答案 0 :(得分:0)

对于我的网站http://gtube.de(只是一个没有广告的例子)我使用的是recorder.js => https://github.com/mattdiamond/Recorderjs。它非常好用。也许你应该尝试记录上下文。

如果你在带有网络音频api的缓冲区中加载mp3.s并且同时播放它们将会非常有效。 => https://www.html5rocks.com/en/tutorials/webaudio/intro/ 但那已经是你做的方式=>上面的示例中缺少代码,因此我必须阅读文章=>也许下次你试着做一个简短的例子。

抱歉,我对mediaStream API =>的了解不够。我想它已经坏了;-) 如果网络音频中的某些内容无法正常工作,请尝试其他方式。它仍然不是很稳定=>特别是Mozilla人非常支持它。

相关问题