如何为 Amazon CloudFront 签署 RTMP URL
Posted
技术标签:
【中文标题】如何为 Amazon CloudFront 签署 RTMP URL【英文标题】:How to sign an RTMP url for Amazon CloudFront 【发布时间】:2016-07-20 12:10:51 【问题描述】:我正在尝试在 Amazon 的 CloudFront 中为 RTMP 分发创建签名 URL。我有以下工作:
用于 Web 分发的签名 URL(通过http
和 https
) - 所以我知道我能够正确签名 URL。
用于 RTMP 分发的未签名 URL - 所以我知道我已经为 RTMP 正确设置了 CloudFront 和 S3。
主要问题 - 现在我正在尝试为 RTMP 获取 签名 url,它似乎永远无法播放。
部分混淆是基于 url 的格式(类似于this question)。所以我不知道我签署网址的哪一部分是否重要 - 如果我签署整个事情(如我的 http url),或者我只签署一部分,以及我是否在路径中包含 mp4:
前缀.
*** 上似乎有很多伪相似的问题,但它们似乎与略有不同的问题有关,而不是实际为 RTMP 创建签名的 url。
【问题讨论】:
【参考方案1】:不幸的是,RTMP 网址的创建方式有很多变体,其中
造成很大一部分混乱。以下是我能够使其与 Amazon CloudFront 一起使用的方式。需要明确的是,这是在 *.SMIL
文件中使用的,因此如果您只需要一个 url,它可能会有所不同。
S3ObjectSummary
对象的文件有一个key
,可能类似于folder1/folder2/video.mp4
。
使用上述密钥,删除.mp4
扩展名。
正常签名网址(我使用CloudFrontService.signUrlCanned()
。
在生成的*.smil
文件中,将base
引用设置为rtmp://<CloudFront RTMP Distribution Domain>/cfx/st
在video
元素中,设置height
和width
,并在src
属性中,将mp4:
添加到签名的url 部分。
这是一个示例 SMIL 文件。
<smil data-livestyle-extension="available">
<head>
<meta base="rtmp://some-cloud-front-domain.net/cfx/st"/>
</head>
<body>
<switch>
<video src="mp4:<signed portion of video path>" />
<video src="mp4:<signed portion of video path>" />
</switch>
</body>
</smil>
【讨论】:
【参考方案2】:使用 Python/boto3,我已成功使用 rsa_signer 签署媒体文件
http://boto3.readthedocs.io/en/latest/reference/services/cloudfront.html#generate-a-signed-url-for-amazon-cloudfront
仅对媒体文件的路径进行签名。
假设您要流式传输位于“videos/test.mp4”的 S3 存储桶媒体文件 按照上面链接中的 boto3 示例,您可以执行以下操作来使用 flowplayer 提供文件:
signed_url = cloudfront_signer.generate_presigned_url(
'videos/test.mp4', date_less_than=expire_date)
然后在flowplayer代码中(Django模板语法):
<div class="flowplayer fp-slim" data-rtmp="rtmp://cloudfront_domain_prefix.cloudfront.net:1935/cfx/st">
<video>
<source type="video/flash" src="mp4:signed_src">
</video>
</div>
【讨论】:
以上是关于如何为 Amazon CloudFront 签署 RTMP URL的主要内容,如果未能解决你的问题,请参考以下文章
如何为外部字体请求设置 AWS Cloudfront 缓存?
您如何为 Google Cloud 平台签署 HIPAA BAA?
如何为顶点(example.com)和子域(www.example.com)配置相同的来源 - aws Route53 和 CloudFront