Skip to content

Commit

Permalink
feat(FEC-13946): Player core - Use shaka preload mechanism during pla…
Browse files Browse the repository at this point in the history
…ylist playback
  • Loading branch information
SivanA-Kaltura authored Jul 16, 2024
1 parent eaae9bf commit 6aa1864
Show file tree
Hide file tree
Showing 8 changed files with 683 additions and 204 deletions.
2 changes: 1 addition & 1 deletion karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ module.exports = function (config) {
client: {
mocha: {
reporter: 'html',
timeout: 5000
timeout: 50000
}
}
});
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"@babel/runtime": "^7.23.6",
"@microsoft/api-extractor": "^7.38.0",
"@playkit-js/browserslist-config": "1.0.8",
"@playkit-js/playkit-js": "canary",
"@playkit-js/playkit-js": "0.84.10-canary.0-fa40833",
"@types/chai": "^4.3.3",
"@types/mocha": "^9.1.1",
"@types/sinon": "^10.0.20",
Expand All @@ -78,7 +78,7 @@
"karma-webpack": "^5.0.0",
"mocha": "^10.0.0",
"prettier": "^3.0.3",
"shaka-player": "4.7.0",
"shaka-player": "4.8.11",
"sinon": "^14.0.0",
"sinon-chai": "^3.7.0",
"standard-version": "^6.0.1",
Expand All @@ -89,7 +89,7 @@
"webpack-dev-server": "^4.15.1"
},
"peerDependencies": {
"@playkit-js/playkit-js": "canary",
"@playkit-js/playkit-js": "0.84.10-canary.0-fa40833",
"shaka-player": "4.7.0"
},
"browserslist": [
Expand Down
57 changes: 57 additions & 0 deletions src/cache/asset-cache.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
class AssetCache {
private shakaInstance: shaka.Player | null = null;

private cacheQueue = new Set<string>();
private cache = new Map<string, any>();

public init(shakaInstance: shaka.Player): void {
this.clearCache();
this.shakaInstance = shakaInstance;
this.preloadAssets();
}

public add(assetUrl: string): void {
if (this.cache.has(assetUrl)) return;

this.cacheQueue.add(assetUrl);
this.preloadAssets();
}

public get(assetUrl: string): Promise<any> | null {
return this.cache.get(assetUrl) || null;
}

public list(): string[] {
return [...this.cache.keys()];
}

public remove(assetUrl: string, destroy: boolean = false): void {
if (this.cacheQueue.has(assetUrl)) {
this.cacheQueue.delete(assetUrl);
} else if (this.cache.has(assetUrl)) {
const assetPromise = this.cache.get(assetUrl);
if (destroy) {
assetPromise.then(preloadMgr => preloadMgr.destroy());
}
this.cache.delete(assetUrl);
}
}

private clearCache(): void {
const assetUrls = this.cache.keys();
for (const assetUrl of assetUrls) {
this.remove(assetUrl, true);
}
}

private preloadAssets(): void {
if (!this.shakaInstance) return;

for (const assetUrl of this.cacheQueue) {
this.cache.set(assetUrl, this.shakaInstance.preload(assetUrl));
this.cacheQueue.delete(assetUrl);
}
}
}

export {AssetCache};
Loading

0 comments on commit 6aa1864

Please sign in to comment.