Archive for June, 2010

Silverlight Smooth Streaming for WordPress [Plugin]

10 commentaires
Get Microsoft Silverlight

Je mets en ligne un nouveau plugin wordpress. Il s'agit d'un lecteur vidéo smooth streaming également capable de lire une vidéo standard au format wmv, ou mov, mp4 (lorsque la vidéo est encodée en H264). Il vous faudra tout de même héberger la vidéo sur un serveur IIS si vous souhaitez bénéficier du smooth streaming. Le configurer est relativement simple puisque nous fournissons une fenêtre d'administration côté WordPress. Celle-ci possède un aperçu du lecteur, la possibilité de modifier la couleur, l'url de la vidéo, la lecture automatique, les dimensions ainsi que la couleur de fond du player. Celui-ci vous avertit, lorsque la vidéo n'est pas hébergée sur votre serveur, des contrainte de sécurité que vous pourriez rencontrer (crossdomain.xml ou clientaccesspolicy.xml nécessaire et configuré).

J'ai réalisé la conception côté Silverlight mais je n'ai pas utilisé pour cela le player fourni par Microsoft. J'ai préféré utiliser la librairie SLExtensions conçues par la société Ucaya spécialisée dans la conception de ce type de lecteur. Par le passé, Ucaya a réalisé les players du "Tour de France", "Rolland Garros", "France Télévision" et j'en passe. Quels sont les avantages me direz-vous ? C'est tout simple. Tout d'abord les fonctionnalités apportée par la librairie sont ultra complètes. De plus, celle-ci offre la possibilité de faire du Full MVVM, Du coup l'interface est entièrement Designable (bien mieux que skinnable). Pour finir, sa conception est assez fine car elle permet d'instancier un MediaElement ou l'équivalent pour le smooth streaming selon le type d'url que vous fournissez : ism et isml pour le smooth streaming et wmv, mov, mp4 (H264) pour les vidéos standards. Il est donc possible de faire un player à la carte et d'éviter l'arsenal fourni par la librairie SMF de Microsoft.

Si vous souhaitez faire la différence entre les différents modes de diffusion existant, vous pouvez consulter les schémas ci-dessous.

Get Microsoft Silverlight

Ceux-ci sont directement issus de mon livre Pratique de Silverlight aux éditions Pearson. Vous pouvez consulter de nombreux schémas présent dans le livre sur le blog dédié.

Yet another Lite 3D Engine to release

Aucun commentaire

Je mettrai en ligne courant de l'été une première release de la librairie Tweened. Celle-ci contient notamment, des composants, des behaviors, un wrapper de tween (facilitant la conception d'animation par code) ainsi qu'un mini moteur 3D très simple d'utilisation. En voici un exemple concret téléchargeable ici :

Install Microsoft Silverlight

J'ai fais ce moteur avant tout pour des besoins personnels et afin de me remémorer les mathématiques projectives. Réinventer la poudre ne fais quelques fois pas de mal. L'idée est surtout de fournir une dll de moins de 40ko qui permet de faire de la 3D. Celle-ci sera utilisable pour les designers à travers Blend ou dans Visual Studio via C#. Elle concentrera très vite toutes les fonctionnalités de base réellement utiles et que nous n'avons pas actuellement via Blend : Caméra 3D, Container 3D, Scène 3D, détection des normales et z sorting intelligent (plus malin et performant que celui actuellement proposé dans Blend). J'y ajoute une classe utilitaire facilitant l'utilisation de mathématiques projectives.

