使用 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的主要内容,如果未能解决你的问题,请参考以下文章