Flash AS3: (VideoEvent.COMPLETE, completePlay) - прослушиватель запускается до завершения видео - PullRequest
1 голос
/ 18 марта 2010

У меня есть флэш-видео с использованием стандартного компонента воспроизведения FLV, который поставляется с Flash. Я использую ActionScript 3, чтобы изменить внешний вид и настроить прослушиватель событий. Я настроил его для перехода на новый URL-адрес с помощью «externalInterface», когда видео завершит воспроизведение. URL задается в переменной с помощью SWFObject.

Лишь в нескольких случаях (3 человека из 50 - протестированных с помощью Amazon Turk) люди сообщали, что их перенаправили прямо на новый URL-адрес еще до того, как видео начало воспроизводиться. Трудно повторить проблему, но она однажды случилась со мной. Он не имеет никакого отношения к кешу, так как сообщалось о людях, которые впервые заходят на URL.

Вот URL к видео: http://www.partstown.com/is-bin/INTERSHOP.enfinity/WFS/Reedy-PartsTown-Site/en_US/-/USD/ViewStaticPage-UnFramed?page=tourthetown

Вот код:

import flash.external.*;
import fl.video.*;
var myVideo:FLVPlayback = new FLVPlayback();

var theUrl:String = this.loaderInfo.parameters.urlName;
var theScript:String = this.loaderInfo.parameters.scriptName;


myVideo.source = this.loaderInfo.parameters.videoPath;//"partstown.flv";
myVideo.skin = this.loaderInfo.parameters.skinPath;//"SkinUnderPlayStopSeekMuteVol.swf"
myVideo.skinBackgroundColor = 0xAEBEFB;
myVideo.skinBackgroundAlpha = 0.5;
myVideo.width = 939;
myVideo.height = 660;


myVideo.addEventListener(VideoEvent.COMPLETE, completePlay);
function completePlay(e:VideoEvent):void {
 myVideo.alpha=0.2;
 ExternalInterface.call(theScript);
}


addChild(myVideo);

Почему слушатель будет активирован до завершения события? Как я могу это исправить?

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Кажется, что Firefox запускает ПОЛНОЕ, когда достигает конца загруженного количества видео. То есть, если все видео не было загружено, но оно завершает часть того, что было, слушатель уволен. Установка моего собственного события прогресса вместо того, чтобы полагаться на встроенный «playwhenenoughloaded», похоже, устранила проблему.

Вот код:

import flash.external.*;
import fl.video.*;
var myVideo:FLVPlayback = new FLVPlayback();

var theUrl:String = this.loaderInfo.parameters.urlName;
var theScript:String = this.loaderInfo.parameters.scriptName;


myVideo.source = this.loaderInfo.parameters.videoPath;//"partstown.flv";
myVideo.skin = this.loaderInfo.parameters.skinPath;//"SkinUnderPlayStopSeekMuteVol.swf"
myVideo.skinBackgroundColor = 0xAEBEFB;
myVideo.skinBackgroundAlpha = 0.5;
myVideo.width = 939;
myVideo.height = 660;
myVideo.autoPlay = false;

myVideo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
function onLoadProgress(event:ProgressEvent):void {
    var loadedPct:uint = Math.round(100 * (event.bytesLoaded / event.bytesTotal));
    trace('waiting...');

    if (loadedPct >= 20){

       trace(event.bytesLoaded);
       trace(loadedPct);
       myVideo.play();

       trace('Playing');
    }
    if (loadedPct >= 90){
        trace('Ready to Complete');
        myVideo.addEventListener(VideoEvent.COMPLETE, completePlay);

    }
}

function completePlay(ve:VideoEvent):void {    
    trace('COMPLETE!!');
    myVideo.alpha=0.2;
    ExternalInterface.call(theScript);
    }

addChild(myVideo);
1 голос
/ 18 марта 2010

Из того, что я нашел, вам нужно проверить, чтобы увидеть начальное состояние остановки видео.

Этот фрагмент обнаружит, когда видео достигло "остановленного" состояния. Логическое значение «PlayBegun» используется как способ игнорировать первый «остановленный» состояние, которое происходит перед видео начинается "играющее" состояние

код находится здесь

DreamInCode .

Из того, что я понял, после загрузки видео начальное состояние останова означает, что ваше полностью загруженное видео вызывает событие. таким образом видео пропускается. Я перешел по ссылке, которую вы разместили, и обнаружил, что меня тоже перенаправили до воспроизведения видео.

надеюсь, это немного поможет. будет продолжать искать, есть ли что-нибудь еще.

...