Luk*_*nek 6 video mpmovieplayercontroller http-streaming ios amazon-cloudfront
我工作的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文档.
除了存储播放列表和分段视频文件的存储空间外,您还必须集成安全的HTTPS服务器,以存储顶级播放列表和密钥.这些密钥是在使用Apple HLS工具进行分段期间生成的.
下面是它的工作原理:
MPMoviePlayerController
获取指向顶级播放列表(一个URL .m3u8
)在安全的HTTPS服务器.prog_index.m3u8
)的链接,这些链接存储在S3/CloudFront中,并指向视频文件(.ts
).见下图:
摘自移动电影与HTTP LIve Streaming(CocoaConf DC,Jun '12)
当然,有可能使基础设施更安全,请参阅链接的Apple文档.
我还创建了一个用于分段的Ruby脚本,以生成具有给定基本URL的输出,这使事情变得更加简单.
归档时间: |
|
查看次数: |
6639 次 |
最近记录: |