From 4618692b5ff603d7e82d35d7f92c5bf8b5b2d822 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Sat, 3 Feb 2018 09:52:47 +0100 Subject: [PATCH] audio: use replaceTrack for hard mute uses replaceTrack for hard muting. This is different from soft mute, i.e. setting track.enabled = false --- src/content/peerconnection/audio/index.html | 3 ++- src/content/peerconnection/audio/js/main.js | 25 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/content/peerconnection/audio/index.html b/src/content/peerconnection/audio/index.html index c59acb174..dc1c5f1e6 100644 --- a/src/content/peerconnection/audio/index.html +++ b/src/content/peerconnection/audio/index.html @@ -56,7 +56,8 @@

WebRTC - + +
Bitrate
diff --git a/src/content/peerconnection/audio/js/main.js b/src/content/peerconnection/audio/js/main.js index c3ba3447a..380afb021 100644 --- a/src/content/peerconnection/audio/js/main.js +++ b/src/content/peerconnection/audio/js/main.js @@ -12,11 +12,14 @@ var audio2 = document.querySelector('audio#audio2'); var callButton = document.querySelector('button#callButton'); var hangupButton = document.querySelector('button#hangupButton'); +var muteButton = document.querySelector('button#muteButton'); var codecSelector = document.querySelector('select#codec'); -hangupButton.disabled = true; callButton.onclick = call; hangupButton.onclick = hangup; +muteButton.onclick = toggleMute; +var supportsReplaceTrack = window.RTCRtpSender && + 'replaceTrack' in RTCRtpSender.prototype; var pc1; var pc2; var localStream; @@ -126,6 +129,7 @@ function gotDescription2(desc) { desc.sdp = forceChosenAudioCodec(desc.sdp); pc1.setRemoteDescription(desc).then( function() { + muteButton.disabled = !supportsReplaceTrack; }, onSetSessionDescriptionError ); @@ -144,10 +148,29 @@ function hangup() { pc1 = null; pc2 = null; hangupButton.disabled = true; + muteButton.disabled = true; callButton.disabled = false; codecSelector.disabled = false; } +function toggleMute() { + var sender = pc1.getSenders()[0]; + var p; + if (!sender.track) { + trace('re-adding audio track'); + p = sender.replaceTrack(localStream.getAudioTracks()[0]); + } else { + trace('replacing audio track with null'); + p = sender.replaceTrack(null); + } + p.then(function() { + console.log('replaced track'); + }) + .catch(function(err) { + console.error('during replaceTrack', err); + }); +} + function gotRemoteStream(e) { if (audio2.srcObject !== e.streams[0]) { audio2.srcObject = e.streams[0];