Freebox DevDays QML

Pour faciliter l’entraide sur le SDK Freebox, QtFr a créer un forum dédié et un wiki. La question maintenant est de savoir comment utiliser au mieux ces outils.

L’idéal serait de mettre en place une page indiquant les fonctionnalités supportées et celles bridées.
J’ai lancé une discussion, pour avoir vos avis et commentaires, sur comment faire cela : Support QML Freebox.

L’équipe de développement de Freebox a organisé une journée développeurs le 13 septembre, pour présenter le futur SDK pour développer la Freebox en QML. J’ai eu le plaisir de participer à cette journée et récolter pleins d’informations.  Voici donc un résumé.

Déroulement de la journée

Il y avait une trentaine de personnes présente samedi matin, au siège de Free, dans le 8ème sur Paris. Les profils étaient variés, la moitié avait déjà utilisé Qt ou le QML, il y avait des personnes envoyées par leur entreprise, d’autres par curiosité personnelle, certain ont déjà développé sur Freebox.

La matinée était consacrée à la présentation du travail de l’équipe de développement de Freebox, les possibilités et restrictions (actuelles et futures) du SDK, les problèmes liés au respect de la vie privé des utilisateurs. Et beaucoup de questions.

Dans l’après-midi, il a été possible de tester  le SDK sur de vraies Freebox. Un exemplaire du livre  Créer des applications avec Qt 5 a été offert à chaque participant de la journée.

L’environnement de développement

Freebox et Qt, une longue histoire

C’est une information qui m’a un peu surpris (je me souviens pas de communiqué sur le sujet), mais Freebox utilise Qt et le QML depuis longtemps. Très longtemps en fait. Ils ont commencé à le tester dès sa sortie, en 2010 dans Qt 4.7. C’était un pari risqué à l’époque, puisque c’était une nouvelle technologie et que l’on manquait de recul sur ce qu’il allait devenir. Mais cela semble être une habitude chez Freebox de parier sur les nouvelles technologies, ils également adopté Wayland, le remplaçant de X11, depuis sa sortie.

Dans un premier temps, l’interface de la Freebox V6 a été conçue avec Qt et le QML. La création d’un SDK spécifique pour simplifier le développement est arrivée par la suite. Actuellement, l’interface de la Freebox est en cours de réécriture pour utiliser ce SDK, il ne reste plus que quelques fonctionnalités à finaliser.

Le point important ici est que le SDK n’est pas un outil créé pour permettre à tout le monde de créer des applications sur Freebox. Il s’agit avant tout de l’outil qu’ils utilisent en interne et qui sera disponible pour les développeurs externes.

Leur volonté est de continuer à utiliser cet outil pour la prochaine Freebox (on n’a pas parlé de la V7 en particulier pendant cette journée, mais d’après ce que j’ai lu sur des forums, elle devrait sortir fin 2015). Sachant que la politique de Freebox est d’avoir au maximum deux générations de Freebox en circulation et que la V6 est âgé de 5 ans, on peut s’attendre à ce que la V5 soit retirée du marché l’année prochaine (donc plus de développement sur Freebox avec Elixir), que la V6 sera encore disponible 5 ans et que la V7 le sera pendant 10 ans. Parier sur le SDK QML est donc un choix raisonnable sur l’avenir.

Si des fonctionnalités du SDK devaient évoluées dans le futur, les anciennes API seront encore disponibles via le système de versionning du QML. Par exemple, si l’interface de l’élément Application est modifiée et n’est plus compatible avec la version actuelle, elle sera alors (par exemple) versionnée 2.0 et il faudra écrire :

import fbx.application 2.0

SDK QML

Une date de sortie ?

Initialement, il s’agissait d’une version modifiée de Qt, mais pour simplifier la maintenance et le travail des développeurs, l’objectif est d’utiliser la version officielle de Qt. Le firmware et le SDK suivra donc les mises à jour de Qt. En particulier, la version finale du firmware et du SDK QML devrait être disponible lors de la sortie de Qt 5.4 (actuellement, c’est la version 5.3 dans le SDK).

