使用 nodejs stdout 的 ffmpeg 管道输出 [英] Pipe output of ffmpeg using nodejs stdout
问题描述
我无法通过标准输出通过管道传输 ffmpeg 的输出.
I am not being able to pipe the output of the ffmpeg over a stdout.
以下是我目前编写的代码块.
Following are the block of code what I coded so far.
var http = require('http')
, fs = require('fs')
var child_process = require("child_process")
http.createServer(function (req, res) {
console.log("Request:", dump_req(req) , "
")
// 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 + "
")
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), "
")
}).listen(1337)
当我从上面的代码中替换 ffmpeg 的东西时,一切正常.以下是我替换ffmpeg内容时的代码部分.
When i replaced the ffmpeg stuffs from above code, all works fine. Following is the part of the code when i replace the ffmpeg stuffs.
var file = fs.createReadStream(path, {start: start, end: end})
还有管道:
file.pipe(res)
我运行有什么问题?
ffmpeg 命令工作正常.我已经通过命令行对此进行了测试并生成了正确的输出.
The ffmpeg command works fine. I have tested this through the command line and generating proper output.
推荐答案
您必须通过 pipe:1
来告诉 FFmpeg 将输出写入标准输出.这是从我的一个项目中获取的示例:
You have to pass pipe:1
to tell FFmpeg to write output to stdout. Here's an example taken from one of my projects:
var ffmpeg = spawn(argv.ffmpeg, [
'-i', argv.file,
'-f', 's16le', // PCM 16bits, little-endian
'-ar', '44100', // Sampling rate
'-ac', 2, // Stereo
'pipe:1' // Output on stdout
]);
https://github.com/lperrin/node_airtunes/blob/master/examples/play_ffmpeg.js
这篇关于使用 nodejs stdout 的 ffmpeg 管道输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!