Flash AS3:(VideoEvent.COMPLETE,completePlay)-在视频完成之前触发侦听器
我有一个flash视频,使用flash附带的标准FLV播放组件。我正在使用ActionScript3修改外观并设置事件侦听器。我已经将其设置为在视频播放完成后使用“externalInterface”转到新的URL。URL是使用SWFObject在变量中设置的 仅在少数情况下(使用Amazon Turk测试的50人中有3人),有人报告说在视频开始播放之前就被直接带到了新的url。很难重复这个问题,但我确实遇到过一次。它与缓存没有任何关系,因为有报道称人们第一次访问url 以下是视频的url: 代码如下:Flash AS3:(VideoEvent.COMPLETE,completePlay)-在视频完成之前触发侦听器,flash,actionscript-3,events,flvplayback,Flash,Actionscript 3,Events,Flvplayback,我有一个flash视频,使用flash附带的标准FLV播放组件。我正在使用ActionScript3修改外观并设置事件侦听器。我已经将其设置为在视频播放完成后使用“externalInterface”转到新的URL。URL是使用SWFObject在变量中设置的 仅在少数情况下(使用Amazon Turk测试的50人中有3人),有人报告说在视频开始播放之前就被直接带到了新的url。很难重复这个问题,但我确实遇到过一次。它与缓存没有任何关系,因为有报道称人们第一次访问url 以下是视频的url: 代
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);
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);
为什么在事件完成之前会触发侦听器?我怎样才能修好它
谢谢 根据我的发现,您需要检查视频的初始停止状态 此代码段将检测 视频已达到“停止”状态。 “playbackegun”布尔值用作 忽略第一个“已停止”的方法 状态,它发生在视频播放之前 开始它的“播放”状态 代码可以在这里找到 据我所知,在加载视频后,它有一个初始停止状态,这意味着完全加载的视频会触发事件。因此,视频被跳过。我去了你发布的链接,发现在视频播放之前我也被重定向了
希望这有点帮助。将继续查看是否还有其他内容。Firefox似乎会在视频加载量结束时触发COMPLETE。也就是说,如果整个视频尚未加载,但它完成了部分加载,则侦听器将被解雇。设置我自己的进度事件,而不是依赖构建的“PlayWheenOutloaded”似乎解决了这个问题 代码如下:
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);
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);
这个想法似乎是答案,但它只适用于没有控制栏的情况。该问题仍在报告中。