【问题标题】:Download Video Streams from Remote url using NightmareJs使用 NightmareJs 从远程 url 下载视频流
【发布时间】:2016-08-20 03:47:45
【问题描述】:

我正在尝试构建一个抓取工具来下载视频流并将它们保存在使用 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 异步流 api 下载视频流。有没有办法使用 NodeJs 内置流 api 从远程 url 打开一个流并将其通过管道传输到本地/其他远程可写流

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这只是一个方法描述。如果您有工作代码,请自己回答这个问题。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2016-07-11
    • 2011-07-11
    • 1970-01-01
    • 2016-05-30
    • 2019-02-22
    相关资源
    最近更新 更多