Editeur de vidéo en ligne 100% HTML5/JAVASCRIPT
Cette fonctionnalité a été introduite récement, dans un but d'obtimisation de l'utilisation des ressources, et une meilleur flexibilité et reactivité des programmes utilisé.
Le "Terminal JavaScript" permet l'exécution de programmes C/C++, via javacript grâce à
l'utilisation de
emscripten. Ces programmes fonctionnent
donc de la même façon que s'il était exécuté depuis une machine, appelé avec des arguments.
Le but de ce "projet" parallèle est de permettre une meilleure modularité, via l'ajout
de commandes.
Par exemple si l'on souhaite exécuter ffmpeg (et uniquement lui ), auparavant il fallaitutiliser ce
morceau de code (la ligne "arguments" sont les arguments envoyés a ffmpeg) :
worker.postMessage({ type: "command", arguments: parseArguments("-i fichier.mov sortie.mp4"), files: [] });
la même commande depuis un terminal sous linux :
ffmpeg -i fichier.mov sortie.mp4
et maintenant grâce à la classe Terminal développé ( il est aussi possible d'exécuter n'importe quel programme "Js" de manière "dynamique" ) (ici "callback" est un paramètre de la fonction, permettant d'exécuter une fonction personnalisée en fin de traitement), :
var terminal = new Terminal(); // initialisation de la classe ... terminal.Files.push({name:"fichier.mov", data: fileData}); // envois du fichier en mémoire terminal.processCmd("ffmpeg -i fichier.mov sortie.mp4",callback) // envois de la commande
Bien évidemment il est possible de part la flexibilité qui a été donnée a cette classe de rajouter et développer nos propres "programme".
Ainsi, actuellement 3 programmes sont utilisés.
list
est un programme maison permettant d'afficher la liste de ceux qui sont disponnibles
Le fonctinnemrnt est plutôt simple, lorsqu'une commande est envoyée, automatiquement, un processus JavaScript parallèle est créé, c'est ce que l'on appelle
les workers, ces instances JavaScript peuvent exécuter des instructions sans bloquer le traitement de la page visible.
De cette manière, cela permet par exemple de lancer deux commandes à un instant identique. Dans ce cas, deux worker seront créés, et exécuteront le code correspondant au "programme" lancé.
La fonction callback, est une fonction transmit en paramètre, et permet de définir une fonction personnalisée, qui sera exécuté, à chaque message retourné du worker.
il n'existe qu'une seule façon de communiquer avec un worker, c'est d'utiliser la fonction postMessage();
.
Pour visualiser le code source complet de la classe : TerminalJs