Sortie de tuyau de ffmpeg à l'aide de nodejs stdout
Je suis de ne pas être en mesure de rediriger la sortie de la ffmpeg sur une sortie standard (stdout).
Sont les suivantes bloc de code que j'ai codé jusqu'à présent.
var http = require('http')
, fs = require('fs')
var child_process = require("child_process")
http.createServer(function (req, res) {
console.log("Request:", dump_req(req) , "\n")
//path of the
var path = 'test-mp4.mp4' //test-mp4-long.mp4
, stat = fs.statSync(path)
, total = stat.size
var range = req.headers.range
, parts = range.replace(/bytes=/, "").split("-")
, partialstart = parts[0]
, partialend = parts[1]
, start = parseInt(partialstart, 10)
, end = partialend ? parseInt(partialend, 10) : total-1
, chunksize = (end-start)+1
console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize + "\n")
var ffmpeg = child_process.spawn("ffmpeg",[
"-i", path, //path
"-b:v" , "64k", //bitrate to 64k
"-bufsize", "64k",
"-" //Output to STDOUT
]);
//set header
res.writeHead(206
, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total
, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize
, 'Content-Type': 'video/mp4'
})
stdout[ params[1] ] = ffmpeg.stdout
//Pipe the video output to the client response
ffmpeg.stdout.pipe(res);
console.log("Response", dump_res(res), "\n")
}).listen(1337)
Quand j'ai remplacé le ffmpeg fourre de code ci-dessus, tout fonctionne très bien. Voici la partie du code lorsque je remplace le ffmpeg pour animaux.
var file = fs.createReadStream(path, {start: start, end: end})
Et de la tuyauterie comme:
file.pipe(res)
Ce mal, je suis en cours d'exécution?
Edit:
Le ffmpeg commande fonctionne très bien. J'ai testé ce par le biais de la ligne de commande et de génération de bon de sortie.
- Si quelqu'un tente d'utiliser ce script, il manque une pièce:
res.on("close", () => { ffmpeg.kill(); });
sinon le ffmpeg processus de feuilles en cours d'exécution en arrière-plan lorsque l'on ferme l'onglet ou la fenêtre du navigateur.
Vous devez vous connecter pour publier un commentaire.
Vous devez passer
pipe:1
dire FFmpeg pour écrire la sortie vers stdout. Voici un exemple tiré de l'un de mes projets:https://github.com/lperrin/node_airtunes/blob/master/examples/play_ffmpeg.js
Unable to find a suitable output format for 'pipe:1'
-f mp3
pour forcer le format de sortie