我正在尝试使用createReadStream
流式传输视频并在node.js中使用pipe(res)
,如果文件不需要转码(mp4,webm),它可以正常工作。
使用mkv文件我正在使用fluent-ffmpeg对其进行转码,但问题是我无法在html视频播放器中前后转发。
download = function(file, req, res) {
const range = req.headers.range
const parts = range.replace(/bytes=/, "").split("-")
const start = parseInt(parts[0], 10);
const end = parts[1] ? parseInt(parts[1], 10) : file.length - 1
res.setHeader('Content-Type', 'video/webm')
res.setHeader('Accept-Ranges', 'bytes');
res.setHeader('Content-Length', 1 + end - start);
res.setHeader('Content-Range', `bytes ${start}-${end}/${file.length}`);
res.statusCode = 206;
var stream = file.createReadStream({start, end})
ffmpeg(stream)
.videoCodec('libvpx')
.audioCodec('libvorbis')
.videoBitrate('512k')
.format('webm')
.on('start', () => {
console.log('transcoding...')
})
.on('error', (err, stdout, stderr) => {
console.log(err.message, err, stderr);
})
.on('progress', function(progress) {
console.log(progress);
})
.on('end', function(filenames) {
console.log("Finished transcoding.");
})
.pipe(res);
}
我认为这是因为我们事先并不知道最终转码文件的大小,所以我们在标题中发送的范围是错误的,并且以某种方式使视频播放器"有限&#34 ;
这个问题的解决方法是什么?