如何在转录视频后使用fluent-ffmpeg流式传输最终大小?

时间:2018-04-05 16:52:17

标签: node.js ffmpeg stream fluent-ffmpeg transcription

我正在尝试使用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 ;

这个问题的解决方法是什么?

0 个答案:

没有答案