CloudFront HLS 流式传输不起作用 - S3 (HLS v4)

CloudFront HLS streaming not working - S3 (HLS v4)

我使用 CloudFront 设置了基于 S3 的 HLS 流式传输,但 HLS 流式传输似乎不起作用。我使用此网络广播创建了存储桶并转码了内容: https://www.youtube.com/watch?v=MuQ_qg7U0l8

内容似乎具有正确的权限,但缺少 mime 类型(我看到 m3u8 具有 mime 类型 text/plain。转码器不应该正确设置吗?

我不确定这是否是视频无法播放的原因。在 Chrome 中,它只显示一个使用 HTML5 标签的空白屏幕,而在 Safari 中,如果我尝试直接播放它,它会显示播放按钮,但没有其他内容。

有什么想看的地方吗?我的原始内容是 mp4(在使用弹性转码器之前)

更新:啊似乎是 HLS-v4 的问题,如果我转码为 HLS-v3 则工作正常。所以可能与 mime 类型无关(v3 中的相同 mimetypes)

我检查了你的测试流,mime 类型是正确的:

curl -I http://.../master.m3u8
HTTP/1.1 200 OK
Content-Type: application/x-mpegURL

curl -I http://.../hls_1m_.ts
HTTP/1.1 200 OK
Content-Type: video/MP2T

流也能正常播放。

有些客户端只支持协议的 版本 3,我认为这是你的问题。

版本 4 通过 EXT-X-BYTERANGE 添加了字节范围支持。查看您的播放列表:

#EXTINF:3.754688999999999,
#EXT-X-BYTERANGE:118258@1990168
hls_1m_.ts

这肯定会导致某些不支持新功能的播放器出现问题。最安全的方法是暂时使用 版本 3

在我的例子中,我使用的是 s3 public 存储桶,无法流式传输,

我尝试在 s3 中设置 CORS 配置,它工作正常

我在 S3 控制台 CORS 配置中添加了以下内容(s3 > "public bucket" > permissions > CORS configuration)

 <?xml version="1.0" encoding="UTF-8"?>
 <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
 <CORSRule>
     <AllowedOrigin>*</AllowedOrigin>
     <AllowedMethod>GET</AllowedMethod>
     <MaxAgeSeconds>3000</MaxAgeSeconds>
 </CORSRule>
 </CORSConfiguration>

了解更多详情this可能对您有所帮助