2009-09-02 7 views
1

J'ai un lecteur vidéo flash qui demande un fichier flv à partir d'un serveur central. Ce serveur peut rediriger la requête vers un serveur depuis le pays de l'utilisateur si possible, un peu comme un CDN.Détection d'une redirection dans Flash/Actionscript?

Ce lecteur vidéo signale également les statistiques d'utilisation. Une chose que je voudrais signaler est le vrai serveur/emplacement à partir duquel le lecteur diffuse la vidéo. Donc, fondamentalement, si elle est redirigée, je veux savoir à ce sujet.

Il semble que vous ne pouvez pas extraire l'URL à partir d'un URLLoader, vous ne pouvez conserver qu'une copie du URLRequest avec lequel vous l'avez construit. Je remarque que vous pouvez écouter les événements d'état HTTP, qui incluent un 302 ou similaire. Mais malheureusement, l'objet HTTPStatusEvent n'affiche pas l'emplacement redirigé.

Des idées sur la façon de surveiller une redirection et obtenir l'emplacement redirigé?

Répondre

2

Je suis un peu surpris Flash vous permet de rediriger une requête vidéo du tout. Je l'ai fait un peu de creuser et il semble que vous pouvez obtenir l'information:

Handling Crossdomain.xml and 302 Redirects Using NetStream

Son poste parle spécifiquement au sujet de la difficulté des problèmes de sécurité qui se posent en raison du fait des opérations échouent si les données sont d'un non fiable serveur. Comme il ne sait pas d'où provient sa vidéo (redirection 302), Flash Player ne lui fait pas confiance et empêche certaines opérations sur le contenu chargé.

Comment il obtient le serveur le contenu a été effectivement chargé à partir est de faire une opération sur le fichier qui ne devrait pas être autorisé et il analyse les informations de domaine du message d'erreur:

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); 
} 

avis qu'il fait afin qu'il puisse charger le fichier de stratégie (pour autoriser les opérations à sécurité limitée sur le fichier). Je ne suis pas sûr que cela vous sera utile, mais lisez au moins l'article et réfléchissez-y. Vous pouvez également contacter directement l'auteur du blog. Il est très actif dans la communauté Flash.

+0

Hey hey! Merci pour votre aide, James. C'est un moyen très sale mais très efficace pour obtenir le serveur. Je suppose que je peux juste essayer de dessiner sur la vidéo, et si elle lance une SecurityError, je peux analyser le message d'erreur pour obtenir l'emplacement redirigé. Sinon, je peux supposer qu'il n'a pas été redirigé. – aaaidan

+0

J'avoue que c'est * très * sale et pour cette raison vous devez prendre la décision si cela en vaut vraiment la peine. Je ne peux pas y voir trop de mal cependant - soyez juste prudent et donnez-lui de bons tests. Et priez pour que le format du message de comportement et d'erreur ne change pas dans un futur lecteur Flash ... –

+0

Heh, ouais. Parce que le swf et la vidéo sont hébergés de la même manière sur le même réseau CDN, j'ai fini par utiliser un LocalConnection pour obtenir le domaine (final) réel, ce qui garantit qu'il n'y a pas de demandes inter-domaines. var realDomain: String = (new LocalConnection()) .domaine; – aaaidan