首頁  >  問答  >  主體

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 天前458

全部回覆(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
  • 取消回覆