我正在尝试使用HLSv4流式传输视频。我使用AWS Elastic Transcoder和S3将原始文件(例如* .avi或* .mp4)转换为HLSv4。
转码成功,有几个* .ts和* .aac(每个媒体文件附带* .m3u8播放列表文件)和一个链接到媒体文件特定播放列表文件的主* .m3u8播放列表文件。我觉得这里的一切都很顺利。
现在麻烦:这是一个会员网站,我想避免公开每个视频文件。通常使用S3执行此操作的方法是生成临时密钥服务器端,您可以将其附加到URL。麻烦的是,这会更改媒体文件及其播放列表的URL,因此现有的* .m3u8播放列表(提供对其他播放列表和媒体的引用)不包含这些键。
我遇到的一个选择是动态生成这些播放列表,因为它们只是文本文件。显而易见的麻烦是开销,看起来很糟糕,这些帖子令人沮丧:https://forums.aws.amazon.com/message.jspa?messageID=529189,https://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?
答案 0 :(得分:2)
动态生成的播放列表是一种可行的方法。我实际上已经实现了像Nginx模块这样的东西并且它的工作速度非常快,尽管它是用C
编写的并且编译而不是PHP
。
第一个链接中的人更有可能因为他/她的1s
块持续时间而出现问题。这会增加大量请求和开销,Apple
建议的值为10s
。
HLS
AES-128
加HLS
加DRM
(solutions),如果您即时执行此操作也会增加开销,PHLS
使用Primetime
/ Amazon CloudFront
等Android
,这很可能会让您在客户端遇到很多麻烦。
似乎有办法用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存储桶: