带有签名URL的AWS Cloudfront Streaming

时间:2013-01-31 16:21:53

标签: amazon-s3 jwplayer amazon-cloudfront

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

以下是我签名的网址格式:     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>

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

-J

1 个答案:

答案 0 :(得分:9)

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

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

  • Rails 3.x
  • Zencoder for encoding
  • 文件上传回形针
  • Jquery Uload for upload
  • 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原始ID,并且您的编码提供程序将您的规范ID作为所有者而非他们的文件写入文件。

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

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

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

  10. <%=  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 %>
    

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