2

約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 {}

問題は、フラッシュプレーヤーのメモリ使用量が映画ごとに増加し、約1.3 GBに達すると、エラーメッセージなしで終了することです。

私の質問は明らかに:どうすればそれを修正できますか?

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 に答える