通过 XMLHttpRequest 预加载音频文件
Pre-load audio file via XMLHttpRequest
我目前正在尝试通过浏览器中的 XMLHttpRequest 预加载 MP3 文件并在音频播放器中播放。直接在播放器中设置时播放音频文件。因此,我在处理响应时一定有错误。
loadAudio : function(playerId, source) {
var player = document.getElementById(playerId);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log('readyState: ' + request.readyState + ', status: ' + request.status)
if (this.readyState == 4 && this.status == 200) {
console.log(request.getAllResponseHeaders());
var blob = new Blob( [request.response] );
var url = URL.createObjectURL( blob );
player.src = url;
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(player.src);
});
player.play();
// Typical action to be performed when the document is ready:
}
};
request.open("GET", source, true);
request.send();
}
我收到以下错误消息:
DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed (code 4)
有谁知道在哪里可以找到错误?
谢谢你的回答。
试试这个:
var blob = new Blob( [ request.response], { type: "audio/mp3" } );
var url = null;
if ( window.webkitURL ) {
url = window.webkitURL.createObjectURL(blob);
} else if ( window.URL && window.URL.createObjectURL ) {
url = window.URL.createObjectURL(blob);
}
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(url);
});
player.addEventListener('load', function(e) {
URL.revokeObjectURL(url);
});
player.src = url;
您可以尝试将 ajax 请求中的响应类型设置为 blob。
loadAudio : function(playerId, source) {
var player = document.getElementById(playerId);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log('readyState: ' + request.readyState + ', status: ' + request.status)
if (this.readyState == 4 && this.status == 200) {
var url = URL.createObjectURL( request.response);
player.src = url;
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(player.src);
});
player.play();
// Typical action to be performed when the document is ready:
}
};
request.open("GET", source, true);
request.responseType = 'blob';
request.send();
}
我目前正在尝试通过浏览器中的 XMLHttpRequest 预加载 MP3 文件并在音频播放器中播放。直接在播放器中设置时播放音频文件。因此,我在处理响应时一定有错误。
loadAudio : function(playerId, source) {
var player = document.getElementById(playerId);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log('readyState: ' + request.readyState + ', status: ' + request.status)
if (this.readyState == 4 && this.status == 200) {
console.log(request.getAllResponseHeaders());
var blob = new Blob( [request.response] );
var url = URL.createObjectURL( blob );
player.src = url;
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(player.src);
});
player.play();
// Typical action to be performed when the document is ready:
}
};
request.open("GET", source, true);
request.send();
}
我收到以下错误消息:
DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed (code 4)
有谁知道在哪里可以找到错误? 谢谢你的回答。
试试这个:
var blob = new Blob( [ request.response], { type: "audio/mp3" } );
var url = null;
if ( window.webkitURL ) {
url = window.webkitURL.createObjectURL(blob);
} else if ( window.URL && window.URL.createObjectURL ) {
url = window.URL.createObjectURL(blob);
}
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(url);
});
player.addEventListener('load', function(e) {
URL.revokeObjectURL(url);
});
player.src = url;
您可以尝试将 ajax 请求中的响应类型设置为 blob。
loadAudio : function(playerId, source) {
var player = document.getElementById(playerId);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log('readyState: ' + request.readyState + ', status: ' + request.status)
if (this.readyState == 4 && this.status == 200) {
var url = URL.createObjectURL( request.response);
player.src = url;
player.addEventListener('loaded', function(e) {
URL.revokeObjectURL(player.src);
});
player.play();
// Typical action to be performed when the document is ready:
}
};
request.open("GET", source, true);
request.responseType = 'blob';
request.send();
}