【发布时间】:2018-01-26 15:50:45
【问题描述】:
我正在使用MediaElementAudioSourceNode 播放音频文件 (refer to this question),它按预期工作,但我对断开连接后如何处理节点存有疑问。
目前我有这个代码:
//Do we have already an MediaElementSourceNode ?
if (this._sourceNode) {
console.warn("THERE IS AUDIO PLAYING!");
//this._audioContainer.addTextTrack
// disconnect and remove all references.
this._audioContainer.pause();
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
console.warn("The _audioContainer was paused and the _sourceNode disconnected");
}
this._audioContainer = new Audio(filePath);
this._audioContainer.oncanplaythrough = () => {
clearTimeout(securityTimeout);
console.log(this._audioContainer.readyState);
console.dir(this._audioContainer);
this.audioPlayerActive = true;
// MediaElementSource are ONE TIME ONLY use kind of Node
this._sourceNode = this._AudioContext.createMediaElementSource(this._audioContainer);
this._sourceNode.connect(this._EqNode);
this._audioContainer.play();
console.log("playAudioFile() END");
};
this._audioContainer.onended = () => {
console.log("__audioContainer.onended()");
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
};
使用Web Audio inspector on firefox,我可以看到,每次我运行此代码(单击按钮)时,它都会创建一个新的MediaElementAudioSourceNode,如果检测到,它会断开先前创建的MediaElementAudioSourceNode。此外,当音频结束时,它会断开它。但是即使几分钟后节点仍然存在:
我想防止内存泄漏。我该如何处置它们? 编辑: 没有可用的功能(我认为)
【问题讨论】: