Red5 : Closing RTMPMinaConnection due to long handshake

Posté dans Flash le 16 juillet 2010 par Stéphane – 1 Commentaire

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

Posté dans Flash le 6 mai 2010 par Stéphane – Soyez le premier à réagir

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 :)

Zend Studio : Lenteurs

Posté dans Php le 14 mars 2010 par Stéphane – 1 Commentaire

Vous l’avez sans doute remarqué si vous utilisez Zend Studio, il est diablement lent lorsqu’il construit le projet etc. C’est très pénible. Il est néanmoins possible de le rendre nettement moins lent en supprimant des fonctionnalités :

Supprimer l’analyse sémantique

La fonctionnalité d’analyse sémantique permet de détecter les erreurs & avertissements dans vos scripts à la volée; cette fonctionnalité fait énormément ramer et n’est pas réellement utile dans la mesure ou la sauvegarde du script affichera ces erreurs.

Analyse sémanque Visual Studio

Analyse sémanque Visual Studio

En décochant cette option, vous devriez constater une amélioration notable des performances de Zend Studio.

Méta données de Versionnage (Fichiers .svn par exemple)

Si vous utilisez une application de versionnage (comme Subversion dans mon cas), supprimer l’indexation de ses dossiers sera un gain énorme. Notez que je n’utilise pas l’extension d’Eclipse pour subversion mais Tortoise sur windows et son équivalent linux Rabbit VCS.

Clic droit sur le projet >> Build path >> configure include/exclude

Zend studio configure buildpath

Zend studio configure buildpath

Dans exclude, ajouter des pattern du genre */.svn/*

Zend Studio Exclusion Pattern

Zend Studio Exclusion Pattern

Voila qui devrait améliorer votre Zend Studio :)

Ajouter la gestion d’extensions dans Zend Studio

Posté dans Php le 13 mars 2010 par Stéphane – Soyez le premier à réagir

Lorsque l’on utilise certains frameworks (cakePHP, Symphony, Smarty et j’en oublie) ou gestionnaires de templates, on est confronté à un problème d’affichage de certains fichiers relatifs à ces frameworks : par exemple, cakePHP utilise l’extension .ctp pour les fichiers de templates (.ctp pour cakePHP template j’imagine).
C’est vraiment très chiant car l’intérêt d’utiliser un IDE comme zend est justement de bénéficier de l’autocomplétion ou même de la coloration syntaxique. Le remède est simple, il suffit d’attribuer un type à chaque extension de fichier.

Procédure

Dans le menu principal, sélectionnez window puis preferences :

Zend Studio, gestion des extensions

Zend Studio, gestion des extensions

Dans le menu général, sélectionnez COntent Types, dans le menu contextuel qui apparaît à gauche, le type de fichier qui correspond à vos attentes, dans le cas d’un fichier  template cakePHP, j’ai choisi PHP Content Type.

Cliquez ensuite sur le bouton Add, et ajoutez votre extension, dans cet exemple *.ctp.

Vérification

Maintenant, pour vérifier que vous avez correctement ajouté le type, toujours dans Window >> Preferences, sélectionnez Editors >> File Associations dans le menu de gauche.

Cliquez ensuite sur le bouton Add, et ajoutez la même extension, vous devriez voir apparaître en bas les éditeurs associés :

Zend studio Editors

Zend studio Editors

Maintenant, vous pouvez ouvrir ces fichiers en les éditant de la même manière que les extensions moins exotiques.

FBML dans une application IFRAME

Posté dans Facebook le 14 février 2010 par Stéphane – 3 Commentaires

Voici une façon de développer des applications IFrame Facebook. Je pars du principe que vous avez une connaissance de la manière de développer sur Facebook.

Tout d’abord créez un fichier  xd_receiver.htm à la racine de votre application.

Ajoutez ce code dans le fichier xd_receiver.htm :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Cross-Domain Receiver Page</title>
</head>
<body>
<script src="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.debug.js" type="text/javascript"></script>
</body>
</html>

Dans la page de vos pages n’oubliez pas d’ajouter l’espace de nom Facebook :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

Appeller l’api JS de facebook dans la balise <head> de votre document HTML :

<script src="http://static.ak.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

Vous pouvez insérer ensuite du code FBML dans vos pages :

<fb:serverfbml>
 <script type=”text/fbml”>
  <fb:fbml>
    <fb:request-form action="http://monapp.com/do.php"
                     method="POST"
                     invite="true"
                     type="XFBML"
                     content="content">
       <fb:multi-friend-selector showborder="false" actiontext="Invitez vos amis.">
    </fb:request-form>
  </fb:fbml>
  </script>
</fb:serverfbml>

Ce code doit être placé après les éléments FBML placés dans vos pages :

<script type="text/javascript">
FB_RequireFeatures(["XFBML"], function()
{
  FB.Facebook.init("____API_KEY____", "xd_receiver.htm");
});
</script>

Voilà, en espérant que cela puisse aider certains