【问题标题】:Serving video with Node.js使用 Node.js 提供视频
【发布时间】:2021-03-15 05:58:33
【问题描述】:

我正在编写一个简单的 Node.js 服务器,以便将笔记本电脑中的视频提供给我的本地网络。

我一直在四处寻找,以检查最好的方法,我发现了两种方法,我希望得到一些帮助,以确定在使用节点。

视频文件将是巨大的视频文件,电影大小......

选项 1:使用 Express:

我见过一些人,在为 Express 服务器创建了所有常见的样板代码之后,在发送视频时,他们只会做如下事情:

app.get('/getMovie', (req, res) => {
    res.sendFile('assets/video.mp4', { root: __dirname });
});

选项 2:使用 Http:

对于此选项,在创建 http 服务器等之后,人们将首先使用fs 创建一个 ReadStream,然后发送视频。比如:

res.writeHead(200, {'Content-Type': 'video/mp4'});
let readStream = fs.createReadStream("movie.mp4");
readStream.pipe(res);

对我来说,对于大型视频文件,选项 2 听起来更合理,但不确定哪个最好以及为什么。

【问题讨论】:

  • 为什么还要为此使用 Node.js?任何静态 HTTP 服务器都可以。
  • 因为服务器。是用 Node.js 定制和编写的

标签: node.js express http video server


【解决方案1】:

Express server-static 将接受范围请求,因此它实际上不会一次性提供整个视频文件。

范围请求允许客户端以块的形式请求视频。只要标头位于视频的开头,客户端就可以在下载视频时开始播放视频。

以下来自浏览器检查的网络消息(在本例中为 safari)显示了向服务器请求接受范围请求的视频的示例:

您可以看到响应包含通知客户端(在本例中为浏览器)服务器接受范围请求的信息。

如果您查看图像左侧的以下请求,您可以看到它从开始字节到结束字节逐块请求视频块。例如这里是字节 81920 到 98303 的请求和响应:

您可以在此处查看有关 Express serve-static 的更多信息:http://expressjs.com/en/resources/middleware/serve-static.html

【讨论】:

  • 感谢您的评论!所以你认为使用 Express 比使用 Http 更好?
  • 实际上大多数静态 HTTP 服务器现在可能会接受范围请求,因此您可以使用任何您想要的。如果您想要更复杂的流媒体服务,那么通常最好使用支持 ABR 流媒体协议(如 HLS 或 DASH)的专用流媒体服务器 - 请参阅此处了解 ABR 的外观:ABR:stackoverflow.com/a/42365034/334402
猜你喜欢
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2017-10-16
  • 2015-01-26
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多