Lors de la journée, il a été annoncé une date de sortie autour de fin octobre, mais la version 5.4 de Qt est retardé à mi-novembre, il devrait en être de même pour le SDK. De toute façon, c’est la date au plus tôt, si le firmware n’est pas totalement finalisé à ce moment-là, il faudra attendre encore un peu.

Les développeurs Freebox ne souhaite pas mettre de contraintes sur l’accès au SDK, il ne sera donc pas nécessaire de créer un compte pour télécharger le SDK ou de payer pour proposer une application sur le Free Store.

Installation du firmware

Contrairement à ce que j’avais dit dans les précédents articles, il ne s’agira pas d’un firmware spécifique pour les développeurs, mais une mise à jour du firmware actuel, dans lequel sera ajoutée une option pour pouvoir tester vos applications QML.

Il existe un firmware développeur, mais c’est en fait un firmware minimaliste, qui permet surtout de pouvoir utiliser une Freebox pour une présentation, lors d’une conférence par exemple (ce firmware n’est pas destiné à être utilisé en dehors de Freebox, mais si vous êtes un professionnel qui doit présenter un produit sur Freebox, n’hésitez pas à contacter l’équipe de développement Freebox).

Installation du SDK

Actuellement, seule la bibliothèque libfbxqml écrite en QML est disponible. Par la suite, le SDK sera constitué d’un fichier binaire à installer (après avoir installé le SDK de Qt). Ce binaire installera automatiquement le plugin dans Qt Creator et la bibliothèque libfbxqml, on pourra écrire directement une application, cela devrait être fonctionnel.

Les développeurs Freebox souhaite avoir un maximum de transparence, ils vont donc publier les sources sur SDK (et de l’interface de la Freebox ?) et les binaires pour Windows, Linux et Mac.

Utilisation du SDK

La création d’une application pour la Freebox sera similaire à n’importe quelle application QML. Vous avez des copies d’écran sur l’exemple Rock’n Roll. Lorsque l’on crée un nouveau projet, il faut choisir le modèle « Freebox » et donner un nom et une description au projet. Cela permet de créer un projet par défaut directement exécutable, qui contient des fichiers : freeboxproject (équivalent à qmlproject), qml (qui contient les sources QML de l’application) et manifest (description du projet) (je crois que c’est tout ?).

Dans la liste des kits (en bas à gauche dans Qt Creator, voir l’image en dessous), il sera possible de choisir entre exécuter l’application en local ou sur les Freebox connectées. Chaque Freebox apparaît avec son adresse IP, ce qui permet de choisir sur quelle Freebox vous voulez tester votre programme, dans le cas où vous avez plusieurs Freebox. Il suffit ensuite de cliquer sur Exécuter (le triangle vert en bas à gauche dans Qt Creator) pour lancer l’application.

Sélection des kits dans Qt Creator

Sélection des kits dans Qt Creator

Il existe également un script Python qui permet de déployer manuellement une application via une ligne de commande.

Pour terminer, le plugin n’est actuellement pas utilisable avec le plugin Qt de Microsoft Visual Studio.

Actuellement, la documentation du SDK est en anglais et disponible uniquement en ligne (Freebox Qml Library). Elle ne sera pas traduite en français par les développeurs Freebox, mais si quelqu’un souhaite le faire (et maintenir à jour les traductions), n’hésitez pas à vous proposer. À terme, cette documentation sera intégrée dans Qt Creator, il sera possible de cliquer dans le code sur le nom d’un élément QML et d’appuyer sur F1 pour avoir l’aide correspondante à cet élément.

Le Free Store

Comme on peut s’en douter, les applications Télé (vidéo, audio, photo) seront à privilégier sur la Freebox. Les applications soumises sur le Free Store seront validées par les développeurs Freebox avant publication. Bien sûr, les applications ne respectant pas les CGU (publicité, contenu érotique ou pornographique, etc.) ou posant des problèmes de sécurité ne seront pas publiées (a priori, les CGU devraient être les mêmes que sur le Free Store actuel).

