我正在开发一个记录用户音频的应用程序。为了录制音频,我使用的是getUserMedia API。音频的最大长度约为15分钟。我不想将它存储在缓存中。我是通过直接流式传输到节点js服务器来实现的。服务器对其进行流式处理和编码,以便生成mp3文件。这是通过这样的事情完成的。
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 :(得分:0)
我与Temasys合作。如果您的服务已经运行,并且您可以在Chrome中运行时使用您的服务记录流,您应该能够安装Temasys的AdapterJS或修改您自己的AdapterJS以使您的服务“Temasys Plugin Aware”,然后您的用户使用IE或Safari的服务需要安装Temasys WebRTC插件。您可以在此处找到有关安装插件免费版本的完整文档:https://confluence.temasys.com.sg/display/TWPP
还有一个公共邮件列表,您可以加入,由Temasys维护,特别是WebRTC插件:https://groups.google.com/forum/#!forum/temasys-discuss-webrtcplugin
答案 1 :(得分:0)
我已经尝试过了。但是teamys提到通过使用它我们不能记录和缓冲流如上所述。在上面的代码中,它表示在IE和Safari中没有定义audioContext。 Teamasys插件通过其他东西,但不能通过这个。