【发布时间】:2017-09-23 01:17:17
【问题描述】:
我正在录制音频,将其作为 blob 发送到 nodejs 服务器。然后 nodejs 服务器将其发送给当前未记录的所有已连接用户。
发送 blob:
mediaRecorder.onstop = function(e) {
var blob = new Blob(this.chunks, { 'type' : 'audio/ogg; codecs=opus' });
socket.emit('radio', blob);
};
接收 blob 的服务器:
socket.on('radio', function(blob) {
socket.broadcast.emit('voice', blob);
});
接收 blob 的侦听器:
socket.on('voice', function(arrayBuffer) {
var blob = new Blob([arrayBuffer], { 'type' : 'audio/ogg; codecs=opus' });
var audio = document.getElementById('audio');
audio.src = window.URL.createObjectURL(blob);
audio.play();
});
这适用于除 safari 和任何 ios 设备之外的所有浏览器/设备。通过 safari 的检查员进一步了解,我发现了这一点:
Safari 是否需要在其标头中添加其他内容才能正确解释 blob 对象?我研究了可接受的音频类型,尝试了 aac/mp3/ogg 没有任何成功。进一步阅读后,我听说在 safari 和 IOS 中流式传输 blob 音频/视频数据存在错误,尽管我不太清楚任何细节。
仪式方向的指导会很有帮助!
编辑:看起来接收 blob 中的这一行 audio.src = window.URL.createObjectURL(blob); 是导致 blob 错误的原因(我链接的图像)
编辑 2: 我尝试查看是否使用 blob 以外的其他格式,选择 base64 编码字符串。看起来这适用于除 IOS 和 Safari 之外的所有设备和浏览器。我的印象是它与 IOS 如何解释/加载数据有关......
【问题讨论】:
-
你找到解决方案了吗?
-
现在应该可以使用了,请参阅类似问题的答案:stackoverflow.com/a/56330664/2196424
标签: ios node.js socket.io blob html5-audio