Encodage en temps réel : plus de 150 fois plus rapide
Note historique : l’encodage en temps réel a été abandonné en mai 2012. La fonctionnalité et la configuration ci-dessous décrivent la version originale de 2010, et non une option actuelle.
Nous sommes ravis d’annoncer aujourd’hui une nouvelle fonctionnalité majeure : l’encodage en temps réel.
L’encodage en temps réel permet d’encoder vos vidéos pendant leur envoi. Comme nos serveurs encodent les fichiers vidéo bien plus vite que la plupart de vos utilisateurs ne peuvent les envoyer, ceux-ci n’ont plus à attendre la fin de l’encodage après l’envoi d’une vidéo. Comme le montre le screencast ci-dessus, cela revient de fait à multiplier la vitesse d’encodage par 150.
Les clients existants peuvent activer cette fonctionnalité en ajoutant simplement "realtime": true à leur
Step d’encodage vidéo. Nous avons également mis à jour la
documentation de cette fonctionnalité.
Si vous découvrez Transloadit, vous pouvez l’essayer en vous inscrivant.
Détails techniques
D’un point de vue technique, l’encodage en temps réel consiste à injecter le flux d’envoi de la vidéo dans FFmpeg via l’entrée standard.
Si cela paraît simple en théorie, c’est en réalité assez difficile à réaliser sur la plupart des stacks. Heureusement, notre système repose sur Node.js, qui est très bien équipé pour ce type de redirection de flux.
Pour y parvenir, nous utilisons notre analyseur d’envoi de fichiers fait main, qui écrit le fichier envoyé sur le disque et nous transmet des événements de progression au fil de l’eau. Chaque événement de progression injecte un nouveau fragment de la vidéo dans FFmpeg. Toutefois, si FFmpeg n’arrive pas à suivre, nous attendons que le flux d’entrée standard se vide. Ainsi, aucune accumulation de mémoire ne peut se produire.
La gestion des erreurs est également importante. Si FFmpeg renvoie une erreur pendant l’encodage en temps réel, nous abandonnons simplement l’encodage en temps réel et revenons à l’encodage classique.
En bref, voilà comment cela fonctionne. Si vous souhaitez plus de détails, laissez simplement un commentaire. Si vous avez déjà beaucoup investi dans votre propre stack vidéo, nous proposons aussi nos services de conseil pour intégrer cette technologie à votre plateforme. Il vous suffit de nous contacter.
Et ensuite ?
Ce n’est qu’une des étapes pour apporter des fonctionnalités de streaming à toutes les parties de notre service. Le prochain chantier consiste à transférer en flux continu vers Amazon S3 les vidéos encodées en temps réel.
Une autre difficulté concerne certains fichiers "mov" dont les métadonnées se trouvent à la fin du fichier.
Heureusement, nous avons enthousiasmé Daniel G. Taylor avec ce sujet,
ce qui l’a poussé à porter sa version Python de
qtfaststart en JavaScript. Nous sommes donc
confiants : tout cela sera réglé avec la prochaine mise à jour de notre SDK jQuery.
Nous tenons aussi à vous faire savoir que Daniel recherche actuellement un poste en télétravail. N’hésitez pas à le contacter si vous cherchez à intégrer un hacker vraiment brillant à votre équipe.
Le mot de la fin
Notre mission est d’améliorer l’envoi de fichiers sur le web. Dites-nous donc quels autres aspects vous gâchent la journée : nous serons ravis de concevoir la solution !
Crédits
La vidéo d’exemple envoyée dans le screencast a été produite par nos amis de némata.
