使用 Node.js 投放视频
Serving video with Node.js
我正在编写一个简单的 Node.js 服务器来将笔记本电脑中的视频传送到我的本地网络。
我一直在寻找最好的方法,我找到了两种方法,我想得到一些帮助,看看在提供视频时是否有一种方法优于另一种方法使用 nodejs 的文件。
视频文件将是巨大的视频文件,电影大小....
选项 1:使用快递:
我看到有些人在为 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 听起来更合理,但是不确定哪个最好以及为什么。
Express server-static 将接受范围请求,因此它实际上不会一次性提供整个视频文件。
范围请求允许客户端以块的形式请求视频。只要 headers 位于视频的开头,客户端就可以在下载视频时开始播放它。
下面来自浏览器检查(在本例中为 safari)的网络消息显示了向服务器请求接受范围请求的视频的示例:
您可以看到响应包含通知客户端(在本例中为浏览器)服务器接受范围请求的信息。
如果您查看图像左侧的以下请求,您会发现它从开始字节到结束字节逐块请求视频。例如,这里是字节 81920 到 98303 的请求和响应:
您可以在此处查看有关 Express serve-static 的更多信息:http://expressjs.com/en/resources/middleware/serve-static.html
我正在编写一个简单的 Node.js 服务器来将笔记本电脑中的视频传送到我的本地网络。
我一直在寻找最好的方法,我找到了两种方法,我想得到一些帮助,看看在提供视频时是否有一种方法优于另一种方法使用 nodejs 的文件。
视频文件将是巨大的视频文件,电影大小....
选项 1:使用快递:
我看到有些人在为 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 听起来更合理,但是不确定哪个最好以及为什么。
Express server-static 将接受范围请求,因此它实际上不会一次性提供整个视频文件。
范围请求允许客户端以块的形式请求视频。只要 headers 位于视频的开头,客户端就可以在下载视频时开始播放它。
下面来自浏览器检查(在本例中为 safari)的网络消息显示了向服务器请求接受范围请求的视频的示例:
您可以看到响应包含通知客户端(在本例中为浏览器)服务器接受范围请求的信息。
如果您查看图像左侧的以下请求,您会发现它从开始字节到结束字节逐块请求视频。例如,这里是字节 81920 到 98303 的请求和响应:
您可以在此处查看有关 Express serve-static 的更多信息:http://expressjs.com/en/resources/middleware/serve-static.html