Javascript 正在下载的视频流文件NodeJS
我想在mp4视频文件仍在后端下载时对其进行流式传输。就像一些torrent客户端一样,torrent仍在下载,但您已经可以开始观看视频了 目前我使用的是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 (
范围
和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的前几个块,当您获得数据时,您直接将这些缓冲区刷新到客户端。在您的情况下,磁盘也是如此。。。虽然磁盘上的部分当然不必按顺序写入。您只需跟踪所获得的信息,以便知道何时可以向客户端发送数据。