Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3:(VideoEvent.COMPLETE,completePlay)-在视频完成之前触发侦听器_Flash_Actionscript 3_Events_Flvplayback - Fatal编程技术网

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

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: 代

我有一个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);

这个想法似乎是答案,但它只适用于没有控制栏的情况。该问题仍在报告中。