Je ne pensais pas avoir d'autres histoires à vous raconter depuis mon dernier article "Le jour où j'ai reçu un blâme et une prime dans ma même journée", puis ce stage m'est revenu en tête et j'espère que cette expérience pourra aider quelques développeurs.

Nous sommes en 2014, je suis à la fin de ma licence et je réussi à décrocher un stage avec un ancien professeur de l'USW (University of South-Wales, Pays de Galles) avec qui j'ai travaillé pendant mon premier stage en DUT.

Refaire un stage à l'étranger est déjà une bonne nouvelle, mais j'arrive en plus à décrocher une deuxième place pour pouvoir emmener mon compagnon d'armes de toujours Hadrien (qui se reconnaitra) pour effectuer ce stage tous les deux.

L'entreprise est une petite startup dans la sécurité domestique (caméra, capteurs, etc...) montée par un docteur en informatique (notre maître de stage) grâce au sujet de sa thèse.

Thank you Alhad for this opportunity if you ever stumble upon this blog post !

Ayant fait du développement mobile lors de mon premier stage, c'est pour celà que nous sommes "engagés" alors que ni moi, ni Hadrien n'étions vraiment calés dans ce domaine à l'époque (en l'occurence nous étions plutôt formés développement logiciel C++ et Java), mais peu importe nous avions la motivation et l'envie de bien faire de notre côté.

Quelques jours après notre arrivée (le stage durait 10 semaines), le sujet du stage nous est expliqué : "Être capable d'afficher la vidéo d'une caméra IP en temps réel et de faire des enregistrements sur des tablettes android".

Enfin ça c'était le sujet expliqué de manière simplifié, car la tâche réelle en terme technique était : "Récupérer un flux vidéo transporté en RTMP et encodé en h.264 pour l'afficher en temps réel sur des tablettes chinoises tournant sous Android 4.0".

Et autant la première description nous paraissait abordable, autant la description technique nous a jeté un petit froid dans le dos à tous les deux.

Après avoir lu de la doc technique sur le RTMP, le h.264 et Android, nous étions rassurés de voir qu'apparemment, le lecteur vidéo natif d'Android était à la fois capable de supporter le RTMP (live-streaming) et le h.264 (codec MPEG-4).

Merveilleux, il ne nous restait plus qu'à écrire l'implémentation technique, une petite application Android avec un simple lecteur vidéo et l'url du flux comme source.

Et c'est là que les ennuis ont commencé...

A la fin de la première semaine, nous avions vécu notre premier ascenseur émotionnel : Certaines caméras IP encodaient la vidéo en h.264 level 4 et le décodage natif d'Android (4.0) s'arrêtait au niveau inférieur. La vidéo n'était donc pas reconnue.

La semaine suivante, après avoir épluché de la doc, des blogs et demandé à nos collègues et maître de stage, une seule solution apparaissait possible : transcoder la vidéo sur Android en utilisant FFMPEG avant de la donner à notre lecteur vidéo.

Si vous ne connaissez pas FFMPEG, c'est la solution logicielle de référence pour enregistrer, convertir et streamer de la vidéo ou de l'audio.

A partir de cet instant, le reste de notre stage a plutôt ressemblé à combat entre notre patience et Android.

FFMPEG est un logiciel développé en C, et les applications Android tournent en Java, nous devions donc trouver un moyen de faire communiquer notre application avec la couche C de l'OS Android (basé sur Linux) afin d'y intégrer FFMPEG et de lui envoyer les commandes nécessaires au transcodage de notre vidéo en temps-réel.

Après plus d'une semaine de recherche, nous avions réussi à découvrir l'existence de la JNI (Java Native Interface), permettant d'exécuter des bibliothèques C depuis notre application.

Nous devions désormais écrire à la fois du Java et du C dans la même application...

Cette étape réussie, l'objectif était maintenant d'intégrer FFMPEG avec la JNI, mais là encore, la réalité nous a rattrapé car aucune des builds disponibles n'étaient compatible avec l'architecture ARM (l'architecture des processeurs présents dans la majorité des smartphones encore aujourd'hui).

Nous devions donc désormais recompiler entièrement FFMPEG pour ARM avant de pouvoir le faire tourner sur Android, et c'est probablement ce qui a fini d'achever notre stage.

Après avoir lu des centaines d'articles, recoupé des informations et des tutoriels nous avons finalement réussi à mettre toutes ces technos bout à bout pendant ces deux mois de stage.

Mais le résultat, lui, n'était pas au rendez-vous. Tout ce que nous avions réussi à produire était une application android affichant une vidéo à raison d'une dizaine d'images par seconde, s'arrêtant parfois de manière inexpliquée et évidemment invendable au grand public.

Le dernier jour de stage, nous étions à la fois très déçus de n'avoir pas réussi à faire mieux que ça techniquement, mais à la fois content d'avoir rencontré des développeurs venant d'horizons très différents (dans les bureaux nous étions français, indiens, gallois, sri-lankais,...) et d'avoir su nous faire comprendre socialement et techniquement uniquement en anglais.

Mais la meilleure surprise qui nous fit oublier cette mésaventure technique fut quand notre maître de stage nous proposa de nous embaucher en tant que développeurs mobiles, malgré l'échec de notre projet.

Alors pourquoi cette proposition ? Et bien parce que nous avions eu la bonne attitude en tant que développeurs : nous avons alerté quand nous avions un problème et communiqué sur les pistes possibles, nous avons fait beaucoup de recherches et nous étions documenté au travers de nombreuses sources différentes et nous n'avons rien laché jusqu'au bout malgré les nombreux obstacles.

En nous voyant travailler, l'équipe a pu se rendre compte que le projet, censé être abordable, renfermait en fait des problématiques bien plus complexes que prévu, et nos recherches serviraient de base de travail pour les prochains développeurs sur ce projet.

Il y a une citation que j'aime particulièrement qui dit que le plus important n'est pas toujours l'arrivée mais plutôt le chemin que l'on a parcouru, et je pense que c'est aussi vrai pour un développeur.

Cherchez, communiquez, essayez, échouez mais ne vous découragez pas, que ce soit pour un projet, un stage ou un emploi, une bonne attitude vous emmenera très loin !


À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo by Chris Liverani on Unsplash