服务器将音频数据保存为base64数据字符串.移动Web客户端获取数据并播放音频.
但是在iOS和Android中的移动Chrome中发现了一个问题,即带有数据uri的音频无法播放(issue).
为了使它工作,我想知道在客户端是否有办法将数据字符串转换为音频文件(如.m4a)并将音频src链接到文件?
解决方法
使用网络音频api直接计算出来,在iOS和Android的移动浏览器中具有最佳兼容性.
function base64ToArrayBuffer(base64) {
var binaryString = window.atob(base64);
var len = binaryString.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
var base64 = '<data string retrieved from server>';
var audioContext = new (window.AudioContext || window.webkitaudiocontext)();
var source = audioContext.createBufferSource();
audioContext.decodeAudioData(base64ToArrayBuffer(base64),function(buffer) {
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(0);
});
它适用于iOS Safari,Chrome和Android默认浏览器和Chrome.