使用AWS Elastic Transcoder和S3流式传输HLSv4而不公开所有内容?

时间:2015-09-14 03:41:33

标签: amazon-web-services amazon-s3 video-streaming jwplayer hls

我正在尝试使用HLSv4流式传输视频。我使用AWS Elastic Transcoder和S3将原始文件(例如* .avi或* .mp4)转换为HLSv4。

转码成功,有几个* .ts和* .aac(每个媒体文件附带* .m3u8播放列表文件)和一个链接到媒体文件特定播放列表文件的主* .m3u8播放列表文件。我觉得这里的一切都很顺利。

现在麻烦:这是一个会员网站,我想避免公开每个视频文件。通常使用S3执行此操作的方法是生成临时密钥服务器端,您可以将其附加到URL。麻烦的是,这会更改媒体文件及其播放列表的URL,因此现有的* .m3u8播放列表(提供对其他播放列表和媒体的引用)不包含这些键。

我遇到的一个选择是动态生成这些播放列表,因为它们只是文本文件。显而易见的麻烦是开销,看起来很糟糕,这些帖子令人沮丧:https://forums.aws.amazon.com/message.jspa?messageID=529189https://forums.aws.amazon.com/message.jspa?messageID=508365

花了一些时间在这上面之后,我觉得我在圈子里四处走动,对于如何做到这一点似乎并不是一个非常明确的解释。

截至2015年9月,使用AWS Elastic Transcoder和S3在不公开内容的情况下流式传输HLSv4的最佳方式是什么?非常感谢任何帮助!

编辑:将下面的评论与格式化重新合并...

感谢您的回复,非常有帮助

我脑海中形成的计划是将转换后的ts和aac文件保存在S3上但生成6-8 m3u8文件+主播放列表并直接从app服务器提供服务因此用户点击"玩"页面和jwplayer从app服务器获取主播放列表(例如" / play / 12 /")。服务器端,这会将s3中的m3u8文件加载到内存中,并使用新生成的URL令牌搜索并替换特定于媒体的m3u8链接以指向S3

所以用户 - > jwplayer - >本地主m3u8(验证身份验证服务器端) - >本地媒体m3u8s(验证身份验证服务器端) - > s3媒体文件(使用签名网址和临时访问)令牌)

您认为这种方法存在任何问题吗?例如"您无法从播放列表中引用外部媒体"或类似的东西捕获22-ish?

1 个答案:

答案 0 :(得分:2)

动态生成的播放列表是一种可行的方法。我实际上已经实现了像Nginx模块这样的东西并且它的工作速度非常快,尽管它是用C编写的并且编译而不是PHP

第一个链接中的人更有可能因为他/她的1s块持续时间而出现问题。这会增加大量请求和开销,Apple建议的值为10s

HLS AES-128HLSDRMsolutions),如果您即时执行此操作也会增加开销,PHLS使用Primetime / Amazon CloudFrontAndroid,这很可能会让您在客户端遇到很多麻烦。

似乎有办法用iOS做到这一点。 请注意,我还没有亲自尝试过,您需要检查它是否适用于Signed URLs / HLS

我们的想法是使用supported on the Elastic Transcoder代替Set-Cookie。它们显然是在2015年3月推出的。链接的博客条目甚至使用CloudFront作为示例。

您在对用户进行身份验证后发送ww[is.na(Sepal.Length) , Sepal.Length:= mean(ww$Sepal.Length, na.rm=TRUE)] 标头,而不是动态网址。每个请求(播放列表和段)都会传递cookie(希望如此),self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil) 决定是否允许访问S3存储桶:

Signed Cookies

您可以在此处找到文档: CloudFront Signed Cookies