使用 node.js 流服务远程 url

Serve remote url with node.js stream

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

现在我使用 node.js 流

将其提供给客户端

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

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

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

我做了一些研究,发现

chrome 的请求内容范围参数看起来像

[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 做同样的事情?

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

How can I do the same with remote url stored in s3?

不要。

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

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

...As, the website is supposed to receive good traffic.

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