我使用Flash附带的标准FLV播放组件制作了Flash视频。我正在使用ActionScript 3来修改外观并设置事件侦听器。我已将其设置为在视频完成播放时使用“externalInterface”转到新URL。使用SWFObject在URL中设置URL。
仅在少数情况下(50人中有3人 - 使用亚马逊土耳其人测试),人们报告在视频开始播放之前直接被带到新网址。这个问题很难重复,但它确实发生在我身上。它与缓存没有任何关系,因为它已经被人们首次报告到了网址。
以下是代码:
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);
为什么在事件结束前触发侦听器?我该如何解决?
谢谢!
答案 0 :(得分:1)
从我的ablr发现你需要检查以查看视频的初始停止状态。
这个片段会检测到什么时候 视频已达到“停止”状态。 “playbackBegun”布尔值用作 一种忽略第一个“停止”的方法 状态,发生在视频之前 开始它是“玩”状态
代码在这里找到
根据我的理解,视频加载后具有初始停止状态,这意味着您的完全加载视频会触发事件。因此跳过了视频。我已经转到你发布的链接,发现我在播放视频之前也被重定向了。
希望这会有所帮助。会继续留意是否还有其他事情。答案 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);