gpt4 book ai didi

amazon-s3 - 具有签名URL的AWS Cloudfront流

转载 作者:行者123 更新时间:2023-12-01 08:16:21 26 4
gpt4 key购买 nike

我已经设置了一个具有下载和流媒体分发的Cloudfront实例。我将两者都设置为带有签名网址的私有网址。我能够获得用于带有签名URL的图像的下载分发的示例代码。我现在正在尝试使用签名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>

有人知道这是怎么回事吗?如何单独测试网址?现在很难确定问题是URL还是JW Player集成的代码。

-J

最佳答案

这里有很多陷阱。我花了一些时间来研究它们。我认为这些步骤可能会帮助很多人。

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

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

  • 如果那不是您的平台,则可以填补一些空白,但是很多学习仍然对您有用。

    关于如何从用户向S3上载内容的文章很多,因此我将跳过这一部分,最有趣的部分是当您开始编码过程时,这实际上是从签名,流式传输开始的问题所在。在jwplayer或flowplayer中播放的内容。

    首先,文件格式-我发现MP4和M4A是我最成功的文件格式。使用zencoder,我可以使用开箱即用的mp4和m4a导出格式,并使这些输出正常播放。
  • 在设置Cloudfront发行版之前,将zencoder策略添加到存储桶中。
  • 如果已经配置了Cloudfront,则应谨慎选择将zencoder存储桶策略添加到存储桶中,并确保将其与现有存储桶中的任何内容合并。 Cloudfront还将内容存储在存储桶策略中,您需要此存储空间和zencoder存储桶策略配置文件才能正常工作。
  • 存储桶策略仅适用于存储桶所有者拥有的文件,因此请确保与您的编码提供者联系,以确保它们使用您的访问密钥将文件放置在Cloudfront中。如果您没有与在S3中拥有文件的用户一样执行签名,则它将无法正常工作,并且您将花费数小时来思考为什么
  • 一旦确定您的存储桶设置正确,在进一步使用此工具来帮助您验证文件之前,它实际上将进行流传输(开始时不带签名的url,并允许cloudfront传输不流式传输的文件。如果不起作用)你不会走远)。

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

    要使用亚马逊工具,如果您的rtmp网址为:

    “rtmp://s3b78u0kbtx79q.cloudfront.net/cfx/st/content/myfile.png”

    对于您要输入的流URL:

    s3b78u0kbtx79q.cloudfront.net

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

    content / myfile.png(不带前导'/')
  • 一旦您可以通过诊断工具实际从亚马逊流式传输文件,现在继续执行flowplayer jwplayer的所有步骤。
  • 关于在流传输时设置JWPlayer的说明(我遇到的问题最少)-还要安装Flash的调试版本。现在,在调试过程中,您可以右键单击Flash控件,并将日志记录更改为“控制台”。现在,您将从出现在Firebug中的Flash控件中获取任何加载错误-因此,也许首先使用Firefox进行测试。通常,在查看这些日志时,您不希望任何html控件字符转义,转义通常会破坏您的一天。
  • 我想很多这样做的人都希望他们的内容安全并使用签名的url(这样,可疑的其他人不仅会剥夺您的rtmp路径并将其直接嵌入他们的网站中,从而在您支付带宽的同时获得好处)。在开始之前,请确保您首先让RTMP流在从Cloudfront存储桶中播放的公共流文件上播放,以便您知道该机制正在起作用。
  • 如果您走到了这一步,那么您就处在一个不错的位置,但是现在是所有bug都可以袭来的时候,如果按照我的建议进行,比您错过其中一个步骤(例如确保您的存储桶策略)要短一些包括您的Cloudfront原始ID,并且您的编码提供商会以您的规范ID(而不是其所有者)写入具有规范ID的文件。
  • 现在,您已将内容通过RTMP流传输到播放器,接下来,您将希望使其与签名URL一起使用(同样,其他站点不能仅复制您的RTMP路径并通过连接了jwplayer的自己的站点进行播放)。至少在rails中,生成签名URL的最佳方法是使用以下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 %>

    在发现使用raw可以解决所有问题之前,我大概拧了一个小时。

    关于amazon-s3 - 具有签名URL的AWS Cloudfront流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630381/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com