Contrairement à ce que j’ai dit dans un précédent article, le déploiement d’applications sur le Free Store ne se fera pas via Qt Creator, mais sur le site Free Factory (sauf changement – les développeurs Freebox réfléchissent s’il faut faire évoluer les sites et comment). Il faudra créer un compte et donner les renseignements nécessaires (je n’ai pas testé, mais j’imagine que pour des raisons légales, il faut donner son identité, son adresse, un RIB).

La création d’un compte développeur sur le Free Store et la soumission d’applications seront gratuites. Il sera possible de mettre ses applications en gratuit ou payant et de mettre des achats dans l’application (le SDK propose des fonctionnalités spécifiques pour les achats in-app). La répartition des bénéfices sera précisée dans les CGU, elle devrait être de 70-30.

Après la soumission d’une application, celle-ci sera analysé et acceptée (ou rejetée) par les développeurs Freebox. L’objectif n’est pas d’avoir le plus gros catalogue d’applications possible, mais d’avoir des applications bien faites, utiles aux utilisateurs de la Freebox. Ne tentez même pas de soumettre un hello world pour tester, cela sera refusé directement.

Les délais de validation d’une application devraient être inférieurs à une semaine, mais il faudra attendre de voir comment se passe en pratique (on peut imaginer par exemple que si beaucoup de personnes soumettent des applications lors du lancement du SDK, l’équipe soit saturée de travail et ne puisse pas valider les applications dans la semaine).

Les applications ne sont pas exécutées directement à distance depuis le Free Store, mais chargée sur le Freebox Server et exécutée sur le Freebox Player.

Restrictions

Sur le SDK

Toutes les fonctionnalités du QML ne seront pas disponibles dans le SDK. Lors de la journée, j’ai particulièrement apprécié l’intérêt que porte l’équipe de développement sur la sécurité des données des utilisateurs. Parfois sur des problématiques auxquelles je n’aurais pas pensé, comme les accès aux fichiers, au réseau local, la liste des chaînes auxquelles est abonné l’utilisateur. Il y a également des problématiques liées aux droits de diffusion des chaînes de télévision, il ne sera pas permis d’enregistrer un flux vidéo ou de le modifier avec des effets visuels.

Les développeurs Freebox contrôlent les fonctionnalités utilisables dans le SDK. Si une fonctionnalité n’est pas disponible, il est possible de contacter l’équipe et de discuter avec eux, ils sont très ouverts. Mais ils sont aussi très fermes sur leur volonté de ne pas prendre de risque avec la protection des données.

Et il faut aussi comprendre qu’ils ne peuvent pas consacrer des heures de travail (en support technique, maintenance, validation du code) pour répondre à chaque besoin particulier. Essayez de proposer que des modifications ou ajouts qui ont un intérêt général pour l’ensemble des développeurs.

La liste des éléments QML acceptés ou non a été donnée lors de la matinée, elle sera disponible dans la présentation, qui devrait être publiée en ligne.

Restrictions techniques

En ce qui concerne les formats vidéos et audio supportés, ce seront les mêmes que ceux que l’on peut actuellement utiliser dans la Freebox (donc une majorité de formats, les restrictions proviennent des droits d’utilisation de certains formats).

Pour le moment, les applications visées par le SDK sont des applications en plein écran. Il n’est donc pas prévu de pouvoir faire tourner une application en arrière-plan (multitâche). Cela pourra évoluer dans le futur, en particulier pour pouvoir lire un flux audio pendant que l’on est sur une autre application. Il ne sera pas possible non plus de recevoir des notifications depuis l’extérieure de la Freebox et qui lanceraient un message pop-up ou une application. Donc ce n’est pas possible, par exemple, d’avoir une application qui prévient l’utilisateur si un mail est arrivé lorsqu’il est en train de regarder la télévision.

Sécurité des données personnelles

Toutes les fonctionnalités permettant d’obtenir des informations sur les utilisateurs sont volontairement bloquées. Cela concerne en premier lieu toutes les informations connues par Free : adresse, numéros de téléphone, comptes mail, liste des appels émis ou reçus, etc.

Il ne sera pas possible non plus, dans un premier temps, d’accéder aux fichiers sur le Freebox Server ou au réseau local. Le risque est qu’une application puisse collecter des informations sur les appareils connectés au réseau (ordinateur, téléphone, tablette, etc.) ou récupérer des informations sur le disque.

