2

我试图在 Flash 中实现一种幻灯片,它循环播放大约 100 个 h.264 编码的电影。我正在使用 NetConnection 和 NetStream 类连接到本地硬盘上的文件(请参见下面的代码)。

private function playMovie():void
{           
        var currentMovie:String = movies[index];
        index = (index + 1) % movies.length;

        netConnection = new NetConnection();
        netConnection.connect(null);

        if(netStream != null)
        {
            netStream.removeEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);         
            netStream = null;
        }

        netStream = new NetStream(netConnection);
        netStream.client = this;
        netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

        stageVideo.attachNetStream(null);
        stageVideo.attachNetStream(netStream);

        netStream.play(currentMovie);
}

private function netStatusHandler(evt:NetStatusEvent):void
{
        if(evt.info.code == "NetStream.Play.Stop")
        {
            playMovie();
        }
}

public function onMetaData(e:Object):void 
{
        netStream.seek(int(e["duration"]));
}       
public function onXMPData (e:Object):void {}

问题是 flashplayer 的内存使用量随着每部电影的增加而增加,当达到大约 1.3gb 时,它会自行结束而没有任何错误消息。

我的问题很明显:我该如何解决?

4

1 回答 1

1

您必须调用 NetConnection.close() 来释放资源,否则您的内存使用量将会增加。但是,更好的做法是在创建后保持相同的 NetConnection 和 NetStream 对象来播放不同的视频:

private function playMovie():void
{           
    var currentMovie:String = movies[index];
    index = (index + 1) % movies.length;

    if ( netConnection == null ) 
    {
        netConnection = new NetConnection();
        netConnection.connect(null);
    }

    if ( netStream == null )
    {
        netStream = new NetStream(netConnection);
        netStream.client = this;
        netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
        stageVideo.attachNetStream(netStream);
    }

    netStream.play(currentMovie);
}
于 2011-02-18T17:14:05.723 回答