[]Laya.Video内存泄漏问题

前段时间用Laya来做视频播放的功能,版本是 1.7.4_beta
发现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 = '';

G)AJE(DYXGEX8F@(7D4IP.png

亲测仅仅移除videoElement的source子节点并不能加速内存释放,必须将src设置为空字符。(希望Laya的大神们测试过后解释一下为什么。。。)官方说明,对于多媒体对象,显式移除src以及节点下的source子节点,并且将所有引用取消指向,可以加速内存的释放。如:
var video = new HTHLVideo();
video = null;//移除引用
测试出更快的释放方法

_DONT4_5FPY6O84ZGY.png

 
已邀请:

cuixueying

赞同来自:

问题收到,我们看下!

EdwardRio

赞同来自:

楼主求助:
测试Demo中:var video = new Laya.Video(); 这行代码报错
  提示说Video中的Constructor不存在。
  原文:Laya.Video is not a constructor

要回复问题请先

商务合作
商务合作