Si l’accès est autorisé un jour, cela se fera uniquement après acceptation explicite de l’utilisateur (probablement de façon classique, avec une demande du type « acceptez-vous que telle application accède aux fichiers ? »). Pour le moment, il n’est pas décidé s’il y aura un espace de stockage sur disque protégé pour chaque application ou si les applications accèdent au disque complet.

Pour terminer, il n’y aura pas de système d’enregistrement d’un protocole personnalisé pour les url, comme sur les autres systèmes. Pour rappel du principe : un protocole correspond au début d’une url (par exemple « http », « ftp », etc.). Une application enregistre un protocole personnalisé (par exemple « firefox » pour Firefox, « chrome » pour Chrome, etc.) et lorsqu’une application demande au système d’ouvrir une url, celui-ci lance l’application correspondante au protocole. Cela permet d’ouvrir une application spécifique depuis une autre application.

En termes de sécurité, cela signifie qu’une application peut tester si des protocoles sont enregistrés dans le système et donc connaître la liste des applications installées sur la Freebox.

Bonnes pratiques

Expérience utilisateur

Les développeurs Freebox seront particulièrement exigeants concernant l’expérience utilisateur. Les contraintes de développement sur Freebox sont différentes d’une application QML mobile classique :

  • l’écran n’est pas tactile (si si, je vous assure, essayez), l’utilisation d’un clavier ou d’une souris est possible n’est pas généralisé. Il faudra donc que l’application utilise au mieux la télécommande et qu’elle respecte les touches (M pour ouvrir un menu, I pour avoir des informations, etc.) ;
  • il n’y a pas de problème d’orientation (paysage ou portrait – vous pouvez essayer aussi, vous verrez que l’image ne s’adapte pas), mais il y a une forte hétérogénéité d’écran : télévision cathodiques, écran full-HD et 4K, écran d’ordinateur.

Ils recommandent aussi d’homogénéiser au maximum l’expérience utilisateur (même si cela n’est pas une obligation, il est possible de créer une interface totalement personnalisée). Pour cela, il faudra dans la mesure du possible utiliser les éléments graphiques fournis dans le SDK (dialogues, boutons, etc.), en particulier les éléments suivants :

  • l’élément Application permet d’initialiser une application Freebox, il est nécessaire pour un fonctionnement correcte de l’application ;
  • l’élément Background permet d’afficher un fond noir avec dégradé ;
  • l’élément Breadcomb pour créer une barre de navigation en haut ;
  • les éléments Stack, Tabs et Explorer pour gérer plusieurs pages.
Éléments Breadcrumb (en haut) et Background (au centre)

Éléments Breadcrumb (en haut) et Background (au centre)

Pour terminer, les développeurs Freebox conseillent d’utiliser les ancres (anchors) pour le positionnement des éléments et les animations pour avoir une expérience utilisateur fluide (pour les menus, les changements de pages, l’affichage d’éléments).

Tous les éléments QML proposés dans le SDK seront détaillés dans les prochains articles.

Résolutions d’écrans

La gestion des différentes résolutions est un point auquel il faudra faire particulièrement attention. Les problématiques sont différentes que ce que l’on rencontre sur les mobiles, il n’y a pas à gérer par exemple l’orientation de l’écran (paysage ou portrait). Par contre, la Freebox est utilisée avec un parc hétérogène d’écrans : écrans cathodiques, écrans plans Full-HD ou 4k, écrans d’ordinateur, etc.

Au final, il faut donc prendre en compte :

  • les différentes résolutions ;
  • les différents ratios (4/3, 16/9, 16/10).

Pour simplifier la création d’applications Freebox, le SDK travaille uniquement en 720p (720 lignes), charge ensuite à la Freebox et l’écran d’adapter les dimensions de l’affichage en fonction de la résolution et de l’éventuel overscaling (suppression de 1 à 8 % de l’image affichée par l’écran).

Pour les développeurs, cela implique que l’on peut travailler uniquement en 720p, en faisant attention au format 4/3. Pour cette raison, il faut privilégier le positionnement relatif des éléments en utilisant des ancres plutôt que d’utiliser un positionnement absolu.

