问题描述
这两天自己写onesite 的时候遇到一个小问题。原框架使用video.js来播放视频,在网络环境下可以正常播放视频,且可以拖动或点击进度条能正常跳转。但是使用koa-static代理的本地视频文件则无法使用进度条,一旦修改进度,那么就会重头开始播放。
整理了一个现象的表格如下:
| 浏览器 | 视频来源 | 是否可用 |
|---|---|---|
| 谷歌 | 网络 | 可用 |
| 谷歌 | koa-static托管 | 不可用 |
| 火狐 | 网络 | 可用 |
| 火狐 | koa-static托管 | 可用 |
原因
这么一看就清晰了,应该是谷歌浏览器或者使用本地静态资源托管的时候出错了。先搜一下别人有没有遇到过吧。不出所料,打开bing,输入关键词,回车。 稍微看了一下搜索结果,主要原因是:koa-static返回了一个文件流,并且没有设置response的header配置,谷歌浏览器不知道总文件的大小,它就每次都重头开始播放。火狐没问题,可能他们考虑到了这种情况,做了兼容。
解决
知道了问题就好解决了,在托管资源文件的时候,添加header配置就行。 我这里使用的后端是koa + koa-static + koa-mount 。koa-static用来托管文件,koa-mount同来为静态文件添加统一的前缀。完整的代码配置如下
1 | const Koa = require('koa'); |
其实不论你用的啥后端框架,主要思想就是设置响应头,照着上面的内容设置就可以了。