我正在开发一个iOS 应用程序,它允许下载和HTTP 直播私人视频。视频存储在 Amazon S3 存储桶中(asmp4
并分段为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
文件中的路径是相对的。
有什么建议如何在无需通过签名服务器发送所有内容的情况下实现此功能?