从 Amazon S3 流式传输 MP3

Posted

技术标签:

【中文标题】从 Amazon S3 流式传输 MP3【英文标题】:Streaming MP3s from Amazon S3 【发布时间】:2009-03-27 13:15:25 【问题描述】:

有没有办法通过嵌入网站的 Flash 小部件或其他方法来流式传输存储在 Amazon S3 上的 MP3?

【问题讨论】:

【参考方案1】:

是的。首先,您需要在您的 S3 帐户中创建一个全部小写、全局唯一且与 DNS 兼容的存储桶;例如,我创建了一个名为“media.torusknot.com”的存储桶。

然后,为了让一切看起来不错,您需要创建一个 DNS CNAME 条目以将您站点的子域映射到该 S3 存储桶。这将允许您通过“http://media.example.com/somefile.mp3”访问您上传到该 S3 存储桶的文件。您只需要在文件和存储桶上设置 ACL,以确保允许公共访问。

最后,如果您想通过 Flash 播放器将视频文件从 S3 流式传输到另一个域,您还必须告诉 Flash 可以从另一个域中提取内容。在存储桶中创建一个名为“crossdomain.xml”的文件,其中包含以下内容:

<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
</cross>

这允许从任何地方访问媒体 - 如果需要,您可以更具体,但这是最简单的方法。

相关资源:

Using Amazon Web Services Streaming Media From Amazon S3

【讨论】:

但请记住,媒体并不是真正的流式传输(如 Red5 或 Flash Media Server),而是逐步下载的 - 因此媒体文件最终成为浏览器缓存中易于识别的文件。根据许可证,这可能是受第三方版权保护的内容的问题 还要注意流量,因为如果跨域文件不能防止其他站点链接到 MP3,我相信任何人都可以在他们的 Flash 播放器中使用这个 MP3 = 你支付带宽。但我还没有测试它。 @BerggreenDK 此处响应延迟,但您可以通过将存储桶设为私有并通过 API 为客户端提供经过身份验证的签名 URL 来解决此问题。这些 url 仅在预定义的时间跨度内有效。我会这样做,因为在 S3 上设置公共 ACL 通常不是您想要的,除非在特定情况下,例如在 S3 上托管网站(请参阅最近的数据泄漏,其中涉及 S3 上糟糕的存储桶策略,这只是一个问题糟糕的安全策略和缺乏知识)。【参考方案2】:

要更新此问题的答案,如果您想真正向客户进行 STREAM,您可以在您的 S3 存储桶之上使用 Amazon Cloudfront(如 Rudolf 所述)。在 Cloudfront 中创建指向您的 S3 存储桶的“流式分发”。

这将通过 RTMP 流式传输(适用于网络和 android 设备)。您可以使用 JW Player 或类似的播放器来播放流文件。

Cloudfront Streaming 使用 Adob​​e Flash Media Server 3.5。

还可以使用签名网址播放安全内容。

【讨论】:

谢谢,这是我急需寻找的信息!你大爷! 这应该是绿色的勾! 虽然这似乎证实我们走的是正确的道路,但我没有找到免费的软件库/播放器。有没有,我应该如何寻找?你能举一些例子吗?浏览现有的“RMTP 库”,我发现JWplayerWowza,当然还有Adobe flashGnash。没有任何流行且免费的基于 html 的播放器支持这个吗?我错过了什么 ? (我打算开发一个 php 流应用程序。从中/长期来看,它应该会商业化,这也是我们将文件托管在 AWS S3 上的原因之一) 现在您不再需要使用 RTMP 来获取流媒体,S3 原生 HTTP 流媒体非常好,并且能够以比 RTMP 更简单的方式进行流媒体播放。如果您只是在寻找音频流,只需将文件放在 S3 中就足够了。如果您正在寻找视频,您应该考虑使用 HLS 或 MPEG-DASH(同样,这些文件只是在 S3 中)。如果您有许多客户,请将其与 CloudFront Web 分配相结合以获得更好的性能。除了简单之外,这不需要专有库。

以上是关于从 Amazon S3 流式传输 MP3的主要内容,如果未能解决你的问题,请参考以下文章

可以使用带有 HTML5 播放器的 Amazon S3/CloudFront 流式传输视频吗?

Laravel 5:如何将文件从Amazon S3复制(流)到FTP?

定期将数据从 S3 存储桶流式传输到红移

客户的 Amazon S3 使用情况报告 [关闭]

AWS:通过使用 amazon-data-pipeline 将数据从 S3 传输到 Redshift 来实现除 COPY 之外的其他功能

如何将文件从远程服务器传输到我的 Amazon S3 实例?