2009-09-02 49 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