带有签名URL的AWS Cloudfront Streaming

JT_*_*lan 2 amazon-s3 jwplayer amazon-cloudfront

我已经设置了一个包含下载和流分发的cloudfront实例.我用签名的网址将它们设置为私有.我能够获得示例代码,用于下载分发带有签名网址的图像.我现在正试图通过签名的URL为JW Player提供流式传输,但我遇到了问题.

这里是我签的URL格式:RTMP://s1iq2cbtodqqky.cloudfront.net/2012-08-31_13-24-01_534.mp4过期= 1359648770&签名= Oi8RwL4Nf338NldW2uIsqFIv3zHnJkxXYbXIiVQh〜J0Iq4kb00Ly5MLTgJw〜87KmlUOmilmdRHy7p〜UxeGYQxgkewPI11r27se0b〜hTvpxq9y9Z5C-B-A58ZnngaCi9G2SHAujMzvss7ynLLEqUV3M6MVZl1qCxyfJbLdxCIEMY_和密钥对-ID =

这是我的JW Player代码:

<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>
Run Code Online (Sandbox Code Playgroud)

谁知道这里有什么问题?我该如何单独测试网址?现在很难判断问题是JL Player集成的url还是代码.

-J

Ste*_*don 9

这里有很多问题.我进入它的时候花了一些时间研究它们.以下是我认为可能对很多人有所帮助的一些步骤.

首先是我使用的技术堆栈:

  • Rails 3.x
  • Zencoder用于编码
  • 用于文件上传的回形针
  • Jquery Uload上传
  • JWPlayer

如果那不是你的平台,你可以填写一些空白,但很多学习仍然对你有用.

有很多关于如何从用户上传内容到S3的文章,所以我将跳过那部分,有趣的部分是当你开始编码过程时,这就是问题从签名,流式传输开始的地方在jwplayer或flowplayer中播放的内容.

首先,文件格式 - 我发现MP4和M4A是我最成功的文件格式.使用zencoder,我能够使用开箱即用的mp4和m4a导出格式,并使这些输出播放得很好.

  1. 在设置Cloudfront分发之前,将zencoder策略添加到存储桶.
  2. 如果您已经配置了cloudfront,那么您应该小心如何将zencoder存储桶策略添加到存储桶中,并确保将其与任何存储器合并.Cloudfront还会将内容放入存储桶策略中,您需要这个和zencoder存储桶策略配置文件才能正常工作.

  3. 存储桶策略仅适用于存储桶拥有者拥有的文件,因此请务必与编码提供商联系,以确保他们使用您的访问密钥将文件放在cloudfront中.如果您没有用户在S3中拥有与拥有该文件的用户相同的签名,那么它将无法工作,您将花费数小时思考为什么

  4. 一旦您确定正确设置了存储桶,在继续使用此工具之前,有助于验证您的文件是否实际流式传输(没有签名网址开始,并允许cloudfront流式传输未流式传输的文件.如果不能正常工作不会走得太远).

    http://d1k5ny0m6d4zlj.cloudfront.net/diag/CFStreamingDiag.html

    要使用amazons工具,如果您的rtmp网址是:

    "RTMP://s3b78u0kbtx79q.cloudfront.net/cfx/st/content/myfile.png"

    对于您要输入的流媒体网址:

    s3b78u0kbtx79q.cloudfront.net

    对于您要输入的视频文件名:

    content/myfile.png(没有前导'/')

  5. 一旦你可以通过诊断工具实际从亚马逊流式传输文件,现在继续执行你从流媒体的jwplayer那里得到的任何步骤.

  6. 关于在流式传输时设置JWPlayer(我遇到最少的问题)的注意事项 - 还安装了flash的调试版本.现在在调试过程中,您可以右键单击闪存控件并将日志记录更改为"控制台".现在,您将从Firebug中出现的闪存控件中获得任何加载错误 - 因此可能首先使用Firefox进行测试.通常,在查看这些日志时,您不希望转义任何html控制字符,转义通常会毁掉您的一天.

  7. 我想很多人这样做会希望他们的内容安全并且使用签名的网址(这样可疑的其他人不会只是撕掉你的rtmp路径并将其直接嵌入到他们的网站中,在你支付带宽时获得好处).我可以在开始这条路径之前,请注意这一点,确保首先让您的RTMP流在您的云端存储桶中播放公开流式文件,这样您就知道该机制正在运行.

  8. 如果你到目前为止你在一个好地方,但现在是所有的错误都可以打到你,如果你按照我的建议,它将比你错过其中一个步骤更短的一天(如确保你的桶政策包括您的cloudfront origin id和您的编码提供程序将您的规范ID作为所有者而非他们的文件写入文件.

  9. 现在您已经通过RTMP将内容流式传输到播放器,接下来您将希望使用已签名的URL(同样,其他网站不能只复制您的RTMP路径并通过附带jwplayer的自己的网站播放) .至少在rails中,生成签名网址的最佳方法是使用此gem:

    https://github.com/58bits/cloudfront-signer

    根据您嵌入网址的方式,您需要使用不同类型的转义.如果您的网址没有播放,请尝试以下方法(不是很精确,但如果您在这里并且失去了头发,您会尝试任何事情,如果您已经尝试过这项工作,您可能已经知道我的意思而不会需要理发一段时间):

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

<%=  AWS::CF::Signer.sign_path_safe 'path/to/my/content', :expires => Time.now + 600 %>
<%=raw AWS::CF::Signer.sign_path_safe 'path/to/my/content', :expires => Time.now + 600 %>
Run Code Online (Sandbox Code Playgroud)

在我发现使用raw会解决我所有的问题之前,我可能已经拧了一个小时一次.