小编Kc *_*son的帖子

iOS Safari 上 HLS 视频的 AWS S3 签名

我使用 HLS.js 来处理 HLS 流,并且我已经能够让它在 Android 上正常工作。问题是 Safari iOS 内置了 HLS 支持,因此它不支持媒体源扩展 (MSE)。这意味着我无法使用自定义加载程序对每个文件块 URL 进行签名,以便它可以访问 S3 上的该文件块。每个用户都有自己的认知访问权限,并且只能访问 S3 存储桶中的文件夹。这会阻止用户观看其他人的视频。这就是为什么播放列表文件的通用签名是不够的,因为播放列表文件可以被签名,但是一旦流尝试访问文件块,它就会被阻止,因为它们没有签名。

if (Hls.isSupported()) {
                        class loader extends Hls.DefaultConfig.loader {
                            constructor(config) {
                                super(config);
                                var load = this.load.bind(this);
                                this.load = async function(context, config, callbacks) {
                                    let signedVideoPlaylistUrl = await new Promise((resolve, reject) => {
                                        s3.getSignedUrl('getObject', {
                                            Bucket: 'bucket-name',
                                            // Pass the URL and get the S3 key
                                            Key: context.url.split("s3.amazonaws.com/")[1],
                                            Expires: 60 * 60 * 1 // 1 hour
                                        }, function(error, result){
                                            if(error){
                                                console.error(error);
                                                reject(error); …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-s3 http-live-streaming amazon-cognito hls.js

6
推荐指数
1
解决办法
1124
查看次数