我目前正在寻找使用Web Audio API / getUserMedia的onaudioprocess块将用户正在录制的音频录制“流式传输”到后端:
// (socket call to 'recordInit' called when record button is clicked
// not shown here)
node.onaudioprocess = function(e) {
[...]
socket.emit('recordStream', {
some_relevant_ids: '123abc',
pcm_data: convertFloat32ToInt16(e.inputBuffer.getChannelData(0))
})
}
我正在使用socketio发送到nodejs / express后端:
var wstream = null;
socket.on('recordInit', function(data) {
wstream = fs.createWriteStream(data.some_relevant_ids + '.pcm');
})
socket.on('recordStream', function(data) {
wstream.write(data.pcm_data);
})
socket.on('recordStop', function(data) {
// close the wstream, convert to mp3 using lame, send to CDN
})
当用户点击“停止录制”按钮时,我向后端发出“recordStop”请求,该请求编译已发送的所有pcm数据,将其转换为MP3,并将完成的产品发送到CDN。
通过使用文件句柄(wstream)作为全局变量,我已经让整个事情适用于单个用户,但我希望现在可以为多个同时用户使用,所以我不能使用一个公共变量作为文件句柄。我还担心对recordStream的套接字请求可能没有正确的顺序,也许我需要发送一个时间戳(通过前端)并根据时间戳在最后对recordStream数据包进行排序。
TL; DR:我想知道:
如果有人对此有任何想法,请告诉我。谢谢!
答案 0 :(得分:0)
您可以在客户端找到.wav
到opus数据包压缩的实现,然后返回到服务器端here上的.wav
,您可以选择在mp3
中保存录制内容还有wav
格式,但当然,您需要在服务器中安装ffmpeg
。