Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée du test de streaming vidéo node.js basé sur FFMPEG

小云云
Libérer: 2018-01-18 13:10:34
original
3166 Les gens l'ont consulté

Cet article présente principalement l'explication détaillée de NODEJS basée sur le test de streaming vidéo FFMPEG. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.

Avec ffmpeg comme noyau, il contient un logiciel client qui reçoit le transcodage sur le réseau local et le transmet à Internet. Cet article utilise uniquement les fonctions de base de ffmpeg, notamment les paramètres de streaming, de transcodage, de streaming et de lecture simple.

Workflow

  1. Tirez le flux vidéo distant, le format du flux vidéo est rtsp

  2. Convertir au format de lecture commun rtmp

  3. Pousser vers le port de lecture rtmp://votre adresse de fin de poussée Les utilisateurs peuvent lire directement le contenu après avoir utilisé le logiciel de lecture pour s'y connecter. adresse

Outils et logiciels requis

1. Lien du site officiel de l'outil de ligne de commande ffmpeg, l'avantage de le choisir est :

  1. Gratuit

  2. Aucune installation requise, réduisant considérablement la complexité des opérations de l'utilisateur

  3. Appel de démarrage en ligne de commande

Appel de démarrage en ligne de commande


2. Le numéro de version de nodejs est v6.11.3. (Electron est utilisé dans le projet réel, mais s'il n'est pas nécessaire de le packager dans un client, nodejs peut fonctionner normalement)


3 Le numéro de version tsc est v2.6.1. Le projet utilise TypeScript comme langage d'écriture principal, et il n'y a aucun problème si vous utilisez JavaScript.


Si vous utilisez tsc, veuillez utiliser la version 2.0 ou supérieure. L'outil @type intégré améliorera considérablement l'efficacité du codage


4. -ffmpeg est la version 2.2. Ce package nodejs encapsule la partie d'appel de ligne de commande de ffmpeg, ce qui améliore la lisibilité du code. Si vous connaissez le manuel d'utilisation de la ligne de commande ffmpeg, vous n'avez pas besoin d'utiliser ce package.

  npm install --save fluent-ffmpeg
  //使用js编码的用户,可以忽略下条命令
  npm install --save @types/fluent-ffmpeg
Copier après la connexion



Logiciel de lecture VLC. Utilisé pour contrôler si le streaming, le transcodage et la lecture sont normaux. Lien du site officiel


Code d'implémentation

  const ffmpegPath = "./dist/ffmpegProgram/bin/ffmpeg.exe";
  const ffprobePath = "./dist/ffmpegProgram/bin/ffprobe.exe";
  const flvtoolPath = "./dist/ffmpegProgram/bin/ffplay.exe";

  export function startPushVideo():void{
    getCommands().then((commands:ffmpegPaths[])=>{
      for(let key in commands){
        let command = commands[key];
        //设置输入流地址
        let ffCommand = ffmpeg(command.inputPath)
        //设置输出流地址
        .output(command.outputPath)
        //因需要打包客户端软件,故而将ffmpeg打包进软件中
        //需设置各应用程序的对应路径
        //若仅在本机使用,可以跳过该步骤
        //设置环境变量,添加 PATH 即可
        .setFfmpegPath(ffmpegPath)
        .setFfprobePath(ffprobePath)
        .setFlvtoolPath(flvtoolPath)
        //为保证灵活性,非必须参数采用配置文件读取模式
        .size(command.size);
        for(let key in command.args){
          ffCommand.outputOption(command.args[key]);
        }
        ffCommand.on("start",(commandLine)=>{
          //commandLine 为实际上调用的命令行命令,拼接逻辑为
          //您的ffmpeg所在路径 -i inputOptions 您的拉流协议和路径 outputOptions 推送流协议和地址
          //ffmpeg -i "rtsp://yourPullUrl" -f flv -r 25 -s 640x480 -an "rtmp://yourPushUrl"
          console.log('[' + showTime() + '] Vedio is Pushing !');
          console.log('[' + showTime() + '] Spawned Ffmpeg with command !');
          console.log('[' + showTime() + '] Command: ' + commandLine);
        })
        .on('error', function(err, stdout, stderr) {
          console.log('error: ' + err.message);
          console.log('stdout: ' + stdout);
          console.log('stderr: ' + stderr);
        })
        .on('end', function() {
          console.log('[' + showTime() + '] Vedio Pushing is Finished !');
        })
        .run();
      }
    },(error)=>{
      console.log('error: ' + error);
    })
  }
Copier après la connexion


Résumé


La commande obtenue en écoutant "start" peut également être appelée via exec(yourCommandLine), mais pour le moment, les résultats d'exécution de ffmpeg ne peuvent pas être contrôlés. Une fois le programme terminé, le processus ffmpeg est toujours en cours d'exécution jusqu'à ce que le flux signale une erreur ou que le processus soit arrêté manuellement. On ne sait pas encore pourquoi fluent-ffmpeg peut notifier au processus tiers de se fermer une fois le processus d'ontologie terminé. On suppose que le processus est interrompu via une entrée en ligne de commande, ne serait-ce que via ChildProcess.kill(), le processus tiers ne peut pas être arrêté.


Lors de l'exécution sur une machine I5 8G, le push mono-flux a occupé environ 35 % du processeur. Le push multi-flux nécessite d'autres solutions.

Recommandations associées :

Le modèle de conception Node.js utilise des flux pour le codage

Flux asynchrone Node.js control

nodejs implémente la fonction d'exploration du site Web images_node.js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal