我正在开发一个应用程序,记录用户的音频。为了录制音频,我使用了getUserMedia接口。音频的最大长度约为15分钟。我不想把它存储在缓存中。我是通过直接流式传输到node 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服务器都会创建buffer并将其保存为mp3。
现在我听说了WebRTC和它的功能。但它不适用于safari和IE。然后我通过Temasys的插件让WebRTC与safari和IE兼容。但是我很困惑,因为Temasys不支持录制。有人能指导一下如何做到这一点吗?
发布于 2016-11-19 07:38:28
我和Temasys一起工作。如果您的服务已经在运行,并且您可以使用您的服务在Chrome中运行时录制流,您应该能够安装淡马锡的AdapterJS或修改您自己的AdapterJS,使您的服务"Temasys插件感知“,然后您的服务的用户谁使用IE或Safari将需要安装淡马锡WebRTC插件。您可以在此处找到有关安装该插件的免费版本的完整文档:https://confluence.temasys.com.sg/display/TWPP
您还可以加入一个公共邮件列表,该列表由Temasys维护,专门用于WebRTC插件:https://groups.google.com/forum/#!forum/temasys-discuss-webrtcplugin
发布于 2016-11-19 14:40:42
我已经试过了。但是teamsys提到,通过使用它,我们不能像上面提到的那样记录和缓冲流。在上面的代码中,当它说audioContext没有在IE和safari中定义时。Teamasys插件绕过了其他东西,但不能绕过这个。
https://stackoverflow.com/questions/40670728
复制相似问题