ios – 通过CloudFront进行私有HTTP直播

ios – 通过CloudFront进行私有HTTP直播,第1张

概述我正在开发一个iOS应用程序,允许下载和私人视频的HTTP直播.视频存储在Amazon S3存储桶中(如mp4并分段为m3u8 / ts文件).此外,CloudFront已打开并连接到存储桶. 由于内容是私有的,因此我需要在通过CloudFront连接时对URL进行签名.为了对URL进行签名,必须使用私钥,因此,如果不将私钥存储在捆绑包中,则无法在iOS应用程序中生成签名URL.这将是个坏主意! 我正在开发一个iOS应用程序,允许下载和私人视频的http直播.视频存储在Amazon S3存储桶中(如mp4并分段为m3u8 / ts文件).此外,CloudFront已打开并连接到存储桶.

由于内容是私有的,因此我需要在通过CloudFront连接时对URL进行签名.为了对URL进行签名,必须使用私钥,因此,如果不将私钥存储在捆绑包中,则无法在iOS应用程序中生成签名URL.这将是个坏主意!

所以我决定编写一个简单的Ruby服务器,它执行URL签名并重定向到生成的签名CloudFront URL,如下所示:

http://signing.server.local/videos/1.mp4→https://acbdefg123456.cloudfront.net/videos/1.mp4??Expires=XXX&Signature=XXX&Key-Pair-Id=XXX

http://signing.server.local/videos/1.m3u8→https://acbdefg123456.cloudfront.net/videos/1.m3u8??Expires=XXX&Signature=XXX&Key-Pair-Id=XXX

对于视频下载,它运行良好,因为只有一个请求.但是,当我希望流式传输内容并为MPMovIEPlayerController提供签名服务器的URL时,服务器只会签署第一个请求并重定向到CloudFront.对于下一个请求,MPMovIEPlayerController将第一个签名的CloudFront URL作为基础,并尝试直接连接而不会抛出签名服务器.

m3u8文件中的路径是相对的.

有关如何实现此功能而无需通过签名服务器发送所有内容的任何建议?

解决方法 使用S3 / CloudFront或任何其他存储/ CDN执行专用HLS的正确方法是使用HLS加密.见 Apple documentation about this topic.

除了存储播放列表和分段视频文件的存储空间外,您还必须集成安全的httpS服务器,以存储顶级播放列表和密钥.这些密钥是在使用Apple HLS工具进行分段期间生成的.

下面是它的工作原理:

> MPMovIEPlayerController获取指向安全httpS服务器上的顶级播放列表(.m3u8)的URL.
>在此文件中,有指向变体播放列表(prog_index.m3u8)的链接,这些链接存储在S3 / CloudFront中,并指向视频文件(.ts).
>此外,变体播放列表包含指向读取视频文件所必需的键的链接.这些密钥也存储在安全的httpS服务器上.

见下图:

摘自Mobile Movies with HTTP LIve Streaming (CocoaConf DC,Jun ’12)的演示文稿

当然,有可能使基础设施更安全,请参阅链接的Apple文档.

我还创建了一个用于分段的Ruby脚本,以生成具有给定基本URL的输出,这使事情变得更加简单.

总结

以上是内存溢出为你收集整理的ios – 通过CloudFront进行私有HTTP直播全部内容,希望文章能够帮你解决ios – 通过CloudFront进行私有HTTP直播所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1075830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存