首页  >  问答  >  正文

Safari中的MediaStream未能正确释放资源

<p>我正在使用AudioWorkletNode方法进行录音,所有浏览器似乎都可以正常录音。</p> <p>当我录音时,录音图标会出现在标签页上,录音结束后会消失。</p> <p>然而,在Safari浏览器中,标签页上会出现一个小喇叭图标(通常表示标签页正在发出声音),取代了麦克风图标。</p> <p>所以我认为我可能没有关闭某些东西。</p> <p>录音完成后我会执行以下操作:</p> <pre class="brush:php;toolbar:false;">// stream是MediaStream类型 if (stream) stream.getTracks().forEach(track => track.stop()); stream = null</pre> <p>流是通过以下方式创建的:</p> <pre class="brush:php;toolbar:false;">stream = await navigator.mediaDevices.getUserMedia({ audio: options });</pre> <p>是否还需要做其他操作以释放所有资源?</p>
P粉106715703P粉106715703386 天前457

全部回复(1)我来回复

  • P粉536909186

    P粉5369091862023-08-31 10:10:19

    要关闭所有东西,下面的方法似乎有效。我只是通过试错找到了这个方法,因为我无法弄清楚如何让Safari告诉我它仍然持有什么:

    // stream : MediaStream
    // sourceNode : MediaStreamAudioSourceNode
    // recorderNode : AudioWorkletNode
    
    const tracks = stream.getTracks();
    tracks.forEach((track) => {
      track.stop();
      stream.removeTrack(track)
    });
    stream = null
    
    sourceNode.disconnect();
    sourceNode = undefined
    
    recorderNode.disconnect();
    recorderNode = undefined

    回复
    0
  • 取消回复