【发布时间】:2013-10-17 21:36:24
【问题描述】:
我正在开发一个 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 文件中的路径是相对的。
有什么建议可以在不需要通过签名服务器发送所有内容的情况下实现此功能?
【问题讨论】:
标签: ios video mpmovieplayercontroller amazon-cloudfront http-streaming