Voici la solution à un problème que j’ai rencontré plusieurs fois, et dont la solution n’est pas évidente au premier coup d’oeil :
Comment faire un draw Bitmap sur un flv chargé depuis une url externe (un autre domaine). Cela fonctionne aussi pour les images.
Facile, vous allez dire… Mais on s’apercoit rapidement que quand on teste directement depuis le fla, pas de souci, par contre en ligne, on obtient une image unie, de la couleur du background appliqué au Bitmap.

En fait il s’agit du système de sécurité de Flash, qui ne permet pas par défaut de manipuler les objets Bitmap quand la source vient d’une url externe. On peut les afficher, les lire, mais pas les transformer et les cloner.

Le code de base pour dessiner le Bitmap apres avoir chargé le NetStream est le suivant :

itemToConnect.nc = new NetConnection();
itemToConnect.nc.connect( null );
itemToConnect.ns=new NetStream(itemToConnect.nc);
itemToConnect.ns.play(« http://www.monDomaineExterne.com/video.flv »);

var bitmap = new flash.display.BitmapData(106, 86,false,0×000000);
createEmptyMovieClip(« copie », 2);
copie.attachBitmap(bitmap,2, »auto »,false);
bitmap.draw(itemToConnect);
lv = new LoadVars();
lv.tab = new Array();

//tableau de pixel image de 86px de haut par 106 de large
for (i=0; i<86; i++) {
for (j=0; j<106; j++) {
lv.tab.push(bitmap.getPixel(j, i));
}
}

//écriture du fichier par appel d’un fichier asp ou php…
var lv2 = new LoadVars();
lv.sendAndLoad(« generejpg_.aspx »,lv2, »POST »);
lv2.onLoad = function () {
trace (« image enregistrée »);
}

Ensuite, 3 choses à faire :
1. Charger la classe nécessaire :

System.security.loadPolicyFile();

2. Initialiser la valeur checkPolicyFile à true avant le chargement du NetStream.

itemToConnect.ns.checkPolicyFile=true;
itemToConnect.ns.play(« http://www.monDomaineExterne.com/video.flv »);

3. Mettre le fichier crossdomain.xml à la racine du domaine hébergeant la video externe
Ce fichier indique les urls pour lesquelles l’accès aux fichiers est autorisé.

Son contenu :
<?xml version= »1.0″?>
<!DOCTYPE cross-domain-policy SYSTEM « http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd »>
<cross-domain-policy><allow-access-from domain= »www.monDomaineSource.com » />
</cross-domain-policy>

Vous pouvez mettre * à la place du domaine si vous souhaitez autoriser l’accès à tous les domaines, mais vos fichiers ne seront plus protégés sur ce point la.

Et voila, tout devrait fonctionner comme sur un fichier venant du même domaine.