Safari中的MediaStream未能正确释放资源
P粉106715703
P粉106715703 2023-08-30 17:23:15
0
1
452
<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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!