Я разрабатываю приложение, которое записывает аудио пользователя. Для записи звука я использую API getUserMedia. Максимальная длина аудио составит около 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 и его функциях. Но тогда это не работает с сафари и IE. Затем я пришел через плагин Temasys для обеспечения совместимости WebRTC с сафари и IE. Но я смущен, так как Temasys не поддерживает запись. Может ли кто-нибудь руководствоваться, как это сделать?
Вы пробовали ['MediaRecorder'] (https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder)? – jib