[]Laya.Video内存泄漏问题
前段时间用Laya来做视频播放的功能,版本是 1.7.4_beta
发现Laya.Video对象在destroy后内存占用不会被释放。
参考Google的各个结果,表示H5,video对象存在删除节点后并不能马上释放内存的BUG,如果是频繁的视频播放,则会引起快速的内存增长,对于性能的损耗是巨大的。
另外,对于循环播放的视频对象,destroy后,如果有音频的话,音频依然会继续播放。
提供一个测试Demo:
laya.device.js
Line 623: 增加以下代码
亲测仅仅移除videoElement的source子节点并不能加速内存释放,必须将src设置为空字符。(希望Laya的大神们测试过后解释一下为什么。。。)官方说明,对于多媒体对象,显式移除src以及节点下的source子节点,并且将所有引用取消指向,可以加速内存的释放。如:
发现Laya.Video对象在destroy后内存占用不会被释放。
参考Google的各个结果,表示H5,video对象存在删除节点后并不能马上释放内存的BUG,如果是频繁的视频播放,则会引起快速的内存增长,对于性能的损耗是巨大的。
另外,对于循环播放的视频对象,destroy后,如果有音频的话,音频依然会继续播放。
提供一个测试Demo:
Laya.init(1000, 800);顺便提供一个简单的修复方法:
Laya.Stat.show(0,0);
var video_url = '带有音轨的视频';
Laya.loader.load([{url: video_url, type: Laya.Loader.BUFFER }], Laya.Handler.create(this, createVideo));
var v;
function createVideo() {
var video_file = new Blob([Laya.loader.getRes(video_url)], {type: 'video/webm'});
var blob_url = URL.createObjectURL(video_file);
var video = new Laya.Video();
video.loop = true;
video.load(blob_url);
Laya.stage.addChild(video);
video.play();
v = video;
Laya.timer.once(5000, this, function() { v.destroy(); });
}
laya.device.js
Line 623: 增加以下代码
while(this.videoElement.childElementCount) {
this.videoElement.firstChild.remove();
}
this.videoElement.src = '';
亲测仅仅移除videoElement的source子节点并不能加速内存释放,必须将src设置为空字符。(希望Laya的大神们测试过后解释一下为什么。。。)官方说明,对于多媒体对象,显式移除src以及节点下的source子节点,并且将所有引用取消指向,可以加速内存的释放。如:
var video = new HTHLVideo();测试出更快的释放方法
video = null;//移除引用
没有找到相关结果
已邀请:
要回复问题请先登录
2 个回复
cuixueying
赞同来自:
EdwardRio
赞同来自:
测试Demo中:var video = new Laya.Video(); 这行代码报错
提示说Video中的Constructor不存在。
原文:Laya.Video is not a constructor