我在同一个Amazon S3存储桶中有两个HLS视频播放列表(不同的文件夹)。我还使用CloudFront创建了HTTP分发。我使用带有videojs-contrib-hls插件的VideoJS播放器来播放视频。其中一个(让我们称之为good-browser-playlist.m3u8
)很好;另一个(让我们称之为bad-browser-playlist.m3u8
)给我一个Code 4错误(The media could not be loaded, either because the server or network failed or because the format is not supported
)。奇怪的是,两者之前都工作正常,我无法弄清楚我做了什么来打破这个。
我的存储桶根目录中有一个crossdomain.xml
文件,其中包含:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross- domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
当两个播放列表都在工作时,就在那里,现在它还在那里,所以我不认为这是问题所在。此外,播放列表及其所有文件都是公开的(在发布之前和之后)。
问题始于我尝试实施存储桶策略以限制对我的域的存储桶的访问。该政策基本上是这样的:
{
"Version": "2012-10-17",
"Id": "Policy152236038454",
"Statement": [
{
"Sid": "Stmt152261024490",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://mydomain1.com/*",
"http://mydomain2.com/*",
]
}
}
}
]
}
但是,即使我删除了存储分区策略,bad-browser-playlist.m3u8
仍然无法播放。
更新:将存储桶策略的更改传播到CloudFront需要多长时间?我重新启用了该策略,过了一段时间,没有更改任何其他内容,所有内容都在浏览器中播放。但是,我也可以 在VLC播放器中播放bad-browser-playlist.m3u8
(我不应该 - 并且它正确地赢得了good-browser-playlist.m3u8
),并且我无法在iOS上播放其中任何一个。自从我开始遇到问题以来,已经过了30分钟。我想知道在政策传播之前我的切换设置多次引起的混乱有多少。怎么会知道政策是否真的传播了?我需要减少测试中的变量数量。