redblack 发表于 2019-10-25 20:54:27

视频切换播放内存持续增加导致卡死

问题如下:
一个四联屏的应用,图片较多,视频播放页面有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;
                }
        }

}


FlashASer 发表于 2019-10-25 20:54:28

下面的代码做一下调整:
private function kill(e:Event):void
                {
                        video.clear();
                        ns.close();
                }
               
调整后:
private function kill(e:Event):void
                {
                        video.clear();
                        ns.close();
ns.dispose();
                }
               

wuliao2014 发表于 2019-10-26 16:37:30

/**关闭视频播放*/
                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;
                        }
                }

redblack 发表于 2019-10-26 21:05:42

wuliao2014 发表于 2019-10-26 16:37
/**关闭视频播放*/
                public function close():void
                {


切换播放下一个视频 还要重新new一个呀

redblack 发表于 2019-10-30 10:49:38

把播放视频部分单独做成一个SWF文件加载,切换其他页面时卸载掉 但内存还是降不下来 ,以前做播放视频都是这样做的 还没遇到这样的现象
页: [1]
查看完整版本: 视频切换播放内存持续增加导致卡死

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)