2015-09-14 168 views
2

我想用HLSv4流式传输视频。我正在使用AWS Elastic Transcoder和S3将原始文件(例如。* .avi或* .mp4)转换为HLSv4。使用AWS Elastic Transcoder和S3流式传输HLSv4而不公开所有内容?

代码转换成功,具有多个* .ts和* .aac(每个媒体文件伴随有* .m3u8播放列表文件)以及一个链接到媒体文件特定播放列表文件的主* .m3u8播放列表文件。我觉得这里一切都很顺利。

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

一个选择是在运行中生成这些播放列表,因为它们只是文本文件。明显的麻烦是头顶上,似乎hacky,这些帖子令人沮丧:https://forums.aws.amazon.com/message.jspa?messageID=529189,https://forums.aws.amazon.com/message.jspa?messageID=508365

花了一些时间在这之后,我觉得我正在绕圈,似乎没有一个超级如何做到这一点的任何地方清楚解释。

所以当2015年9月,什么是使用AWS弹性转码器和S3到流HLSv4未做内容公开的最佳方式?任何帮助是极大的赞赏!

编辑:转贴下面的格式我的评论...

谢谢您的回复,这是非常有帮助的

多数民众赞成形成在我头上的计划是保留转换后的TS和AAC文件在S3上,但生成6-8 m3u8文件+主播放列表,并直接从应用服务器提供服务所以用户点击“播放”页面,jwplayer从应用服务器获取主播放列表(例如“/ play/12 /”)。服务器端,这加载m3u8文件从s3到内存和搜索和替换媒体特定的m3u8链接指向S3与一个新鲜的URL令牌

因此,用户 - > jwplayer - >本地主m3u8(验证auth服务器端) - >本地媒体m3u8s(验证身份验证服务器端) - > S3的媒体文件(已签署的网址和临时令牌)

你看到使用这种方法的任何问题访问?比如“你不能从播放列表中引用外部媒体”或者类似的东西能抓到22-ish?

回答

2

动态生成的播放列表是一条路可走。我实际上实现了像Nginx模块这样的东西,它的工作速度非常快,虽然它写在C和编译而不是PHP

的人在你的第一个环节是更可能是因为他/她1s块持续时间的问题。这增加了很多请求和开销,Apple推荐的值是10s

solutionsHLSAES-128supported on the Elastic Transcoder)加密的,这也增加了开销,如果你这样做对飞,并HLSDRMPHLS/Primetime将最有可能让你进入的很多麻烦客户端。

似乎有一种方法可以用Amazon CloudFront来实现。 请注意,我没有亲自尝试过,并且需要检查它是否可以在Android/iOS上运行。

这个想法是使用Signed Cookies而不是Signed URLs。它们显然是在2015年3月推出的。链接的博客条目甚至使用HLS作为示例。

在验证用户身份之后,您将发送Set-Cookie标头,而不是动态URL。该Cookie(希望)被传来传去的每个请求(播放列表和段)和CloudFront决定是否允许访问您的S3存储或不:

CloudFront Signed Cookies

您可以在这里找到的文档: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

+0

谢谢你的回复,这是非常有帮助的 我脑海中形成的计划是保持在S3上转换的ts和aac文件,但生成6-8 m3u8文件+主播放列表并直接从应用服务器 所以用户点击“播放”页面,jwplayer从应用服务器获取主播放列表(例如“/ play/12 /”)。服务器端,这将加载从S3的M3U8文件到内存中,搜索并替换特定媒体M3U8链接指向S3用新生成的URL令牌 所以用户 - > jwplayer - >本地主M3U8 - >本地媒体m3u8s - > s3媒体文件 您是否发现此方法存在任何问题? – Davebs

+0

它应该可以工作,因为如果我把它正确的话,你就可以在HLS VOD播放列表中播放。客户端将只下载主播和每个变种'm3u8'播放列表一次,因此您只需要在播放开始或之前创建它们(相比之下,您必须定期使用滑动窗口进行播放)。尽管您拥有列表中的所有细分,但处理成本会更高。你的负载将会出现尖峰,而不是更低的,不断的使用。 – aergistal

+0

下面是一个类似的例子,但加密和Azure:https://azure.microsoft.com/en-us/blog/how-to-make-token-authorized-aes-encrypted-hls-stream-working-in-苹果浏览器/ – aergistal

相关问题