Graphismes

Tous les éléments QML pour gérer des contextes OpenGL ne sont pas disponibles dans le SDK, mais il est possible de faire de la 2D et d’utiliser les effets shaders. De plus, comme cela a déjà été dit, il n’est pas possible de modifier les flux vidéo, pour des raisons de droits de diffusions. Si vous souhaitez créer une interface similaire à ce que qui a été présenté dans la démo technique Shader effects and video with Qt Quick 2, vous pouvez oublier.

Effet wooble dans la vidéo Graphic effe

Effet wooble dans la vidéo « Shader effects and video with Qt Quick 2 »

Pour commencer, un petit récapitulatif des caractéristiques techniques du processeur de la Freebox Player. Il s’agit d’un processeur Intel Atom CE4100 (voir les caractéristiques), avec processeur graphique PowerVR SGX535 (1 pipeline graphique, 14 threads en même temps, jusqu’à 14 millions de triangles par secondes et 400 millions de pixels par secondes).

Je me suis amusé à tester les particules et les shader effects l’après-midi sur les Freebox disponibles, pour avoir une idée des performances.

Pour les particules, j’ai eu au départ un problème avec l’utilisation de l’élément ImageParticule. Le code fonctionnait sur l’ordinateur, mais pas sur la Freebox. Au final, c’était simplement parce que le SDK sur la Freebox n’acceptait pas cet élément QML. C’est simplement un oubli, ça sera corrigé dans la version finale.

Pour tester, j’ai donc remplacé ImageParticule par des éléments ItemParticule et Image :

// Remplacer
ImageParticule {
    source : "star.png"
}

// par 
ItemParticule {
    delegate: Image {
        source: "star.png"
    }
}

Avec cette correction, le programme était fonctionnel sur la Freebox. J’ai lancé une application générant plusieurs milliers de particules… et la Freebox a eu un peu de mal 🙂 Il est possible de générer plusieurs dizaines ou centaines de particules, mais le moteur de particules est très gourmand en termes de performances, il ne faut pas en abuser.

Pour les shaders effect, j’ai implémenté un effet wobble (une image qui forme des vaguelettes animées, comme dans l’image précédente – voir également la vidéo à 2:15). Dans un premier temps, j’ai eu le même problème que pour les particules, le code fonctionnait sur Desktop, mais pas sur la Freebox. Au final, le problème provenait du fait que j’ai testé mon code sur une image téléchargée sur internet avec une grosse résolution (celle-là, en 2560 × 1600). Il existe une limitation de la taille des images sur la Freebox, le problème a été corrigé en modifiant la résolution de l’image au chargement (en 1024 × 1024, en utilisant la propriété sourceSize). Suite à cela, le programme fonctionnait sans problème, l’animation était fluide.

Comme il peut y avoir ces différences de comportement d’une application entre le Desktop (pour les tests) et la Freebox, il sera nécessaire de bien tester ses applications sur Freebox avant de les publier, pour éviter ce type de problèmes.

Pour terminer, il n’est pas réellement possible de faire de la 3D sur Freebox pour le moment. Les éléments QML permettant d’avoir directement un contexte OpenGL ne sont pas accessibles dans le SDK. Le module Qt3D sera disponible sur Freebox lorsque celui-ci ne sera plus un module externe de Qt, mais intégré dedans (après vérification que cela ne pose pas de problèmes de sécurité sur la Freebox).

Réseau

De base, le QML utilise le réseau de façon transparente. Il est possible de charger une image ou un fichier XML directement en ligne, en indiquant une url comme source :

Image {
    source: "http://dev.freebox.fr/devdays/images/qt-500.png"
}

XmlListModel {
    source: "http://www.mysite.com/feed.xml"
}

Les éléments QML qui autorisent le chargement de données sur le réseau proposent en général les propriétés status (qui indique l’état du chargement : Null, Loading, Ready et Error) et progress (qui indique la progression du chargement de 0.0 à 1.0).

