首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NodeJS视频流实时转码

NodeJS视频流实时转码
EN

Stack Overflow用户
提问于 2018-06-03 14:22:41
回答 2查看 4.1K关注 0票数 11

我正在构建一个nodejs应用程序,它可以将视频从磁盘发送给用户。由于this问题,我有一个存储在磁盘上的“静态”视频文件的工作视频提要,到目前为止还不错。

我的问题是,我需要对视频进行动态转码,为此我使用了fluent-ffmpeg,并且我成功地实现了代码转换,但是HTML5播放器只显示视频的前3-4秒,然后停止。我猜问题在于文件大小,但即使我对其进行编码,也不会有任何变化。

知道吗?非常感谢:)

代码语言:javascript
运行
复制
var file = 'Big_Buck_Bunny_1080p_surround_FrostWire.com.mp4';
    fs.stat(file, function(err, stats) {
        var range = req.headers.range
        if (!range) { // 416 Wrong range
            return res.sendStatus(416)
        }
        var positions = range.replace(/bytes=/, "").split("-");
        var start = parseInt(positions[0], 10);
        var total = stats.size;
        var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
        var chunksize = (end - start) + 1;

        res.writeHead(206, {
            "Content-Range": "bytes " + start + "-" + end + "/" + total,
            "Accept-Ranges": "bytes",
            "Content-Length": chunksize,
            "Content-Type": "video/mp4"
        })

        var stream = fs.createReadStream(file, { start: start, end: end, autoclose: true })
        .on("open", function() {
            const ffmpegCommand = ffmpeg()
                .input(stream)
                .outputFormat('mp4')
                .outputOptions([ '-movflags faststart', '-frag_size 4096', '-cpu-used 2', '-deadline realtime', '-threads 4' ])
                .videoBitrate(640, true)
                .audioBitrate(128)
                .audioCodec('aac')
                .videoCodec('libx264')
                .output(res)
                .run()
        }).on("error", function(err) {
            res.end(err)
        })
    })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-14 12:04:01

最后,我发现最好的解决方案是使用一种更“流友好”的格式,所以我转而使用HLS,现在一切都更简单了,工作得很好:)

票数 0
EN

Stack Overflow用户

发布于 2019-01-13 20:30:48

我觉得你应该放弃.output(res) .run()

并使用.stream().pipe(res, { end: true})代替

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档