使用 node.js 流提供远程 URL

Posted

技术标签:

【中文标题】使用 node.js 流提供远程 URL【英文标题】:Serve remote url with node.js stream 【发布时间】:2020-06-18 20:25:37 【问题描述】:

我有一个视频存储在 amazon s3 中。

现在我通过 node.js 流将它提供给客户端

return request(content.url).pipe(res)

但是,以下格式不适用于 safari。

Safari 无法播放流数据。但是,相同的代码适用于 chrome 和 firefox。

我做了一些研究发现

chrome 的 request content-range 参数看起来像

[0-]

但是,Safari 对内容范围也是如此

[0-10][11-20][21-30]

现在,如果内容存储在我的服务器中,我可以用夹头破坏文件

fs.createReadStream(path).pipe(res)

以请求的内容范围为 Safari 提供服务

正如本博客中提到的https://medium.com/better-programming/video-stream-with-node-js-and-html5-320b3191a6b6

如何对存储在 s3 中的远程 url 执行相同操作?

仅供参考,暂时在服务器上下载内容并在服务后将其删除是不可行的。因为,该网站应该会获得良好的流量。

【问题讨论】:

【参考方案1】:

如何对存储在 s3 中的远程 url 执行相同操作?

不要。

让 S3 提供数据。签署 URL 以暂时允许访问客户端。然后,您不必提供或代理任何内容,并且可以节省大量带宽。来自the documentation的例子:

var params = Bucket: 'bucket', Key: 'key';
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url);

...因为,该网站应该获得良好的流量。

您可能还希望使用 CDN 来进一步降低成本并提高性能。如果您已经在使用 AWS,CloudFront 是一个不错的选择。

【讨论】:

以上是关于使用 node.js 流提供远程 URL的主要内容,如果未能解决你的问题,请参考以下文章

通过 Node.js 代理传输 MJPEG 流

Node篇

在Visual Studio上开发Node.js程序——远程调试及发布到Azure

理解 Node.js 中 Stream(流)

node - 流 浅析

Node.js 服务器上的实时视频流