2009-09-02 43 views
1

我有一個Flash視頻播放器,它從中央服務器請求flv文件。如果可能的話,該服務器可能會將請求重定向到用戶所在國的服務器,很像CDN。在Flash/Actionscript中檢測重定向?

此視頻播放器還會報告使用情況統計信息。我想報告的一件事是播放器從中流式傳輸視頻的真實服務器/位置。所以基本上,如果它被重定向,我想知道它。

您似乎無法從URLLoader中提取網址,因此只能保留您構建它的URLRequest的副本。

我注意到,您可以偵聽HTTP狀態事件,其中將包括302或類似的。但不幸的是,HTTPStatusEvent對象不顯示重定向的位置。

有關如何監控重定向並獲取重定向位置的任何想法?

回答

2

我有點驚訝Flash可以讓你重定向一個視頻請求。我做了一些挖的,它看起來像你可以得到的信息:

Handling Crossdomain.xml and 302 Redirects Using NetStream

他的文章專門談到的出現的,因爲事實上一些操作失敗,如果數據是來自不受信任的安全問題的麻煩服務器。由於他不知道他的視頻來自何處(302重定向),因此Flash Player不會信任它並阻止對加載的內容執行某些操作。

他是如何得到的內容實際上是加載從是在不應該被允許的文件做一個操作的服務器和他解析錯誤消息中的域信息:

try 
{ 
    var bit:BitmapData = new BitmapData(progressiveVideoPlayer.measuredWidth, progressiveVideoPlayer.measuredHeight, false, 0x000000); 
    bit.draw(progressiveVideoPlayer); 
} 
catch(error:SecurityError) 
{ 
    var list:Array = error.toString().split(" "); 
    var swfURL:String = list[7] as String; 
    var domain:String = list[10] as String; 
    domain = domain.substring(0, domain.length - 1); 
    var domainList:Array = domain.split("/"); 
    var protocol:String = domainList[0] as String; 
    var address:String = domainList[2]; 
    var policyFileURL:String = protocol + "//" + address + "/crossdomain.xml"; 
    Security.loadPolicyFile(policyFileURL); 
} 

通知他正在做這樣他就可以加載策略文件(以允許對文件進行安全限制的操作)。我不確定這會對你有所幫助,但至少閱讀文章並思考。您也可以直接聯繫博客作者 - 他在Flash社區非常活躍。

+0

嘿嘿!謝謝你的幫助,詹姆斯。這是一個非常骯髒,但非常有效的方式來獲得服務器。我想我可以嘗試在視頻上繪圖,如果它引發SecurityError,我可以解析出錯誤消息以獲取重定向位置。否則,我可以認爲它沒有重定向。 – aaaidan 2009-09-02 03:30:31

+0

我承認這是非常骯髒的,因此你必須做出是否真的值得的決定。雖然我看不出太多傷害 - 只是要小心並給它一些好的測試。並祈禱行爲和錯誤消息格式不會在未來的Flash Player中更改... – 2009-09-02 04:48:09

+0

嘿,是的。 由於swf和視頻在同一CDN網絡上以相同方式託管,因此我最終使用LocalConnection來獲取實際(最終)域,從而確保沒有跨域請求。 var realDomain:String =(new LocalConnection())。domain; – aaaidan 2009-09-16 01:51:32