VideoEditorJS - Blog

Editeur de vidéo en ligne 100% HTML5/JAVASCRIPT

Terminal JS

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é.

  • Principe de base :

    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.

    • ffmpeg
    • Gnuplot
    • list

    Le programme list est un programme maison permettant d'afficher la liste de ceux qui sont disponnibles

  • Fonctionnement

    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