Safari中的MediaStream未能正確釋放資源
P粉106715703
P粉106715703 2023-08-30 17:23:15
0
1
529
<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粉106715703
P粉106715703

全部回覆(1)
P粉536909186

要關閉所有東西,以下的方法似乎有效。我只是透過試誤找到了這個方法,因為我無法弄清楚如何讓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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板