方式一:
利用js的Api AudioContext来播放:
var AudioContext = window.AudioContext ||
window.webkitAudioContext ||
window.mozAudioContext ||
window.oAudioContext ||
window.msAudioContext;
function playAuido(blob){
var fr = new FileReader();
fr.onload = function () {
var arrBuff = this.result; // ab是转换后的结果
audioContext.decodeAudioData(arrBuff, function (buffer) {
var source = audioContext.createBufferSource();
source.buffer = buffer; // This is the line that generates the error
source.connect(audioContext.destination);
source.start(0);
}
}
fr.readAsArrayBuffer(blob);
}
方式二:
利用auido标签播放:此种方式兼容IE9以上。原理是直接将aduio的src地址指向保存二进制流的内存地址。
function playVideo: function (blob) {
try{
var reader = new FileReader();
reader.onload = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
var data = new Uint8Array(evt.target.result);
indexParam.audio.src = window.URL.createObjectURL(indexMethod.getBlob2(data, data.length));
}
}
reader.readAsArrayBuffer(blob);
} catch (ex) {
console.log(ex);
}
},
function getBlob2: function (data, len) {
var buffer = new ArrayBuffer(len);
var dataview = new DataView(buffer);
dataview = new Uint8Array(data, 0, len);
return new Blob([dataview], { type: 'audio/mp3' });
},
以上两方式接收的必须是流数据才能播放。