【问题标题】:How to programatically download a video?如何以编程方式下载视频?
【发布时间】:2023-03-14 06:45:02
【问题描述】:

我正在尝试通过链接以编程方式从网络服务器下载视频文件。

如果您通过网络浏览器单击该链接,它只会提示您下载视频并提供文件名称,然后正确下载视频。

我有一些 nodejs 代码只是向该链接发出 HTTP 请求并成功地从中获取原始数据并将其保存到默认文件 video.mp4

const https = require('https');
const fs = require('fs');

https.get('https://url.tocdn.com/myvideoid', (resp) => {
let data = '';

// A chunk of data has been recieved.
resp.on('data', (chunk) => {
    data += chunk;
});

// The whole response has been received. Print out the result.
resp.on('end', () => {
    fs.writeFile('./video.mp4', data, (err) => console.log(err))
});

}).on("error", (err) => {
console.log("Error: " + err.message);
});

问题是,例如,当我尝试通过 Windows Media Player 播放该文件时,它只会显示有关文件格式的错误。我错过了什么明显的东西吗?

【问题讨论】:

  • 如果您将下载的文件与手动下载的文件进行比较,它们的长度是否相同(如果相同的长度逐字节比较显示内容有任何差异),我也假设来源也是mp4?
  • 我不认为它们是相同的(没有尝试过),但我会检查它并编辑我的帖子!
  • 可能有助于解决节点是否没有下载所有内容或做一些奇怪的事情(我通常强制 resp.setEncoding('utf8') 以确保我得到我认为我得到的东西)
  • 对不起,圣诞节和新年结束了这个项目。我发现我正在尝试读取 application/octet-stream 并且我将其附加到一个字符串中,这可能是我得到的字节数几乎是我应该读取的两倍的原因.. .
  • 是的,绝对是这样。在resp.on('data') 回调中,我将chunklength 添加到外部累加器变量中,并且总字节数匹配。所以我使用strings 破坏了传入的数据

标签: node.js video download mp4 3gp


【解决方案1】:

如果您假装存储字节,请不要使用string

application/octet-stream 在我的情况下(相同)

从给定的sn-p变化:

resp.on('data', (chunk) => {
    data = Buffer.concat([data, Buffer.from(chunk)]);
});

并确保初始化data,如下所示: let data = Buffer.from([]);

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2014-05-13
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多