происходит сбой флэш-плеера при просмотре фильмов - PullRequest
2 голосов
/ 18 февраля 2011

Я пытаюсь реализовать своего рода слайд-шоу во флэш-памяти, которое зацикливает около 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 ГБ оно просто завершается без сообщения об ошибке.

мой вопрос, очевидно: как я могу это исправить?

1 Ответ

1 голос
/ 18 февраля 2011

Вы должны вызвать 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);
}
...