首页 > 解决方案 > 流式视频文件仍在下载 NodeJS

问题描述

我想流式传输mp4 视频文件,而它仍在后端下载。就像一些torrent客户端一样,torrent 仍在下载,但您已经可以开始观看视频了。

目前我有一些工作使用rangesfs.createReadStream

var stat = fs.statSync('/path/to/file.mp4'); // this file gets downloaded when requested
var total = stat.size;

console.log(prettyBytes(total));

if (request.headers.range) {
    var range = request.headers.range;
    var parts = range.replace(/bytes=/, "").split("-");
    var partialstart = parts[0];
    var partialend = parts[1];

    var start = parseInt(partialstart, 10);
    var end = partialend ? parseInt(partialend, 10) : total-1;
    var chunksize = (end-start)+1;

    var file = fs.createReadStream(path, {start: start, end: end});
    
    resource.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4' });
    file.pipe(resource);
} 
else {
    resource.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' });
    fs.createReadStream(path).pipe(resource);
}

这目前正在工作,可以在浏览器中播放视频。但是,一旦我开始在HTML5 视频播放器中搜索,播放器就会跳回00:00并重新开始。几分钟后视频也会停止,因为该部分是在视频开始时下载的。

当我重新加载浏览器时,mp4文件已经下载了更多,现在我可以进一步寻找,但最终它再次失败并从 开始00:00,即使视频已完全下载。

我偶然发现了这个包node-growth-file,这似乎是我正在寻找的。但是这个包裹似乎被它的主人遗弃了。有替代方案吗?

这甚至可以使用NodeJS吗?

标签: javascriptnode.js

解决方案


推荐阅读