从Amazon S3流式传输MP3文件

40

有没有一种方法可以通过网站嵌入的Flash小部件或其他方法,流式传输存储在Amazon S3上的MP3文件?

2个回答

42

是的,这是可以实现的。首先,您需要在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>

这样就可以从任何地方访问媒体-如果您想更具体,可以使用更复杂的方法,但这是最简单的方法。

相关资源:


11
请记住,媒体实际上并没有像使用Red5或Flash Media Server一样进行流式传输,而是逐渐下载 - 因此,媒体文件最终会成为浏览器缓存中的容易识别的文件。 根据许可证,这可能会成为涉及第三方版权内容的问题。 - Argelbargel
还要注意流量,因为如果跨域文件没有保护MP3免受其他网站链接的影响,我相信任何人都可以在他们的Flash播放器中使用这个MP3 = 你支付带宽。但是我还没有测试过。 - BerggreenDK
@BerggreenDK 迟来的回复,但您可以通过将存储桶设置为私有,并通过 API 向已认证的客户提供签名 URL 来解决此问题。这些 URL 仅在预定义的时间段内有效。我建议无论如何都要这样做,因为通常不希望在 S3 上设置公共 ACL,除非在特定情况下,例如在 S3 上托管网站(请参见最近涉及 S3 的数据泄漏事件,这完全是由于糟糕的安全策略和缺乏知识所致)。 - Carl

38
为更新这个问题的答案,如果您想要实际向客户端进行流媒体传输,可以在S3存储桶上使用Amazon CloudFront(如Rudolf所提到的)。在CloudFront中创建一个“流分发”,将其指向您的S3存储桶。

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

Cloudfront Streaming使用Adobe Flash Media Server 3.5。

还有一种使用签名URL播放安全内容的能力。


3
谢谢,这正是我急需的信息!你太棒了! - r3wt
2
这应该被打上绿色的勾号! - Swaathi Kakarla
虽然这似乎证实了我们正在走正确的道路,但我没有找到免费的软件库/播放器。有吗?我该如何寻找?你能举些例子吗?浏览现有的“RMTP库”,我发现JWplayerWowza,当然还有Adobe FlashGnash。难道没有任何流行的、免费的基于HTML的播放器支持这个吗?我错过了什么吗?(我打算开发一个PHP流媒体应用程序。在中长期内,它应该会变成商业化,这也是为什么我们将在AWS S3上托管文件的原因之一。) - Balmipour
2
现在,您不再需要使用RTMP来获取流媒体,S3本地HTTP流媒体完全可以胜任,并且比RTMP更简单地实现了流媒体播放。如果您只需要音频流,则将文件放入S3即可。如果您需要视频,则应考虑使用HLS或MPEG-DASH(同样的文件也在S3中)。如果您有许多客户,请结合CloudFront Web分发以获得更好的性能。除了简单性外,这不需要专有库。 - 02strich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接