解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法

发布时间:

今天在另一台腾讯云服务器上面开通cos对象存储功能,然后就出现一堆自己不能解决的问题~由于手头比较紧张,没有选择开通云点播功能,而是直接用云存储套CDN来实现视频播放,咨询了行业大佬给的建议,又考虑到速度方面,决定用M3U8格式来作为视频的格式,在大佬的热心帮助下,终于搞定了,给大家分享一下我的解决方法。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法

一开始上传一个m3u8视频文件到对象存储之后,然后用m3u8播放器在谷歌、火狐浏览器都无法播放,但是在Safari、QQ浏览器、手机里面都是正常的,所以肯定和视频的切片没关系了。

然后看了下浏览器返回的信息,状态是:COSR

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
这就是跨域的问题了,也就是需要给对象存储设置跨域规则,因为套了CDN,所以还要把对象存储的跨域规则同步到CDN去。

一、设置对象存储跨域规则

在对象存储:安全管理 - 跨域访问CORS设置这里去设置:

来源 Origin:设置要在网站播放的域名

操作 Methods:都选上,请求方式

Allow-Headers:默认(允许服务器请求携带的字段)

Expose-Headers:默认 (就是个头部标示)

超时 Max-Age:时间按需设置

相关规则都可以根据自己需求来,如果你很考虑安全,很严格,就找下对应字段代码填上就行。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
二、设置对应CDN的 HTTP响应头配置

你现在进CDN配置这边就提示让你同步跨域规则了。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
在CDN - 高级设置 中间有个 HTTP响应头配置,新增规则,一般增加上面4个就行,当然你自己有其他需求除外。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
Access-Control-Allow-Origin:设置域名或者ip、用英文逗号隔开,是否允许某个域请求。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
Access-Control-Allow-Methods请求方式

把刚才COS里面的都写上:PUT,GET,POST,DELETE,HEAD

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
Access-Control-Max-Age时间,对应写个,单位秒。

Access-Control-Expose-Headers:ETag,Content-Length,x-cos-request-id

反正就是同步COS跨域规则就行了。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
有一点腾讯云文档说不支持ETge、Content-Length头部规则,不用理会,因为这就是个标示。

规则设置好了,记得开启:配置状态

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
现在对象存储和CDN的跨域规则设置就完成了,刷新下CDN,你的m3u8视频就能用播放器在谷歌浏览器直接看了。

解决腾讯云对象存储COS因跨域限制不能播放M3u8视频方法
为了相对安全,对象存储得用:公有读私有写(毕竟你要给其他人看),然后对象存储和CDN的防盗链都设置下。

CDN的访问控制、带宽的上限、告警通知都设置下,流量包提前买好,免得被恶意刷了流量,觉得流量不正常,就看下ip,然后封ip,实在是太多了,消耗你太多费用了就报警处理。