diff --git a/.eslintignore b/.eslintignore index dadc716f..2e7d2a0c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,3 @@ **/dist -**/es +**/esm **/cjs diff --git a/.prettierignore b/.prettierignore index b35bbe9c..4b638db9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,5 +3,5 @@ package-lock.json lerna.json CHANGELOG.md **/dist -**/es +**/esm **/cjs diff --git a/package.json b/package.json index 450b3c6a..9f5db072 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "build": "yarn build:lib && yarn build:standalone", "build:watch": "lerna run build:watch --stream --parallel", "release": "yarn build && lerna publish", - "start": "yarn workspace example run start" + "start": "npm run build:watch & yarn workspace example run start" }, "devDependencies": { "@babel/cli": "^7.1.5", diff --git a/packages/griffith-mp4/src/mse/controller.js b/packages/griffith-mp4/src/mse/controller.js index ce1ac4e3..73a7b55a 100644 --- a/packages/griffith-mp4/src/mse/controller.js +++ b/packages/griffith-mp4/src/mse/controller.js @@ -83,11 +83,33 @@ export default class MSE { }) } + hasBufferedCache = (time = 0) => { + const buffered = this.video.buffered + + if (buffered) { + for (let i = 0; i < buffered.length; i++) { + if (time >= buffered.start(i) && time <= buffered.end(i)) { + return true + } + } + } + + return false + } + seek = time => { FragmentFetch.clear() const [start, end] = this.mp4Probe.getFragmentPosition(time) this.mseUpdating = true + + // 对于已经请求的数据不再重复请求 + // No need to repeat request video data + const timeRange = this.mp4Probe.timeRange || [] + if (this.hasBufferedCache(timeRange[1])) { + return + } + this.loadData(start, end).then(mdatBuffer => { if (!mdatBuffer) { return