2016-11-18 91 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插件通過其他的事情,但不能通過這個。