webRTC-通过webAudio gainNode推送流,即使在呼叫挂断后也能保持话筒接通

webRTC-通过webAudio gainNode推送流,即使在呼叫挂断后也能保持话筒接通,webrtc,web-audio-api,Webrtc,Web Audio Api,我有以下几段代码 function modifyGain(stream){ var AudioContext = window.AudioContext || window.webkitAudioContext; var ctx = new AudioContext(); var src = ctx.createMediaStreamSource(stream); var dst = ctx.createMediaStreamDestination(); var ga

我有以下几段代码

function modifyGain(stream){
    var AudioContext = window.AudioContext || window.webkitAudioContext;
  var ctx = new AudioContext();

  var src = ctx.createMediaStreamSource(stream);
  var dst = ctx.createMediaStreamDestination();

  var gainNode = ctx.createGain();
  gainNode.gain.value = 3.5;
  src.connect(gainNode);

  gainNode.connect(dst);
 
  return dst.stream;
}
我在原始流上尝试了
addTrack()
removeTrack()
,但没有成功

这就是如何使用上述功能

webcamStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
webcamStream = modifyGain(webcamStream);

document.getElementById("local_video").srcObject = webcamStream;

webcamStream.getTracks().forEach(
        function (track){
            myPeerConnection.addTrack(track, webcamStream);
        });
这就是我在呼叫挂断时停止跟踪的方法

webcamStream.getTracks().forEach(track => {
            track.stop();
        });
webcamStream = null;
localVideo.srcObject = null;
在我应用增益相关代码之前,一切正常。但一旦我加上浏览器不释放麦克风,我必须刷新页面,以便与另一端进行任何音频交换


请帮忙。

有两条流。您仅停止第二个流中的曲目,该流由
ctx.createMediaStreamDestination()
创建


要放弃麦克风,您需要停止从
navigator.mediaDevices.getUserMedia获得的原始流中的曲目。有两个流。您仅停止第二个流中的曲目,该流由
ctx.createMediaStreamDestination()
创建


要放弃麦克风,您需要停止从
navigator.mediaDevices.getUserMedia

获取的原始流中的曲目。getUserMedia无法重新录制:我也无法使用您的小提琴进行复制。我尝试了以下给定的代码,它似乎可以正常工作。但我不确定这是一个好方法还是否;webcamStream=修改增益(preGainLocalStream)
然后我停止了
webcamStream
preGainLocalStream
使用
preGainLocalStream.getTracks().forEach(track=>{track.stop();})和其他流相同。无法重新编程:我也无法使用您的小提琴进行复制。我尝试了下面给定的代码,它似乎可以工作。但我不确定这是一个好方法还是否;webcamStream=修改增益(preGainLocalStream)
然后我停止了
webcamStream
preGainLocalStream
使用
preGainLocalStream.getTracks().forEach(track=>{track.stop();})和其他流相同。