视频切换播放内存持续增加导致卡死
问题如下:一个四联屏的应用,图片较多,视频播放页面有8个视频 点击按钮播放一个,只实例化一个播放视频类,点击其中一个按钮后 播放器移动到相应位置开始播放视频,初始打开时的内存占用300多M,点击播放一个视频内存增加100M左右,几个视频来回点击切换12次左右 内存达到1000M 以上就卡死
单独写了一个测试程序 使用同样的类播放视频,点击一下换一个视频播放,内存不会持续增加,一直在100M左右
请问这是什么原因?播放视频的类如下:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
/**
* ...
*/
public class Player extends Sprite
{
private var video:Video;
private var ns:NetStream;
private var url:String;
public var loop:Boolean;
public var state:String = "stop";
public function Player(vw:int,vh:int)
{
var nc:NetConnection = new NetConnection();
nc.connect(null);
video = new Video(vw, vh);
addChild(video);
video.smoothing = true;
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, onState);
var obj:Object = new Object();
ns.client = obj;
obj.onMetaData = videoInfo;
video.attachNetStream(ns);
addEventListener(Event.REMOVED_FROM_STAGE, kill);
}
public function setSize(w:int,h:int):void
{
video.width = w;
video.height = h;
}
public function play(url:String,loop:Boolean):void
{
video.clear();
ns.close();
this.url = url;
this.loop = loop;
ns.play(url);
state = "playing";
}
public function pause():void
{
ns.pause();
state = "pause";
}
public function resume():void
{
ns.resume();
state = "playing";
}
private function onState(e:NetStatusEvent):void
{
trace(e.info.code)
if (e.info.code == "NetStream.Play.Stop"){
if (loop){
ns.play(url);
}else{
ns.close();
state = "stop";
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
private function kill(e:Event):void
{
video.clear();
ns.close();
}
private function videoInfo(info:Object):void
{
//time = info.duration;
}
}
}
下面的代码做一下调整:
private function kill(e:Event):void
{
video.clear();
ns.close();
}
调整后:
private function kill(e:Event):void
{
video.clear();
ns.close();
ns.dispose();
}
/**关闭视频播放*/
public function close():void
{
_isPlay=false;
if(video)
{
if(video.parent)
{
video.parent.removeChild(video);
}
video.clear();
video = null;
}
if(stream)
{
stream.removeEventListener(NetStatusEvent.NET_STATUS,onStatus);
stream.client.onMetaData = null;
stream.close();
stream = null;
}
if(netConnect)
{
netConnect.close();
netConnect = null;
}
} wuliao2014 发表于 2019-10-26 16:37
/**关闭视频播放*/
public function close():void
{
切换播放下一个视频 还要重新new一个呀 把播放视频部分单独做成一个SWF文件加载,切换其他页面时卸载掉 但内存还是降不下来 ,以前做播放视频都是这样做的 还没遇到这样的现象
页:
[1]