在 Android 中使用 Signed URL 从 Amazon S3 + CloudFront 播放 m3u8

Playing m3u8 from Amazon S3 + CloudFront with Signed URL in Android

我能够访问带有签名 URL 的播放列表文件 (.m3u8)。但问题是,要访问播放列表中的流文件(.ts),每个文件的 URL 也需要签名。

例如:

我可以访问带有签名的 playlist.m3u8 URL http://abcdefg.cloudfront.net/media/playlist.m3u8?Expires=xxxxxxxx&Policy=yyyyyyyyyyyyy&Signature=zzzzzzzzzzzzzz&Key-Pair-Id=kkkkkkkkkkkkkkkkk

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:13
playlist-00000.ts
#EXTINF:12,
playlist-00001.ts
#EXTINF:12,
playlist-00002.ts

但是里面的每个ts文件也应该像

一样访问

http://abcdefg.cloudfront.net/media/playlist-00000.ts?Expires=xxxxxxxx&Policy=yyyyyyyyyyyyy&Signature=zzzzzzzzzzzzzz&Key-Pair-Id=kkkkkkkkkkkkkkkkk

我必须为播放列表中的每个 .ts 文件签名 URL。

不幸的是,我没有看到任何媒体播放器可以在 URL 获取 ts 文件之前处理附加参数。

如果可能的话,我需要这样的播放器回调:

public String onStreamFileReadyForPlaying(String pathToTsFile)
{
     //I could append the parameters here
     return pathToTsFile + "?Expires=xxxxxxxx&Policy=yyyyyyyyyyyyy&Signature=zzzzzzzzzzzzzz&Key-Pair-Id=kkkkkkkkkkkkkkkkk"
}

只需对播放列表中的 URL 进行签名即可。

仅此而已。

有“使用签名 URL”和“签名 Cookie”两种方式

我认为您必须使用“签名 Cookie”

我在下面找到 link 为什么要使用“签名 Cookie” https://docs.amazonaws.cn/en_us/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html

Use signed cookies in the following cases:

  • You want to provide access to multiple restricted files, for example, all of the files for a video in HLS format or all of the files in the subscribers' area of website.

我还没有尝试“签名 Cookie”。但我有同样的问题。 如果你已经完成了“Signed Cookies”,你能反馈一下吗?

下面link是如何使用“Sigend Cookies”的文档 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html

您可以使用自定义的云端签名 url,以允许访问具有单个签名的文件夹内的所有文件。

AWS Documentation

为此,您已经生成了云端密钥对。要生成,请转到顶部下拉菜单中的 my security credentials 和 select cloufront。在那里你可以看到生成密钥对的选项。