Flash AS3:(VideoEvent.COMPLETE,completePlay) - 在视频完成之前触发侦听器

时间:2010-03-18 15:00:21

标签: flash actionscript-3 events flvplayback

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

仅在少数情况下(50人中有3人 - 使用亚马逊土耳其人测试),人们报告在视频开始播放之前直接被带到新网址。这个问题很难重复,但它确实发生在我身上。它与缓存没有任何关系,因为它已经被人们首次报告到了网址。

以下是视频的网址: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 个答案:

答案 0 :(得分:1)

从我的ablr发现你需要检查以查看视频的初始停止状态。

  

这个片段会检测到什么时候   视频已达到“停止”状态。   “playbackBegun”布尔值用作   一种忽略第一个“停止”的方法   状态,发生在视频之前   开始它是“玩”状态

代码在这里找到

dreamincode

根据我的理解,视频加载后具有初始停止状态,这意味着您的完全加载视频会触发事件。因此跳过了视频。我已经转到你发布的链接,发现我在播放视频之前也被重定向了。

希望这会有所帮助。会继续留意是否还有其他事情。

答案 1 :(得分: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);