使用NightmareJs从远程URL下载视频流

时间:2016-08-20 03:47:46

标签: node.js asynchronous stream video-streaming nightmare

我正在尝试构建一个刮刀来下载视频流,并使用NightMareJs (http://www.nightmarejs.org/)

将它们保存在私有云实例中

我看过文档,它显示了如何下载这样的简单文件 -

.evaluate(function ev(){
    var el = document.querySelector("[href*='nrc_20141124.epub']");
    var xhr = new XMLHttpRequest();
    xhr.open("GET", el.href, false);
    xhr.overrideMimeType("text/plain; charset=x-user-defined");
    xhr.send();
    return xhr.responseText;
}, function cb(data){
    var fs = require("fs");
    fs.writeFileSync("book.epub", data, "binary");
})

- 基于此处的SO帖子 - > Download a file using Nightmare

但我想使用NodeJs async streams api下载视频流。有没有办法从远程URL打开流并使用NodeJs内置流apis将其传输到本地/其他远程可写流

1 个答案:

答案 0 :(得分:0)

您可以检查服务器是否发送了" Accept-Ranges" (14.5)和"内容长度" (14.13)标头通过对该文件的HEAD请求,然后使用" Content-Range"请求您尝试下载的文件的较小块。 (14.16)标头并将每个块写入目标文件(您可以使用附加模式以减少对文件流的管理)。

当然,如果您按顺序请求非常小的块,这将非常慢。您可以构建一个请求者池(例如4),并且只将下一个正确的块写入文件(因此如果已经完成下载,其他请求者将不会使用未来的块)。