2010-03-18 53 views
1

我有使用Flash附带的标准FLV Playback组件的Flash视频。我正在使用ActionScript 3来修改外观并设置事件侦听器。当视频完成播放时,我已将其设置为使用“externalInterface”转到新的URL。该URL使用SWFObject设置在变量中。Flash AS3:(VideoEvent.COMPLETE,completePlay) - 在视频完成之前触发侦听器

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

这里的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); 

为什么要监听的事件完成之前被触发?我该如何解决它?

谢谢!

回答

1

从我的ablr中找到您需要检查以查看视频的初始停止状态。

这段代码会检测 视频何时达到“停止”状态。 的“playbackBegun”布尔被用作 一个办法忽略第一个“停止” 状态,这发生之前视频 开始它的“玩”的状态

代码可以在这里找到

dreamincode

从我的理解是,视频加载后有一个初始停止状态,这意味着您的满载视频触发事件。因此视频被跳过。我已经转到您发布的链接,发现我也在视频播放前被重定向。

希望这会有所帮助。将继续寻找,看看有没有别的。

+0

这想法似乎像它可能是答案,但它只是如果没有控制条适用。问题仍在报道中。 – Tevi

1

看来Firefox在触发视频加载量结束时会触发COMPLETE。也就是说,如果整个视频还没有被加载,但它完成了一小部分,听众就被解雇了。设置我自己的进度事件,而不是依靠建造的“playwheenoughloaded”似乎已经解决了这个问题。

下面的代码:

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); 
相关问题