Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用音量增益时如何正确释放audioContext_Javascript_Google Chrome_Webrtc - Fatal编程技术网

Javascript 使用音量增益时如何正确释放audioContext

Javascript 使用音量增益时如何正确释放audioContext,javascript,google-chrome,webrtc,Javascript,Google Chrome,Webrtc,当使用WebRTC时,在我停止流之后,网络摄像头指示灯将熄灭,chrome选项卡上的红点将消失。如下图所示 因此,当我执行以下操作时: xstream.stop(); wp.audio.source.mediaStream.stop(); wp.audio.destination.stream.stop(); wp.audio.outputStream.stop(); wp.audio.source.disconnect(); wp.audio.volume.disconnect(); wp.

当使用WebRTC时,在我停止流之后,网络摄像头指示灯将熄灭,chrome选项卡上的红点将消失。如下图所示

因此,当我执行以下操作时:

xstream.stop();
wp.audio.source.mediaStream.stop();
wp.audio.destination.stream.stop();
wp.audio.outputStream.stop();
wp.audio.source.disconnect();
wp.audio.volume.disconnect();
wp.audio.destination = null;
wp.audio.source = null;
wp.audio.volume = null;
wp.audio.outputStream = null;
wp.audioContext.close();
xstream.stop();
xxx.src = '';
我可以走了,网络摄像头的灯熄灭了,标签上的红点立刻消失了

但当我使用如下audioContext时:

vid = document.createElement('VIDEO');
vid.style.width = 100;
vid.style.height = 100;
vid.style.top = 100;
vid.style.left = 0;
vid.style.position = 'absolute';
vid.style.border = '1px solid red';
vid.id = 'xxx';
document.body.insertBefore(vid,document.body.childNodes[0]);
xxx = document.getElementById('xxx');
var xstream = null
    wp = {};

navigator.webkitGetUserMedia({video:true, audio:true},
  function(stream) {
    xstream = stream;

    wp.audio = {
        source: null,
        volume: null,
        enabled: true
    }
    wp.audioContext = new window.AudioContext();
    wp.audio.source = wp.audioContext.createMediaStreamSource(stream);
    wp.audio.volume = wp.audioContext.createGain();
    wp.audio.destination = wp.audioContext.createMediaStreamDestination();
    wp.audio.outputStream = wp.audio.destination.stream;
    wp.audio.source.connect(wp.audio.volume);
    wp.audio.volume.connect(wp.audio.destination);
    stream.addTrack(wp.audio.outputStream.getAudioTracks()[0]);
    stream.removeTrack(stream.getAudioTracks()[0]);

    xxx.src = window.URL.createObjectURL(stream);
  },
  function(error) {
    console.log('err', error);
  }
);
xxx.play();
如果我只是简单地执行xstream.stop,虽然网络摄像头指示灯已熄灭,但红点仍在显示

但如果我做了以下事情:

xstream.stop();
wp.audio.source.mediaStream.stop();
wp.audio.destination.stream.stop();
wp.audio.outputStream.stop();
wp.audio.source.disconnect();
wp.audio.volume.disconnect();
wp.audio.destination = null;
wp.audio.source = null;
wp.audio.volume = null;
wp.audio.outputStream = null;
wp.audioContext.close();
xstream.stop();
xxx.src = '';
有时红点会消失,大多数时候不会。当它消失时,通常需要20-40秒,有时甚至更长

不知道我做错了什么


注意:您可以复制并粘贴控制台中的代码以进行尝试

或者您可以尝试在stream.removeTrack之前停止stream