En complément, le SDK fournit des outils spécifiques pour le réseau. De nombreuses fonctions sont dérivées du fonctionnement de Deferred de JQuery. L’idée est que l’on enregistre des fonctions dans une action. Lorsque l’action se termine, elle appelle la fonction correspond à son état (échec, réussite). Cela permet de chaîner plusieurs actions en série en asynchrone ou de lancer une action lorsque plusieurs autres actions sont terminées.

var x = new Async.Deferred.Deferred().
    then(function (value) { return value + " bar"; }).
    then(function (value) { console.log(value) });

x.resolve("foo"); // will log "foo bar"

Fichiers et données persistantes

Les applications sont stockées sur le Freebox Serveur et exécutée sur le Freebox Player. Le Freebox Player possède aucune mémoire de stockage disponible pour les applications (il y a une mémoire, mais utilisée pour le firmware et les paramètres). La mémoire disponible n’est pas destinée à stocker un gros volume de données.

Pour raison de sécurité, il n’est pas possible d’accéder aux fichiers sur le Freebox Server (il est possible que cette restriction soit levée dans le futur). Pour enregistrer des données persistantes, il faut passer par l’élément Settings, qui permet d’enregistrer quelques informations.

Bien sûr, il est également possible de stocker des informations en ligne, sur un serveur dédié pour l’application.

Conclusion

Cette journée a permis d’en savoir un peu plus sur ce que l’on pouvait attendre du SDK et des applications sur Freebox. Je n’ai jamais développé sur Freebox (avec Elixir avant), donc je ne vois pas forcement les cas d’applications de ce SDK et ses limitations. Des développeurs plus expérimentés que moi sur la Freebox étaient présent lors de cette journée et avait des questions plus spécifiques sur ce qu’ils allaient pouvoir faire.

La principale limitation que l’on aura sur Freebox sera liée aux problématiques de sécurité. L’utilisation du QML permet plus de possibilités et des performances qu’avec Elixir et cela permet aux développeurs Freebox de contrôler ce que l’on peut faire ou non avec la Freebox (ce que ne permettrait pas aussi facilement un langage natif comme le C++).

Pour terminer, Arnaud Vrac, l’un des développeurs Freebox, a fait une présentation lors des Qt DevDays 2011. Vous pouvez voir la vidéo sur YouTube : Qt and Qt Quick on the Freebox Player set-top box (vous avez du mal avec l’anglais, cela ne sert à rien d’activer les sous-titres français, c’est du n’importe quoi au niveau traduction 😉 ).

Advertisements

6 commentaires sur « Freebox DevDays QML »

  1. Quelques remarques:
    – Il y aura possibilité de déclarer des types de fichier et/ou d’URLs gérés par une appli, mais il ne sera par contre pas possible d’énumérer les URLs gérés par une appli A depuis une appli B (justement pour ne pas pouvoir énumérer les autres applis installées),
    – Les shaders sur la vidéo sont impossibles plus par une capacité limitée du GPU (le pipeline vidéo est disjoint de la GUI, et le compositeur hardware final n’est qu’en 2D) que par limitation des droits,
    – La scène QML a des coordonnées en 720 lignes et autant de colonnes que nécessaire pour s’adapter au ratio. Le rendu est fait en résolution native, au pixel près. Sur une TV full HD avec 5% de marges, le redu d’une app full-screen sera fait dans un framebuffer de 1824x1026px, un carré de 100×100 dans la scène sera un carré de 142x142px à la sortie du HDMI. Au final, il n’y a qu’un seul scaling visible: celui de la TV.

  2. Bonjour,
    Y a t’il eu des dates concernant la mise à disposition du firmware qui permette de tester ses applications Freebox sur son freebox player ?
    Ou des dates sur la dispo du kit permettant la connexion à sa freebox ?
    Excellent article.

  3. Je ne vois pas la différence entre ces 2 choses. Mais de toute façon, tout sortira (normalement) en même temps (le SDK et le firmware).
    Une petite précision (par rapport à tout ce que j’ai lu sur les forums) : on n’est pas dans le cadre d’une annonce officielle, formatée par un service marketing, d’une entreprise à ses clients. On est dans l’échange plus personnel, entre des développeurs et d’autres développeurs. Il faut prendre un peu de recul avec ce qui est annoncé (en particulier les dates)

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s