[Offre d'emploi] – Developpeur Multimédia Flash-Lead developpeur sur Paris
Developpeur Multimédia Flash-Lead developpeur (Paris) – Offre d'emploi
- Titre: Developpeur Multimédia Flash-Lead developpeur
- L'entreprise: SesamTV (http://www.sesamtv.com)
Profil Recherché
- Profil recherché:
- Au cœur de l'actualité des média et des télécoms (IPTV, Vidéo, VoD, Internet, Audio, Photo, Streaming, Mobile, Internet, Media Center…) SesamTV offre des opportunités et des missions passionnantes dans le domaine du multimédia et du numérique.
- Leader historique des solutions Media Center rich-media en environnement Flash depuis 2003, SesamTV recrute des développeurs juniors et seniors pour des applicatifs innovants gérant le multimédia (TV, vidéo à la demande, audio, vidéo, photo,..) pour offrir des services convergents sur plusieurs terminaux : Télévision interactive, Mobiles, PC, Tablettes… afin d’offrir les services multimédia de demain.
- Les produits que vous serez amené à développer sont directement utilisés par le grand public au quotidien.
- Egalement de grands comptes prestigieux, Opérateurs Télécoms et média font appels à SesamTV pour les aider à déployer leurs propres services de média convergents.
- Missions
- Les différentes missions concernent toutes les phases de la vie d’un projet et les profils recherchés concernent les postes suivants :
- Chef de projet – Architecte – Lead Développeur / Responsable des développements – Développeurs
- Compétences Techniques Requises: Profil
- Au sein d’une équipe de haut-niveau en multimédia vous êtes intéressé par le développement d’applications média interactives et innovantes.
-
- Le candidat fait preuve des compétences suivantes :
- Gout de l'innovation produits et les challenges technologiques
- Développement Flash (AS2,AS3..) : bonne compétence de la programmation Action Script Objet, design Pattern, MVC,.. , XML, optimisation poids/vitesse/mémoire..
- Souhait de travailler sur des produits ayant un sens pratique et utile pour l'utilisateur , et, évoluant dans la durée selon des roadmaps et des versions.
- Pouvant travailler en mode produit/projet, en interne dans la société et en externe chez des clients lors de missions
- Des compétences supplémentaires en gestion de projet, d’architecture et de pilotage de développements sont nécessaires pour les postes en adéquation
- Expérience Requise: >= 1.5 ans
- Disponibilité: dès que possible
Conditions d'embauche
- Lieu : Paris
- Rémunération: selon expérience
- Contrat: CDI/CDD
Pour postuler
- Contact:
- Informations supplémentaires
- Contrats en CDI / CDD
- Rémunération selon expérience
- www.sesamtv.com
- CV, lettre de motivation, références, site Web (si applicable),
- Mail à : Mr le Responsable du recrutement (jobflash@sesamtv.com)
- Informations supplémentaires
AIR pour Android – Prendre des photos / vidéos avec CameraUI
Encore un tutorial sur Air pour Android. Cette fois, on va voir comment utiliser la classe CameraUI depuis son application Air.
La classe CameraUI permet, depuis son application Air, de laisser l'utilisateur prendre une photo ou une vidéo. Cet opération se fait par l'intermédiaire des applications natives d'Android.
Une fois que l'utilisateur a pris sa photo ou sa vidéo, il indique qu'il a terminé et retourne automatiquement sur l'application. La photo peut ensuite être affichée directement dans l'application.
Pour l'instant (source forum pre-release), les vidéos prises de cette manière ne peuvent pas être pré-visualisées ensuite dans l'application Air. En effet, celles-ci sont prises en basse résolution et Air ne sait pas (encore?) les lire.
On peut ainsi imaginer de nombreux cas d'utilisation. Par exemple, vous voulez ajouter un lieu à votre application. Vous laissez l'utilisateur remplir le formulaire avec des données alpha-numériques puis il peut prendre une photo et l'ajouter à sa description.
Notez qu'il est possible que l'utilisateur ne puisse pas revenir sur votre application une fois l'opération effectuée car le Garbage Collector a décidé de tuer votre application. En effet, celle-ci n'avait pas le focus et était donc "moins importante" à ses yeux, il se permet donc de faire le ménage. Ce problème se pose aussi pour les applications natives écrites en Java
Détection du support de la fonctionnalité
Comme toujours, vous disposez d'une méthode permettant de tester si oui ou non, le mobile peut vous permettre de prendre des photos / vidéos. Pour cela, utilisez la méthode suivante:
if (CameraUI.isSupported) {
La classe CameraUI fonctionne ensuite un peu comme la classe CameraRoll et sa méthode browseForImage():
Air Android – Récupérer une image issue de la galerie Caméra avec CameraRoll (browseForImage)
Vidéo de l'application
L'application est très simple et permet de prendre des photos ou des vidéos. Si l'utilisateur prend une photo, celle-ci sera affichée dans l'application. Pour une vidéo, on affiche simplement le nom du fichier .3GP
Code de l'application
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
applicationComplete="application1_applicationCompleteHandler(event)" paddingLeft="0"
paddingRight="0" paddingTop="0" paddingBottom="0" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
/**
* Access the native image gallery
*/
private var _cameraRoll:CameraRoll = null;
/**
* Access the native camera application
*/
private var _cameraUI:CameraUI = null;
/**
* Intermediate object that contain a reference to the
* media file the user just created using the Camera
*/
private var _mediaPromise:MediaPromise = null;
/**
*
*/
private var _cameraUILoader:Loader = null;
private function onErrorEvent(event:ErrorEvent):void {
showInfo("Erreur lors de la sauvegarade");
}
private function onIOError(event:IOErrorEvent):void {
showInfo("Erreur lors de la récupération de la sélection...");
}
private function showInfo(text:String):void {
log.text = text;
}
private function onComplete(event:Event):void {
showInfo("Sauvegarde effectuée");
}
protected function application1_applicationCompleteHandler(event:FlexEvent):void {
if (CameraUI.isSupported) {
getPictureButton.enabled = true;
getVideoButton.enabled = true;
//
_cameraUI = new CameraUI;
_cameraUI.addEventListener(MediaEvent.COMPLETE, onMediaEventComplete);
_cameraUI.addEventListener(ErrorEvent.ERROR, onCameraUIErrorEvent);
_cameraUI.addEventListener(Event.CANCEL, onCameraUICancel);
} else {
showInfo("CameraUI non supportée");
}
}
/**
* Once the user finished taking the picture / video
*/
private function onMediaEventComplete(event:MediaEvent):void {
_mediaPromise = event.data as MediaPromise;
if (_cameraUILoader) {
_cameraUILoader.unload();
_cameraUILoader = null;
}
if (_mediaPromise.mediaType == MediaType.IMAGE) {
loadImage();
} else if (_mediaPromise.mediaType == MediaType.VIDEO) {
showInfo("Fichier " + _mediaPromise.relativePath + " créé");
}
}
public function loadImage():void {
//Loads the MediaPromise object
_cameraUILoader = new Loader();
_cameraUILoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImageHandler);
_cameraUILoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
_cameraUILoader.loadFilePromise(_mediaPromise);
}
public function loadImageHandler(event:Event):void {
//adds the bitmapdata to stage
showInfo("\n" + event.type + " " + event.toString());
var content:Bitmap = event.currentTarget.content as Bitmap;
if (!content) {
showInfo("Impossible de récupérer le Bitmap associé");
return;
}
mainImage.source = content;
}
/**
* L'utilisation a annulé
*/
private function onCameraUICancel(event:Event):void {
showInfo("Annulation...");
}
/**
* Erreur lors du process
*/
private function onCameraUIErrorEvent(event:ErrorEvent):void {
showInfo("Une erreur s'est produite...");
}
private function onGetPicture():void {
//Launch CameraUI for Image Capture
_cameraUI.launch(MediaType.IMAGE);
}
private function onGetVideo():void {
//Launch CameraUI for Video Capture
_cameraUI.launch(MediaType.VIDEO);
}
]]>
</mx:Script>
<mx:Style>
global {
font-size: 24;
}
</mx:Style>
<mx:ApplicationControlBar left="0" right="0" bottom="0" height="80" paddingTop="8" paddingLeft="8"
paddingBottom="8" paddingRight="8" horizontalGap="8" verticalGap="8"
dock="true">
<mx:Box width="100%">
<mx:HBox>
<mx:Button id="getPictureButton" label="Get Picture" click="onGetPicture();" height="100%"
width="100%" enabled="false" />
<mx:Button id="getVideoButton" label="Get Video" click="onGetVideo();" height="100%"
width="100%" enabled="false" />
</mx:HBox>
<mx:Label id="log" fontSize="18" />
</mx:Box>
</mx:ApplicationControlBar>
<mx:Image id="mainImage" width="100%" height="100%" />
</mx:Application>
AIR pour Android – Vidéo conférence en 30 lignes de code avec LiveCycle Collaboration Services
Christophe Coenraets est on fire en ce moment et sort une application Air pour Android presque tous les jours
. La dernière est une application de chat vidéo utilisant le service LiveCycle Collaboration Services.
Pour ceux qui ne connaissent pas LCCS (anciennement AFCS, anciennement Cocomo), vous trouverez plus d'informations sur le site officiel:
LiveCycle Collaboration Services @ Adobe
Pour résumer, LCCS propose d'utiliser des services Adobe en mode hébergé (SaaS). LCCS est aussi accompagné d'un SDK complet permettant d'intégrer facilement un chat vidéo, un tableau blanc, un partage de fichiers, … Il permet ainsi de gérer facilement les concepts de "room" et d'utilisateur. Beaucoup de traitement étant fait server-side par les systèmes de gestion sans que vous le sachiez.
Bref, LCCS était un projet qui était déjà intéressant pour du Desktop mais grâce à Air pour Android, (qui est une des prochaines versions de Air et pas un nouveau SDK), vous pouvez profiter de base du SDK livré avec LCCS.
Et c'est ce que fait CC dans sa vidéo de chat vidéo sur Android:
Comme je le disais un peu plus haut, LCCS vient avec un SDK complet, qui permet de s'affranchir de beaucoup de code. Dans le cas de cette application, seules 30 lignes de code on été nécessaires pour initier la connexion à la conférence et afficher un pod vidéo:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:cs="AfcsNameSpace" currentState="logon" fontSize="28">
<fx:Script>
[Bindable] private var roomURL:String = "http://connectnow.acrobat.com/YOUR_ROOM_NAME";
protected function connect():void {
auth.userName = userName.text;
currentState = "default";
session.login();
}
</fx:Script>
<s:states>
<s:State name="default"/>
<s:State name="logon"/>
</s:states>
<fx:Declarations>
<cs:AdobeHSAuthenticator id="auth"/>
</fx:Declarations>
<s:TextInput id="userName" includeIn="logon" top="200" horizontalCenter="0"/>
<s:Button label="Connect" click="connect()" includeIn="logon" top="250" horizontalCenter="0" height="50" width="150"/>
<cs:ConnectSessionContainer id="session" roomURL="{roomURL}" authenticator="{auth}" autoLogin="false" width="100%" height="100%" includeIn="default">
<cs:WebCamera top="10" left="10" bottom="10" right="10"/>
</cs:ConnectSessionContainer>
</s:Application>
Voilà de quoi donner des idées !
Open Source Media Framework (Strobe) et Text Layout Framework sur Open@Adobe
Il y a une semaine, Adobe a lancé un nouveau blog, consacré à la "Flash Platform", c'est-à-dire tout ce qui tourne autour du Flash Player (client, serveur, runtime environnement, etc) et des projets comme le Open Screen Project. Vous pouvez le consulter sur http://blogs.adobe.com/flashplatform/.
Pour leur premier article, ils annoncent une bonne nouvelle concernant 2 projets: OSMF (Open Source Media Framework) et TLF (Text Layout Framework). Ces deux projets font maintenant partie du portail Open Source d'Adobe, que vous pouvez consulter aux adresses suivantes:
Ces deux frameworks sont donc disponibles sous licence Mozilla Public License.
Open Source Media Framework
OSMF offre aux développeurs les fonctionnalités de base d'un lecteur vidéo, comme les contrôles de playback (play/pause/stop), la navigation vidéo, buffering et Dynamic Streaming à travers une API. On peut rajouter sur cette API, des plug-in pour ajouter par exemple des publicités ou du reporting (qui ne sont pas des fonctionnalités de base). Ce framework flexible rassemble toutes les "bonnes pratiques" qu'un développeur doit employer lorsqu'il programme un lecteur vidéo, ce qui permet de se concentrer sur d'autres points. Certains l'utilisent déjà comme Hulu (accessible uniquement aux US) ou la CBS TV .
Text Layout Framework
TLF est une librairie ActionScript (extensible elle aussi) qui utilise les capacités de Flash Player 10 et AIR 1.5. Elle a été développé en coopération avec l'équipe d'InDesign, des spécialistes donc de la typographie et de la mise en page. Grâce à cette librairie, on peut aller bien plus loin que ce qui est possible avec du HTML et des CSS.
Le Text Layout Framework est déjà utilisé par l'application Adobe Air du New York Times (TimesReader 2.0) et celle du Boston Globe (GlobeReader). Ces deux applications montrent bien l'utilisation de TLF avec du texte sur plusieurs colonnes et la gestion du resize par exemple. Parmi les fonctionnalités, on peut trouver le texte bidirectionnel, le texte vertical, plus de 30 langues en écriture dont l’Arabe, le Chinois et l’Hébreu, le kerning, les ligatures, les raccourcis pour copier-coller-couper du texte, et une API très riche pour manipuler le contenu textuel.
Adobe propose aussi une application de démonstration de cette librairie. Vous trouverez en bas à gauche, des fichiers de langue à charger pour pouvoir vous amuser un peu
.





