1

我有一个使用 Flash 附带的标准 FLV 播放组件的 Flash 视频。我正在使用 ActionScript 3 来修改外观并设置事件侦听器。当视频完成播放时,我已将其设置为使用“externalInterface”转到新 URL。URL 是使用 SWFObject 在变量中设置的。

仅在少数情况下(50 人中有 3 人 - 使用 Amazon Turk 进行测试),人们报告说在视频开始播放之前就被直接带到了新网址。很难重复这个问题,但它确实发生在我身上一次。它与缓存没有任何关系,因为据报道人们第一次访问该 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);

为什么会在事件完成之前触发监听器?我该如何解决?

谢谢!

4

2 回答 2

1

根据我的发现,您需要检查以查看视频的初始停止状态。

此代码段将检测视频何时达到“停止”状态。“playbackBegun”布尔值用于忽略第一个“停止”状态,该状态发生在视频开始“播放”状态之前

代码在这里

梦想代码

据我了解,视频加载后处于初始停止状态,这意味着您完全加载的视频会触发该事件。因此视频被跳过。我访问了您发布的链接,发现在视频播放之前我也被重定向了。

希望这个对你有帮助。会继续看有没有别的。

于 2010-03-18T15:23:31.717 回答
1

似乎 Firefox 在到达视频加载量的末尾时触发了 COMPLETE。也就是说,如果整个视频尚未加载,但它完成了已加载的部分,则侦听器将被解雇。设置我自己的进度事件,而不是依赖内置的“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);
于 2010-03-23T15:54:21.887 回答