2017-02-09 6 views
3

これまでのところ、MediaRecorder APIを使用してローカルまたはリモートのどちらか一方のみを記録する方法を見つけましたが、両方のストリームをミックスして記録することは可能ですか?WebRTCはローカルとリモートのオーディオストリームをミキシングして記録します

オーディオスチームにのみ注意してください。私はサーバー側でミックス/録音したくありません。

私はRTCPeerConnectionpcとしました。

var local_stream = pc.getLocalStreams()[0]; 
var remote_stream = pc.getRemoteStreams()[0]; 
var audioChunks = []; 
var rec = new MediaRecorder(local_stream); 
rec.ondataavailable = e => { 
    audioChunks.push(e.data); 
    if (rec.state == "inactive") 
     // Play audio using new blob 
} 
rec.start(); 

はも、私はMediaStream APIで複数のトラックを追加しようとしたが、それはまだ最初のトラックのオーディオを提供します。どんな助けや洞察も高く評価されます!

+0

@AdrianBerのすべてのオーディオトラックを録音する場合は、このコードを検討してください。私の質問は異なります。 2つのオーディオストリームをミキシングし、単一のスチームオブジェクトとして記録します。だから、あなたは両方のパーティの会話を単一のオーディオ要素で聴くことができます。実際には、2つのビデオストリームをミキシングして1つのストリームを表示して見ることはできません。 –

+0

私は投票を取り下げた。実際には2つのビデオストリームをミックスすることができます。私の答えはこちらをご覧ください:http://stackoverflow.com/questions/40966322/is-it-possible-to-merge-2-webm-video-streams-into-one-stream-in -画像 –

答えて

4

WebAudio APIは、あなたのためにミキシングすることができます。 audioTracks

const ac = new AudioContext(); 

// WebAudio MediaStream sources only use the first track. 
const sources = audioTracks.map(t => ac.createMediaStreamSource(new MediaStream([t]))); 

// The destination will output one track of mixed audio. 
const dest = ac.createMediaStreamDestination(); 

// Mixing 
sources.forEach(s => s.connect(dest)); 

// Record 10s of mixed audio as an example 
const recorder = new MediaRecorder(dest.stream); 
recorder.start(); 
recorder.ondataavailable = e => console.log("Got data", e.data); 
recorder.onstop =() => console.log("stopped"); 
setTimeout(() => recorder.stop(), 10000); 
関連する問題