Объединить 2 MediaStreamAudioSourceNode на JS

169
03 января 2019, 13:30

Есть звонилка на webRTC. Требуется записывать разговоры средствами JS. Для записи использую библиотеку recorder.js. Есть два потока:

var input = audio_context.createMediaStreamSource(stream);
var stream2 = audio_context.createMediaStreamSource(document.getElementById('main_audio_remote').captureStream());

input - поток с микрофона, stream2 - звук собеседника. Следующим кодом у меня получается записать либо первый поток, либо второй.

recorder = new Recorder(input);
recorder.record();

Вопрос: как объединить эти два потока?

На всякий случай весь код:

                var audio_context; 
                var recorder; 
 
                function startUserMedia(stream) { 
                    /*var input = audio_context.createMediaStreamSource(stream); 
                    var stream2 = audio_context.createMediaStreamSource(document.getElementById('main_audio_remote').captureStream()); 
                    stream2.connect(input.destination);*/ 
 
                    /*var options = { 
                        mediaStream : document.getElementById('main_audio_remote').captureStream() 
                    }; 
                    var source = new MediaStreamAudioSourceNode(audio_context, options); 
                    source.connect(audio_context.destination);*/ 
                    //var merger = audio_context.createChannelMerger(2); 
                    var input = audio_context.createMediaStreamSource(stream); 
                    var stream2 = audio_context.createMediaStreamSource(document.getElementById('main_audio_remote').captureStream()); 
 
                    //merger.connect(input); 
                   // merger.connect(stream2); 
 
                    recorder = new Recorder(input); 
                    console.log('Recorder initialised.'); 
                } 
 
                function startRecording(button) { 
                    recorder && recorder.record(); 
                    console.log('Recording...'); 
                } 
 
                function stopRecording(button) { 
                    recorder && recorder.stop(); 
                    console.log('Stopped recording.'); 
                    createDownloadLink(); 
                    recorder.clear(); 
                } 
 
                function createDownloadLink() { 
                    recorder && recorder.exportWAV(function(blob) { 
                        var url = URL.createObjectURL(blob); 
                        var li = document.createElement('li'); 
                        var au = document.createElement('audio'); 
                        var hf = document.createElement('a'); 
 
                        au.controls = true; 
                        au.src = url; 
                        hf.href = url; 
                        hf.download = new Date().toISOString() + '.wav'; 
                        hf.innerHTML = hf.download; 
                        li.appendChild(au); 
                        li.appendChild(hf); 
                        recordingslist.appendChild(li); 
                    }); 
                } 
 
                window.onload = function init() { 
                    try { 
                        // webkit shim 
                        window.AudioContext = window.AudioContext || window.webkitAudioContext; 
                        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia; 
                        window.URL = window.URL || window.webkitURL; 
 
                        audio_context = new AudioContext; 
                        console.log('Audio context set up.'); 
                        console.log('navigator.getUserMedia ' + (navigator.getUserMedia ? 'available.' : 'not present!')); 
                    } catch (e) { 
                        alert('No web audio support in this browser!'); 
                    } 
 
                    //navigator.mediaDevices.getUserMedia({audio: true}) 
                    //.then(startUserMedia); 
 
                    navigator.getUserMedia({audio: true}, startUserMedia, function(e) { 
                        console.log('No live audio input: ' + e); 
                    }); 
                };

READ ALSO
Ввод цифры в alert

Ввод цифры в alert

Можно ли сделать так, чтобы когда пользователь вводил в prompt цифру 1 то ему показывалась картинка с информациейЕсли бы он вводил цифру 2, то ему...

175
Сбор данных из множественных полей

Сбор данных из множественных полей

Нужно собрать данные пользователя в post, как реализовать сбор полей email и phone если они множественные? Как собрать данные с inputов, если есть поля...

180
Анимация SVG с помощью JS

Анимация SVG с помощью JS

Есть рисунок svg -шный , там необходимо чтоб лента (белого цвета) по нажатию мигала зеленым цветом ,а коробок медленно двигался по этой ленте...

200