最近给一个客户弄网站视频问题,因为需求、用户、预算都不多,所以就没有用云点播功能,而是直接用云存储套CDN来实现,同时考虑加载速度等因素,还是把视频用M3U8格式,相对直接用MP4格式还是好很多。

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

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

这就是跨域的问题了,也就是需要给对象存储设置跨域规则,因为套了CDN,所以还要把对象存储的跨域规则同步到CDN去。

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

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

  • 来源 Origin:设置要在网站播放的域名
  • 操作 Methods:都选上,请求方式
  • Allow-Headers:默认(允许服务器请求携带的字段)
  • Expose-Headers:默认 (就是个头部标示)
  • 超时 Max-Age:时间按需设置

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

二、设置对应CDN的 HTTP响应头配置

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

在CDN – 高级设置 中间有个 HTTP响应头配置,新增规则,一般增加上面4个就行,当然你自己有其他需求除外。

Access-Control-Allow-Origin:设置域名或者ip、用英文逗号隔开,是否允许某个域请求。

Access-Control-Allow-Methods请求方式

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

Access-Control-Max-Age时间,对应写个,单位秒。

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

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

有一点腾讯云文档说不支持ETge、Content-Length头部规则,不用理会,因为这就是个标示。

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

现在对象存储和CDN的跨域规则设置就完成了,刷新下CDN,你的m3u8视频就能用播放器在谷歌浏览器直接看了。

为了相对安全,对象存储得用:公有读私有写(毕竟你要给其他人看),然后对象存储和CDN的防盗链都设置下。

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