3 votes

Streaming d'une vidéo créée par programme vers youtube en utilisant node et ffmpeg

J'ai essayé de faire du Livestreaming avec une image créée par programme sur youtube en utilisant node. J'ai eu un succès très limité en utilisant FFmpeg. Bien que j'aie réussi à créer et à sauvegarder une image grâce à este Je n'ai pas encore réussi à faire fonctionner le code pour le streaming vers un serveur RTMP.

const cp = require('child_process'),
    destination = 'rtmp://a.rtmp.youtube.com/live2/[redacted]', //stream token redacted
    proc = cp.spawn('./ffmpeg/bin/ffmpeg.exe', [
        '-f', 'rawvideo',
        '-pix_fmt', 'rgb24',
        '-s', '426x240',
        '-i', '-', //allow us to insert a buffer through stdin
        '-f', 'flv',
        destination
    ]);

proc.stderr.pipe(process.stdout);

(function loop() {
    setTimeout(loop, 1000 / 30); //run loop at 30 fps
    const data = Array.from({length: 426 * 240 * 4}, () => ~~(Math.random() * 0xff)); //create array with random data
    proc.stdin.write(Buffer.from(data)); //convert array to buffer and send it to ffmpeg
})();

Lors de l'exécution de ce code, aucune erreur n'apparaît et tout semble fonctionner, mais YouTube signale qu'aucune donnée n'est reçue. Quelqu'un sait-il ce qui se passe ici ?

Mise à jour : C'est vraiment contre-intuitif mais ajouter un slash à la destination comme ceci 'rtmp://a.rtmp.youtube.com/live2/[redacted]/' fait en sorte que ffmpeg jette une erreur générique I/O error . C'est vraiment bizarre pour moi. Je m'excuse si la réponse à cette question est évidente, je suis vraiment inexpérimenté avec ffmpeg.

4voto

LordNeckbeard Points 9321

Il s'agit spécifiquement d'un ffmpeg donc le nœud et le javascript sont une complication inutile (à moins que ffmpeg ne s'exécute même pas). Il est préférable d'obtenir le ffmpeg fonctionnant dans une interface de ligne de commande avant de l'ajouter à un quelconque code.

  • YouTube requiert un flux audio, donc ajoutez -re -f lavfi -i anullsrc option d'entrée pour générer un son silencieux.

  • La sortie doit être YUV 4:2:0 pour le streaming en direct, alors ajoutez -vf format=yuv420p option de sortie.

  • Il est également recommandé d'ajouter -g , -b:v , -maxrate y -bufsize options de sortie lors du streaming ( exemples ).

  • Réglez les encodeurs avec -c:v libx264 -c:a aac pour s'assurer qu'il ne choisit pas automatiquement le vieil encodeur merdique nommé flv1 qui est le défaut de flv muxer ( -f flv ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X