2016-11-18 277 views
0

我正在开发一款可记录用户音频的应用程序。对于录制音频,我使用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不支持录音,我感到困惑。有人可以指导如何做到这一点?

+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

还有,你可以加入一个公开的邮件列表,这是由特马实业维护,专门针对的WebRTC插件:https://groups.google.com/forum/#!forum/temasys-discuss-webrtcplugin

0

我想这可以在安装插件这里的免费版本找到完整的文档已经。但是teamsys提到,通过使用这个,我们不能像上面提到的那样记录和缓冲流。在上面的代码中,当它声明audioContext没有在IE和safari中定义时。 Teamasys插件通过其他的事情,但不能通过这个。

相关问题