Javascript 正在下载的视频流文件NodeJS

Javascript 正在下载的视频流文件NodeJS,javascript,node.js,Javascript,Node.js,我想在mp4视频文件仍在后端下载时对其进行流式传输。就像一些torrent客户端一样,torrent仍在下载,但您已经可以开始观看视频了 目前我使用的是范围和fs.createReadStream var stat = fs.statSync('/path/to/file.mp4'); // this file gets downloaded when requested var total = stat.size; console.log(prettyBytes(total)); if (

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

目前我使用的是
范围
fs.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
开始,即使视频已完全下载

我偶然发现了这个包裹,它似乎就是我要找的。但这个包裹似乎被它的主人抛弃了。还有别的选择吗


甚至可以使用
NodeJS

明确地说,实际上,您是从其他服务器代理此文件吗?如果是这样,为什么要将其写入磁盘?如果没有,为什么不使用
express.static()
?@brad这些文件是通过使用nodejs的torrents下载的。我们不能使用
express.static()
,因为文件在14天后再次被删除,并且文件太大,无法使用
4gb+
。为什么不在接收数据时对其进行流式处理?你想把它也缓存到本地磁盘吗?@brad是的,它会缓存14天到本地磁盘。“接收时流”是什么意思?客户端请求字节数为0到1MB。。。您下载torrent的前几个块,当您获得数据时,您直接将这些缓冲区刷新到客户端。在您的情况下,磁盘也是如此。。。虽然磁盘上的部分当然不必按顺序写入。您只需跟踪所获得的信息,以便知道何时可以向客户端发送数据。