我正在開發一款可記錄用戶音頻的應用程序。對於錄製音頻,我使用getUserMedia API。音頻的最大長度約爲15分鐘。我不想將它存儲在緩存中。我通過直接流入節點js服務器來完成它。服務器對其進行流式處理並進行編碼,以便生成一個mp3文件。這是通過這樣的事情完成的。使用webRTC通過麥克風錄製聲音
var encoder;
var lame = require('lame');
var fs = require('fs');
var encodeAudio = function (data) {
// my own logic here ---- >
// Encode audio is below
encoder = lame.Encoder({
channels: 2,
bitDepth: 16,
sampleRate: 22050,
bitRate: 128,
outSampleRate: 22050,
mode: lame.STEREO
});
encoder.pipe(fs.createWriteStream('/tmp/' + data.name + '/audio.mp3'));
}
encoder.write(new Buffer(data.buffer), function() {
});
}
};
客戶機端
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
navigator.getUserMedia({audio: true, video: false}, function (stream) {
var audioContext = window.AudioContext;
var context = new audioContext();
window.audioInput = context.createMediaStreamSource(stream);
var bufferSize = 2048;
var recorder = context.createScriptProcessor(bufferSize, 1, 1);
recorder.onaudioprocess = self.onAudioProcess.bind(self);
audioInput.connect(recorder);
recorder.connect(context.destination);
}, this.onAudioError);
在這裏,數據被從socket.io從客戶端發送的。因此,無論何時從客戶端發送大量音頻,nodejs服務器都會創建緩衝區並將其保存爲mp3。
現在我聽說了WebRTC及其功能。但它不適用於Safari和IE。然後,我通過Temasys插件使WebRTC與Safari和IE兼容。但是由於Temasys不支持錄音,我感到困惑。有人可以指導如何做到這一點?
你有沒有試過['MediaRecorder'](https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder)? – jib