Flash

Red5 : Closing RTMPMinaConnection due to long handshake

Posted in Flash on juillet 16th, 2010 by Stéphane – 1 Comment

Red5 : Closing RTMPMinaConnection due to long handshake

Red5 est un serveur de streaming pour déployer de la vidéo, nous en avons déjà largement parlé sur ligams.com. L’un des logs récurrents que l’on peut avoir avec Red5 est l’erreur de handshake.

Cette erreur n’est pas issue d’une cause unique, c’est pourquoi il est important de bien en identifier la cause et de respecter la logique des concepteurs de Red5. Si vous n’êtes pas familier avec Red5, voici déjà comment installer un serveur Red5.

Causes du long handshake

  • L’application Red5 est mal installée : en réalité votre client Flash/Flex cherche à se connecter à une application qui n’existe pas, le serveur renverra donc false lors de la connexion.
  • L’application met trop de temps à répondre : cela se produit si le timeout survient, par défaut, il est de 5 secondes ce qui est largement suffisant; mais vous pouvez tout de même augmenter la valeur du timeout dans la conf Red5.
  • L’une des méthodes appConnect, appJoin, RoomConnect ou RoomJoin renvoi false, cela génère un long handshake.

C’est ce 3e cas dont nous allons parler.

Erreur fréquente

Voici une erreur fréquente à ne pas faire :

public boolean appConnect( IConnection conn , Object[] params )
{
//processus d'authentification
if(authentification)
{
return true;
}
else
{
rejectClient("Erreur d'authentification");
//il faudrait renvoyer vrai
return false;
}
}

Retourner false signifie en réalité que quelque chose s’est produit dans connexion à l’application Red5, il ne faut pas renvoyer false lorsque celle ci s’est bien déroulée. Il en va de même pour les méthodes appConnect, appJoin, RoomConnect et RoomJoin.

Appeler la méthode parente et renvoyer son résultat  est bien plus correct; au pire, renvoyez true systématiquement si vous n’invoquez pas la méthode de la super classe ApplicationAdapter.

TextInput Focus

Posted in Flash on mai 6th, 2010 by Stéphane – Be the first to comment

Lorsque l’on focus un TextInput, on souhaite souvent que le focus se place “à la fin” du texte et ne sélectionne pas le texte par défault lorsque l’on utilise la tabulation, on peut créer simplement ce comportement à l’aide d’un écouteur :

txt.addEventListener(FocusEvent.FOCUS_IN,setFocusTxt);

function setFocusTxt(event:FocusEvent):void
{
event.preventDefault();
stage.focus = txt;
txt.setSelection(this.txt_input.length,this.txt_input.length);

}

Cela évite la sélection du texte par défaut et prévient d’éventuelles erreurs de saisie dans ce cas. Libre à chacun d’adapter cette fonction à ses besoins :)

Completion Flashdevelop FLVPlayback

Posted in Flash on novembre 19th, 2009 by Stéphane – Be the first to comment

Dans un article récent, j’abordais la possibilité d’obtenir la complétion à partir d’un fichier SWC avec Flashdevelop, il est possible de souhaiter obtenir la complétion à partir des bibliothèques/composants Flash natifs livrés avec Flash CS4. COncernant FLVPlayback, on obtient la complétion de cette manière :

Dans flashdevelop :

Tools > Global classpaths, puis add classpath

Ajouter la ligne suivante :

C:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\Component Source\ActionScript 3.0

MovieClipLoader ActionScript 2

Posted in Flash on novembre 1st, 2009 by Stéphane – Be the first to comment

Vous avez un problème pour modifier les images (ou animations) chargées dynamiquement en Actionscript 2 en utilisant LoadMovie() ? C’est normal. On souhaite souvent redimensionner une image, la rendre invisible ou exécuter n’importe quelle autre action sur ce type de clip. Il faut pour cela utiliser MovieClipLoader.

Prenons l’exemple d’une image chargée dynamiquement que l’on souhaite redimensionner au format 200×200 :

function resize(mc:MovieClip)
{
mc._width = 200;
mc._height = 200;
}
var oListenner:Object = new Object();
oListenner.onLoadInit = resize;
var oMcl:MovieClipLoader = new MovieClipLoader();
oMcl.addListener(oListenner);
var _mc= this.createEmptyMovieClip(i,this.getNextHighestDepth());
oMcl.loadClip('image.jpg',_mc);

Le clip sera donc chargé au moment où on le redimensionne, et ça fonctionnera, contrairement aux comportements aléatoires que l'on peut avoir avec loadMovie.

Feuilles de style CSS en Flash

Posted in Flash on octobre 28th, 2009 by Stéphane – Be the first to comment

Il est possible en Flash dans les composants comme TextField (ou flash.ui.*) d’avoir recours à des feuilles de style CSS classiques. Attention, il s’agit de feuilles de style appauvries, toutes les propriétés ne sont pas implémentées : oublier les float et tout le reste :)

Exemple d’utilisation :

var words:String = "<h1>Salut</h1><p>tout le monde</p>";
var _tipText:TextField = new TextField();
var s:StyleSheet = new StyleSheet();

/* on passe la CSS ici */
s.parseCSS('h1{font-weight:bold;font-size:14px;color:#BB3207;text-align:center;} p{color:#207B23;}');
/* on peut aussi l'importer de l'extérieur */

_tipText.styleSheet = s;
_tipText.htmlText = words;
this.addChild( _tipText);