11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 1936|回复: 4
上一主题 下一主题

[悬赏 ≤ 99 银子] 视频切换播放内存持续增加导致卡死

[复制链接] TA的其它主题
发表于 2019-10-25 20:54:27 | 显示全部楼层 |阅读模式
60银子
问题如下:
一个四联屏的应用,图片较多,视频播放页面有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;
                }
        }

}


最佳答案

查看完整内容

下面的代码做一下调整: 调整后: [mw_shl_code=actionscript3,true] private function kill(e:Event):void { video.clear(); ns.clos ...
发表于 2019-10-25 20:54:28 | 显示全部楼层
下面的代码做一下调整:
[Actionscript3] 纯文本查看 复制代码
 private function kill(e:Event):void
                {
                        video.clear();
                        ns.close();
                }
                

调整后:
[Actionscript3] 纯文本查看 复制代码
 private function kill(e:Event):void
                {
                        video.clear();
                        ns.close();
ns.dispose();
                }
                
回复

使用道具 举报

发表于 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;
                        }
                }
回复

使用道具 举报

 楼主| 发表于 2019-10-26 21:05:42 | 显示全部楼层
wuliao2014 发表于 2019-10-26 16:37
/**关闭视频播放*/
                public function close():void
                {

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

使用道具 举报

 楼主| 发表于 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)



快速回复 返回顶部 返回列表