2016-11-18 7 views
0

Я разрабатываю приложение, которое записывает аудио пользователя. Для записи звука я использую 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 не поддерживает запись. Может ли кто-нибудь руководствоваться, как это сделать?

+0

Вы пробовали ['MediaRecorder'] (https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder)? – jib

ответ

0

Я работаю с Temasys. Если ваша служба уже работает, и вы можете записывать потоки, используя свою службу, когда она запущена в Chrome, вы должны иметь возможность установить Temasys AdapterJS или изменить собственный AdapterJS, чтобы сделать свою услугу «Temasys Plugin Aware», а затем пользователи ваших службе, использующей IE или Safari, потребуется установить плагин Temasys WebRTC. Вы можете найти полную документацию по установке бесплатной версии плагина здесь: https://confluence.temasys.com.sg/display/TWPP

Там также список рассылки вы можете присоединиться и который поддерживается Temasys, специально для WebRTC Plugin: https://groups.google.com/forum/#!forum/temasys-discuss-webrtcplugin

0

Я попытался это уже. Но teamys упомянули, что, используя это, мы не можем записывать и буферизовать поток, как упомянуто выше. В приведенном выше коде, когда он говорит, что audioContext не определен в IE и сафари. Плагин Teamasys передал другие вещи, но не смог передать это.

Смежные вопросы