2010-03-18 56 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); 
相關問題