首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有签名URL的AWS Cloudfront流

带有签名URL的AWS Cloudfront流
EN

Stack Overflow用户
提问于 2013-01-31 16:21:53
回答 1查看 4.9K关注 0票数 3

我已经安装了一个具有下载和流发行版的cloudfront实例。我将两者都设置为带有签名urls的私有地址。我能够为带有签名urls的图像下载发行版提供示例代码。我现在正试图用一个签名的URL为JW播放器运行流发行版,但我遇到了问题。

以下是我签名的网址格式: rtmp://s1iq2cbtodqqky.cloudfront.net/2012-08-31_13-24-01_534.mp4?Expires=1359648770&Signature=Oi8RwL4Nf338NldW2uIsqFIv3zHnJkxXYbXIiVQh~J0Iq4kb00Ly5MLTgJw~87KmlUOmilmdRHy7p~UxeGYQxgkewPI11r27se0b~hTvpxq9y9Z5C-B-A58ZnngaCi9G2SHAujMzvss7ynLLEqUV3M6MVZl1qCxyfJbLdxCIEMY_&Key-Pair-Id=

这是我的JW播放器代码:

代码语言:javascript
运行
复制
<script type="text/javascript" src="jwplayer/jwplayer.js"></script>
<div id="container">Loading the player ...</div>
<script type="text/javascript">
jwplayer("container").setup({
'flashplayer': 'jwplayer/jwplayer.flash.swf',
'file': '<?= $canned_policy_stream_name ?>',
'width': '480','height': '270',
'provider': 'rtmp',
'streamer': 'rtmp://s1iq2cbtodqqky.cloudfront.net/cfx/st/'

});
</script>

有人知道这是怎么回事吗?我怎样才能单独测试这个网址呢?现在很难判断问题是url还是JW播放器集成的代码。

-J

EN

回答 1

Stack Overflow用户

发布于 2013-02-11 22:11:00

有很多麻烦在这里。当我陷入困境时,我花了一段时间去解决这些问题。以下是一些我认为可能对很多人有帮助的步骤。

首先是我使用的技术栈:

  • Rails 3.x
  • 编码用Z编码器
  • 文件上传用回形针
  • 用于上载的Jquery
  • JWPlayer

如果这不是你的平台,你可以填补一些空白,但很多学习仍然会对你有用。

有一堆关于如何从用户上传内容到S3的文章,所以我将跳过这一部分,有趣的部分是当您开始编码过程时,这就是问题的起点--获得签名,流内容在jwplayer或flowplayer中播放。

首先,文件格式-我发现MP4和M4A是我最成功的文件格式。有了Z编码器,我就可以使用开箱即用的mp4和m4a导出格式,并让这些输出播放得很好。

  1. 在设置cloudfront发行版之前,将Z编码器策略添加到桶中。
  2. 如果您已经配置了cloudfront,那么您应该注意如何将Z编码器桶策略添加到存储桶中,并确保将其与任何内容合并。Cloudfront还将内容放入存储策略中,您需要这两种策略和Z编码器桶策略配置文件才能正确工作。
  3. 桶策略只适用于桶所有者拥有的文件,因此请确保与编码提供程序交谈,以确保它们使用您的访问键将文件放在cloudfront中。如果您没有让用户与在S3中拥有该文件的用户进行相同的签名,那么它将无法工作,您将花费数小时思考为什么
  4. 一旦您确信已正确设置了存储桶,在进一步使用此工具帮助验证您的文件实际上将流(开始时没有签名urls,并允许cloudfront对未流的文件进行流)。如果不起作用,你就走不了多远了。 http://d1k5ny0m6d4zlj.cloudfront.net/diag/CFStreamingDiag.html 如果您的rtmp url是: "rtmp://s3b78u0kbtx79q.cloudfront.net/cfx/st/content/myfile.png“ 对于要输入的流url: s3b78u0kbtx79q.cloudfront.net 对于要输入的视频文件名: 内容/myfile.png(没有前面的“/”)
  5. 一旦您实际上可以通过诊断工具从amazon中流出您的文件,现在就继续执行从flowplayer的jwplayer中获得的任何步骤。
  6. 关于设置JWPlayer的注意事项(我对它的问题最少),同时还安装了闪存的调试版本。现在,在调试期间,您可以右键单击闪存控件并将日志记录更改为“控制台”。现在,您将从Firebug中出现的闪存控件中获得任何加载错误--所以可能首先用Firefox进行测试。通常,在查看这些日志时,您不希望任何html控制字符被转义,转义通常会毁了您的一天。
  7. 我想很多这样做的人都希望他们的内容安全,并且使用签名的urls (这样可疑的其他人就不会撕毁您的rtmp路径并将其直接嵌入到他们的站点中,同时支付带宽).I无法强调这一点,在开始这条路径之前,确保您首先让您的RTMP流在cloudfront桶中的公开流文件上播放,这样您就可以知道这种机制是有效的。
  8. 如果您已经完成了这一步,那么现在是所有bug都可以攻击您的好地方了,如果您遵循了我上面的建议,那么这一天将比您错过其中一个步骤的一天更短(比如确保您的桶策略包括您的cloudfront原始id,并且您的编码提供者以您的规范id作为所有者而不是他们的所有者来编写文件)。
  9. 现在,您可以通过RTMP将内容流到播放机上,接下来您将希望让它使用已签名的URL(同样,其他站点不能只复制RTMP路径并通过自己的站点播放它,并附加jwplayer )。至少在rails中,生成签名url的最佳方法是使用此gem: https://github.com/58bits/cloudfront-signer 根据嵌入url的方式,您需要使用不同类型的转义。如果您的URL不播放,请尝试以下几点(不太精确,但如果您在这里并失去您的头发,您将尝试任何东西,如果您已经尝试了这项工作,您可能已经知道我的意思,并将不需要理发一段时间):

<%= AWS::CF::Signer.sign_path 'path/to/my/content',:=> Time.now + 600 %> <%=raw AWS::CF::Signer.sign_path 'path/to/my/content',过期=> Time.now + 600 %> <%= AWS::CF::Signer.sign_path_safe‘path/my/content’,:expires => Time.now + 600 %> <%=raw AWS::CF::Signer.sign_path_safe 'path/to/my/content',:expires => Time.now + 600 %>

我大概花了一个小时才发现使用raw可以解决我所有的问题。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14630381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档