Voilà ces composants :

  1. Un conteneur de type Scene3D (hérite de Panel).
    Tous les objets placés en sont sein voient leur propriétés Projection native lockée. Ceux-ci peuvent utilisées les propriétés attachées suivantes :

    • Scene3D.LocalOffsetX
    • Scene3D.LocalOffsetY
    • Scene3D.LocalOffsetZ
    • Scene3D.GlobalOffsetX
    • Scene3D.GlobalOffsetY
    • Scene3D.GlobalOffsetZ
    • Scene3D.RotationX
    • Scene3D.RotationY
    • Scene3D.RotationZ

    Ils sont associés à une instance de type Element3D. Celle-ci est récupérable (lorsque l'événement StartUp de la scène 3d est diffusé) via une méthode d'extension ajoutées pour les instances d'UIElement (GetElement3D).

  2. Une caméra associée au conteneur Scene3D. Celle-ci offre les propriétés suivantes :
    • FieldOfView
    • Plan de clipping proche : NearPlane
    • Plan de clipping éloigné : FarPlane
    • Point de fuite (XVanishingPoint, YVanishingPoint)
    • Déplacement (OffsetXCamera, OffsetYCamera, OffsetZCamera)
    • Rotation (RotateXCamera, RotateYCamera, RotateZCamera)

Détection du changement de direction de la normale (Backface culling) et du produit scalaire via les événements NormalDirectionChanged et DotProductChanged. Ces événements sont diffusés par les instances de type Element3D.

Je suis en cours de finition d'un algorithme de tri des profondeurs. Ce moteur devrait être assez optimisé car son rendu ne repose pas sur un DispatcherTimer. Deplus, le pipeline de rendu est assez optimisé car il n'est pas récursif par défaut. Lorsqu'un seul objet est modifié, ce dernier invoque en interne une méthode RenderElement. A contrario, lorsque la scène ou la caméra sont modifiées, il devient récursif et met à jour l'ensemble des objets de la scène... A bientôt donc pour la release finale de la librairie Tweened...

Expression Studio 4 version finale disponible

Aucun commentaire

    La nouvelle version de la suite Expression Studio est dans les bacs ! Cette nouvelle release est déclinée en 3 versions :

    • Expression Studio Ultimate
    • Expression Studio Premium
    • Expression Studio Web professional

    La version Expression Web n'intègre pas le logiciel Expression Blend mais uniquement Expression Design, Web et Encoder. Si vos développements s'orientent vers Silverlight ou WPF, il vous faudra acquérir la version Premium ou Ultimate. Cette politique possède l'avantage de s'adapter aux petits budgets. Pour la version Ultimate uniquement, vous bénéficierez également de Expression Encoder Pro qui offre le support d'une plus grande variété de codecs en import comme en export. Celui-ci pourra notamment gérer de la diffusion de vidéos Smooth Streaming live ou l'encodage H.264 (la comparaison des features est ici). Autre changement de politique côté MSDN, concernant cette fois l'arrivée de numéros de série. Ceux-ci vous permettent d'installer la suite un nombre limité de fois. Il n'y a plus qu'à faire son choix...

    Design Time Resources dans Blend 4

    Aucun commentaire

    Blend 4 nous offre de nouvelles fonctionnalités et l'une d'entre elles est assez obscure de prime abord. Dorénavant, il est possible dans Expression Blend de créer des ressources uniquement utilisées au design time (au moment de la conception sous Blend ou Visual Studio). Le problème est assez banal, Il est souvent nécessaire d'affecter des ressources graphiques qui ne sont définies qu'à l'exécution. Du coup, dans l'espace de travail graphique, sous Visual Studio ou Blend, celles-ci ne sont pas résolues puisque pas encore définies. Cela occasionne des erreurs d'accès et quelques problèmes d'affichage. Blend 4 permet maintenant de résoudre cette problématique mais la manière de procéder n'est pas très évidente. L'objectif est de créer un dictionnaire de ressource contenant une ressource ou plusieurs ressources que vous utiliserez uniquement au design time. Le première chose à faire consiste à créer un projet ainsi qu'une ressource contenue dans un dictionnaire de ressource. Un dégradé ou un solidColorBrush fera bien l'affaire (voir ci-dessous).

    Ensuite supprimez le lien contenu par App.xaml, les ressources contenues sont désormais inaccessibles et vous obtenez des erreurs d'accès. Ce n'est pas grave, il vous faut passer par cette étape. Sauvegardez le projet puis ouvrez-le à nouveau sous Blend 4, vous obtenez une jolie boîte de dialogue vous indiquant si vous souhaitez créer un dictionnaire utilisable au design time (voir ci-dessous).

    Pour finir, créez la ressource via C#, c'est cette dernière qui sera utilisée par Silverlight à l'exécution.

    Au final vous obtenez deux rendus différents. Le premier concerne le design time, le second correspond au rendu final à l'exécution utilisant la ressource instanciée lors de l'initialisation :) Du coup, le designer est complètement autonomes. Au final, ce procédé n'est pas très orthodoxe mais il est très utile. Le principe ne repose sur rien d'autre qu'une compilation conditionnelle générée au niveau du projet(.csproj). Le code suivant :

    <Page Include="Properties\DesignTimeResources.xaml">
     <Generator>MSBuild:Compile</Generator>
     <SubType>Designer</SubType>
     </Page>

    est remplacé par celui-ci :

    <Page Include="Properties\DesignTimeResources.xaml"
    Condition="'$(DesignTime)'=='true'
    OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)')
    AND '$(BuildingInsideVisualStudio)'!='true'
    AND '$(BuildingInsideExpressionBlend)'!='true')">
     <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
     <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
     </Page>