unified-video-framework 1.4.537 → 1.4.538
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/package.json +1 -1
- package/packages/core/dist/version.d.ts +1 -1
- package/packages/core/dist/version.js +1 -1
- package/packages/core/src/version.ts +1 -1
- package/packages/web/dist/WebPlayer.js +1 -1
- package/packages/web/dist/drm/DRMManager.d.ts +15 -0
- package/packages/web/dist/drm/DRMManager.d.ts.map +1 -0
- package/packages/web/dist/drm/DRMManager.js +66 -0
- package/packages/web/dist/drm/DRMManager.js.map +1 -0
- package/packages/web/dist/drm/index.d.ts +15 -0
- package/packages/web/dist/drm/index.d.ts.map +1 -0
- package/packages/web/dist/drm/index.js +13 -0
- package/packages/web/dist/drm/index.js.map +1 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +6 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +1 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.js +13 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +1 -0
- package/packages/web/dist/drm/providers/GenericProvider.d.ts +10 -0
- package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +1 -0
- package/packages/web/dist/drm/providers/GenericProvider.js +11 -0
- package/packages/web/dist/drm/providers/GenericProvider.js.map +1 -0
- package/packages/web/dist/drm/systems/BaseDRM.d.ts +15 -0
- package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/BaseDRM.js +24 -0
- package/packages/web/dist/drm/systems/BaseDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +10 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.js +46 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +9 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.js +39 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts +10 -0
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/WidevineDRM.js +63 -0
- package/packages/web/dist/drm/systems/WidevineDRM.js.map +1 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +16 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +1 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.js +6 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.js.map +1 -0
- package/packages/web/dist/drm/types/DRMTypes.d.ts +55 -0
- package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -0
- package/packages/web/dist/drm/types/DRMTypes.js +17 -0
- package/packages/web/dist/drm/types/DRMTypes.js.map +1 -0
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts +6 -0
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/BrowserDetector.js +35 -0
- package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -0
- package/packages/web/dist/drm/utils/CertificateManager.d.ts +6 -0
- package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/CertificateManager.js +34 -0
- package/packages/web/dist/drm/utils/CertificateManager.js.map +1 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +7 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.js +36 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +1 -0
- package/packages/web/src/drm/DRMManager.ts +81 -0
- package/packages/web/src/drm/index.ts +14 -0
- package/packages/web/src/drm/providers/BunnyNetProvider.ts +14 -0
- package/packages/web/src/drm/providers/GenericProvider.ts +17 -0
- package/packages/web/src/drm/systems/BaseDRM.ts +34 -0
- package/packages/web/src/drm/systems/FairPlayDRM.ts +46 -0
- package/packages/web/src/drm/systems/PlayReadyDRM.ts +42 -0
- package/packages/web/src/drm/systems/WidevineDRM.ts +67 -0
- package/packages/web/src/drm/types/BunnyNetTypes.ts +18 -0
- package/packages/web/src/drm/types/DRMTypes.ts +61 -0
- package/packages/web/src/drm/utils/BrowserDetector.ts +35 -0
- package/packages/web/src/drm/utils/CertificateManager.ts +39 -0
- package/packages/web/src/drm/utils/DRMErrorHandler.ts +34 -0
- package/packages/web/src/drm.d.ts +0 -20
package/README.md
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
Built and maintained by **Flicknexs**, trusted by teams building video platforms across Web, Mobile Streaming Devices.
|
|
6
6
|
|
|
7
|
-
🔗 **Official Website**: https://flicknexs.com
|
|
8
|
-
📘 **Docs & Examples**: https://flicknexs.com/video-player-sdk?utm_source=npm&utm_medium=referral&utm_campaign=unified_video_framework
|
|
7
|
+
🔗 **Official Website**: https://flicknexs.com<br>
|
|
8
|
+
📘 **Docs & Examples**: https://flicknexs.com/video-player-sdk?utm_source=npm&utm_medium=referral&utm_campaign=unified_video_framework<br>
|
|
9
9
|
💻 **GitHub Repository**: https://github.com/flicknexs/unified-video-framework
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
## Why Unified Video Framework?
|
|
14
14
|
|
|
15
|
-
Most video teams struggle with maintaining **separate players for Web, Mobile
|
|
15
|
+
Most video teams struggle with maintaining **separate players for Web, Mobile**. Flicknexs Unified Video Framework eliminates this complexity by providing **one SDK that works everywhere**.
|
|
16
16
|
|
|
17
17
|
### ✅ Supported Platforms
|
|
18
18
|
- **Web** (all modern browsers)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unified-video-framework",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.538",
|
|
4
4
|
"description": "Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more",
|
|
5
5
|
"main": "packages/core/dist/index.js",
|
|
6
6
|
"types": "packages/core/dist/index.d.ts",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.4.
|
|
1
|
+
export declare const VERSION = "1.4.538";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '1.4.
|
|
1
|
+
export const VERSION = '1.4.538';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '1.4.
|
|
1
|
+
export const VERSION = '1.4.538';
|
|
@@ -3,7 +3,7 @@ import { ChapterManager as CoreChapterManager } from '../../core/dist/index.js';
|
|
|
3
3
|
import { ChapterManager } from './chapters/ChapterManager.js';
|
|
4
4
|
import YouTubeExtractor from './utils/YouTubeExtractor.js';
|
|
5
5
|
import { SrtConverter } from './utils/SrtConverter.js';
|
|
6
|
-
import { DRMManager, DRMErrorHandler } from './drm.js';
|
|
6
|
+
import { DRMManager, DRMErrorHandler } from './drm/index.js';
|
|
7
7
|
export class WebPlayer extends BasePlayer {
|
|
8
8
|
constructor() {
|
|
9
9
|
super(...arguments);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ExtendedDRMConfig, DRMInitResult } from './types/DRMTypes';
|
|
2
|
+
export declare class DRMManager {
|
|
3
|
+
private video;
|
|
4
|
+
private config;
|
|
5
|
+
private debug;
|
|
6
|
+
private activeDRM;
|
|
7
|
+
constructor(video: HTMLVideoElement, config: ExtendedDRMConfig, debug?: boolean);
|
|
8
|
+
initialize(): Promise<DRMInitResult>;
|
|
9
|
+
private initSpecific;
|
|
10
|
+
getHLSConfig(): Record<string, any>;
|
|
11
|
+
getDashProtectionData(): Record<string, any>;
|
|
12
|
+
destroy(): Promise<void>;
|
|
13
|
+
private log;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=DRMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DRMManager.d.ts","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AAQlF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAwB;gBAE7B,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,GAAE,OAAe;IAMhF,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;YA2B5B,YAAY;IAe1B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAInC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAItC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,GAAG;CAGZ"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DRMErrorCode } from './types/DRMTypes.js';
|
|
2
|
+
import { DRMErrorHandler } from './utils/DRMErrorHandler.js';
|
|
3
|
+
import { BrowserDetector } from './utils/BrowserDetector.js';
|
|
4
|
+
import { WidevineDRM } from './systems/WidevineDRM.js';
|
|
5
|
+
import { FairPlayDRM } from './systems/FairPlayDRM.js';
|
|
6
|
+
import { PlayReadyDRM } from './systems/PlayReadyDRM.js';
|
|
7
|
+
export class DRMManager {
|
|
8
|
+
constructor(video, config, debug = false) {
|
|
9
|
+
this.activeDRM = null;
|
|
10
|
+
this.video = video;
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.debug = debug;
|
|
13
|
+
}
|
|
14
|
+
async initialize() {
|
|
15
|
+
const type = this.config.type || 'auto';
|
|
16
|
+
if (type !== 'auto') {
|
|
17
|
+
return this.initSpecific(type);
|
|
18
|
+
}
|
|
19
|
+
const caps = await BrowserDetector.detectCapabilities();
|
|
20
|
+
this.log('DRM capabilities:', caps);
|
|
21
|
+
if (BrowserDetector.isSafari() && caps.fairplay && this.config.certificateUrl) {
|
|
22
|
+
return this.initSpecific('fairplay');
|
|
23
|
+
}
|
|
24
|
+
if (caps.widevine) {
|
|
25
|
+
return this.initSpecific('widevine');
|
|
26
|
+
}
|
|
27
|
+
if (caps.playready) {
|
|
28
|
+
return this.initSpecific('playready');
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: DRMErrorHandler.createError(DRMErrorCode.UNSUPPORTED, 'No supported DRM system found in this browser'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async initSpecific(type) {
|
|
36
|
+
switch (type) {
|
|
37
|
+
case 'widevine':
|
|
38
|
+
this.activeDRM = new WidevineDRM(this.video, this.config, this.debug);
|
|
39
|
+
break;
|
|
40
|
+
case 'fairplay':
|
|
41
|
+
this.activeDRM = new FairPlayDRM(this.video, this.config, this.debug);
|
|
42
|
+
break;
|
|
43
|
+
case 'playready':
|
|
44
|
+
this.activeDRM = new PlayReadyDRM(this.video, this.config, this.debug);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
return this.activeDRM.initialize();
|
|
48
|
+
}
|
|
49
|
+
getHLSConfig() {
|
|
50
|
+
return this.activeDRM?.getHLSConfig() || {};
|
|
51
|
+
}
|
|
52
|
+
getDashProtectionData() {
|
|
53
|
+
return this.activeDRM?.getDashProtectionData() || {};
|
|
54
|
+
}
|
|
55
|
+
async destroy() {
|
|
56
|
+
if (this.activeDRM) {
|
|
57
|
+
await this.activeDRM.destroy();
|
|
58
|
+
this.activeDRM = null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
log(...args) {
|
|
62
|
+
if (this.debug)
|
|
63
|
+
console.log('[DRMManager]', ...args);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=DRMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DRMManager.js","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { DRMManager } from './DRMManager';
|
|
2
|
+
export { BunnyNetProvider } from './providers/BunnyNetProvider';
|
|
3
|
+
export { GenericProvider } from './providers/GenericProvider';
|
|
4
|
+
export type { ExtendedDRMConfig, DRMCapabilities, LicenseRequest, LicenseResponse, DRMInitResult, DRMError } from './types/DRMTypes';
|
|
5
|
+
export { DRMErrorCode, KEY_SYSTEMS } from './types/DRMTypes';
|
|
6
|
+
export type { BunnyNetConfig, BunnyNetEndpoints } from './types/BunnyNetTypes';
|
|
7
|
+
export { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from './types/BunnyNetTypes';
|
|
8
|
+
export { BrowserDetector } from './utils/BrowserDetector';
|
|
9
|
+
export { DRMErrorHandler } from './utils/DRMErrorHandler';
|
|
10
|
+
export { CertificateManager } from './utils/CertificateManager';
|
|
11
|
+
export { BaseDRM } from './systems/BaseDRM';
|
|
12
|
+
export { WidevineDRM } from './systems/WidevineDRM';
|
|
13
|
+
export { FairPlayDRM } from './systems/FairPlayDRM';
|
|
14
|
+
export { PlayReadyDRM } from './systems/PlayReadyDRM';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { DRMManager } from './DRMManager.js';
|
|
2
|
+
export { BunnyNetProvider } from './providers/BunnyNetProvider.js';
|
|
3
|
+
export { GenericProvider } from './providers/GenericProvider.js';
|
|
4
|
+
export { DRMErrorCode, KEY_SYSTEMS } from './types/DRMTypes.js';
|
|
5
|
+
export { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from './types/BunnyNetTypes.js';
|
|
6
|
+
export { BrowserDetector } from './utils/BrowserDetector.js';
|
|
7
|
+
export { DRMErrorHandler } from './utils/DRMErrorHandler.js';
|
|
8
|
+
export { CertificateManager } from './utils/CertificateManager.js';
|
|
9
|
+
export { BaseDRM } from './systems/BaseDRM.js';
|
|
10
|
+
export { WidevineDRM } from './systems/WidevineDRM.js';
|
|
11
|
+
export { FairPlayDRM } from './systems/FairPlayDRM.js';
|
|
12
|
+
export { PlayReadyDRM } from './systems/PlayReadyDRM.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BunnyNetConfig } from '../types/BunnyNetTypes';
|
|
2
|
+
import { ExtendedDRMConfig } from '../types/DRMTypes';
|
|
3
|
+
export declare class BunnyNetProvider {
|
|
4
|
+
static createConfig(bunnyConfig: BunnyNetConfig): ExtendedDRMConfig;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=BunnyNetProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BunnyNetProvider.d.ts","sourceRoot":"","sources":["../../../src/drm/providers/BunnyNetProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB;CASpE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from '../types/BunnyNetTypes.js';
|
|
2
|
+
export class BunnyNetProvider {
|
|
3
|
+
static createConfig(bunnyConfig) {
|
|
4
|
+
const base = `${BUNNY_NET_BASE_URL}/${bunnyConfig.libraryId}/${bunnyConfig.videoId}`;
|
|
5
|
+
return {
|
|
6
|
+
type: 'fairplay',
|
|
7
|
+
licenseUrl: `${base}${BUNNY_NET_ENDPOINTS.license}`,
|
|
8
|
+
certificateUrl: `${base}${BUNNY_NET_ENDPOINTS.certificate}`,
|
|
9
|
+
headers: bunnyConfig.token ? { 'AccessKey': bunnyConfig.token } : undefined,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=BunnyNetProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BunnyNetProvider.js","sourceRoot":"","sources":["../../../src/drm/providers/BunnyNetProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAkB,MAAM,wBAAwB,CAAC;AAGjG,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,YAAY,CAAC,WAA2B;QAC7C,MAAM,IAAI,GAAG,GAAG,kBAAkB,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACrF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,GAAG,IAAI,GAAG,mBAAmB,CAAC,OAAO,EAAE;YACnD,cAAc,EAAE,GAAG,IAAI,GAAG,mBAAmB,CAAC,WAAW,EAAE;YAC3D,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExtendedDRMConfig } from '../types/DRMTypes';
|
|
2
|
+
export declare class GenericProvider {
|
|
3
|
+
static createConfig(config: {
|
|
4
|
+
licenseUrl: string;
|
|
5
|
+
certificateUrl?: string;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
type?: ExtendedDRMConfig['type'];
|
|
8
|
+
}): ExtendedDRMConfig;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=GenericProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericProvider.d.ts","sourceRoot":"","sources":["../../../src/drm/providers/GenericProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,eAAe;IAC1B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAClC,GAAG,iBAAiB;CAQtB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class GenericProvider {
|
|
2
|
+
static createConfig(config) {
|
|
3
|
+
return {
|
|
4
|
+
type: config.type || 'auto',
|
|
5
|
+
licenseUrl: config.licenseUrl,
|
|
6
|
+
certificateUrl: config.certificateUrl,
|
|
7
|
+
headers: config.headers,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=GenericProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericProvider.js","sourceRoot":"","sources":["../../../src/drm/providers/GenericProvider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,YAAY,CAAC,MAKnB;QACC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ExtendedDRMConfig, DRMInitResult } from '../types/DRMTypes';
|
|
2
|
+
export declare abstract class BaseDRM {
|
|
3
|
+
protected video: HTMLVideoElement;
|
|
4
|
+
protected config: ExtendedDRMConfig;
|
|
5
|
+
protected debug: boolean;
|
|
6
|
+
constructor(video: HTMLVideoElement, config: ExtendedDRMConfig, debug?: boolean);
|
|
7
|
+
abstract initialize(): Promise<DRMInitResult>;
|
|
8
|
+
abstract destroy(): Promise<void>;
|
|
9
|
+
abstract getKeySystem(): string;
|
|
10
|
+
getHLSConfig(): Record<string, any>;
|
|
11
|
+
getDashProtectionData(): Record<string, any>;
|
|
12
|
+
protected log(...args: any[]): void;
|
|
13
|
+
protected requestLicense(url: string, body: ArrayBuffer, headers?: Record<string, string>): Promise<ArrayBuffer>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=BaseDRM.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/BaseDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErE,8BAAsB,OAAO;IAC3B,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAClC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEb,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,GAAE,OAAe;IAMtF,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAC7C,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAE/B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAE5C,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;cAInB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CASvH"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class BaseDRM {
|
|
2
|
+
constructor(video, config, debug = false) {
|
|
3
|
+
this.video = video;
|
|
4
|
+
this.config = config;
|
|
5
|
+
this.debug = debug;
|
|
6
|
+
}
|
|
7
|
+
getHLSConfig() { return {}; }
|
|
8
|
+
getDashProtectionData() { return {}; }
|
|
9
|
+
log(...args) {
|
|
10
|
+
if (this.debug)
|
|
11
|
+
console.log('[DRM]', ...args);
|
|
12
|
+
}
|
|
13
|
+
async requestLicense(url, body, headers) {
|
|
14
|
+
const resp = await fetch(url, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: { 'Content-Type': 'application/octet-stream', ...(headers || {}) },
|
|
17
|
+
body,
|
|
18
|
+
});
|
|
19
|
+
if (!resp.ok)
|
|
20
|
+
throw new Error(`License request failed: HTTP ${resp.status}`);
|
|
21
|
+
return resp.arrayBuffer();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=BaseDRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/BaseDRM.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,OAAO;IAK3B,YAAY,KAAuB,EAAE,MAAyB,EAAE,QAAiB,KAAK;QACpF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAMD,YAAY,KAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,qBAAqB,KAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;IAEjD,GAAG,CAAC,GAAG,IAAW;QAC1B,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,IAAiB,EAAE,OAAgC;QAC7F,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAC3E,IAAI;SACL,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM';
|
|
2
|
+
import { DRMInitResult } from '../types/DRMTypes';
|
|
3
|
+
export declare class FairPlayDRM extends BaseDRM {
|
|
4
|
+
private certManager;
|
|
5
|
+
getKeySystem(): string;
|
|
6
|
+
initialize(): Promise<DRMInitResult>;
|
|
7
|
+
getHLSConfig(): Record<string, any>;
|
|
8
|
+
destroy(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=FairPlayDRM.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FairPlayDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/FairPlayDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAI7E,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAO,CAAC,WAAW,CAA4B;IAE/C,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAmB1C,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAY7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM.js';
|
|
2
|
+
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
|
|
3
|
+
import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
|
|
4
|
+
import { CertificateManager } from '../utils/CertificateManager.js';
|
|
5
|
+
export class FairPlayDRM extends BaseDRM {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.certManager = new CertificateManager();
|
|
9
|
+
}
|
|
10
|
+
getKeySystem() { return KEY_SYSTEMS.FAIRPLAY; }
|
|
11
|
+
async initialize() {
|
|
12
|
+
try {
|
|
13
|
+
if (!this.config.certificateUrl) {
|
|
14
|
+
return {
|
|
15
|
+
success: false,
|
|
16
|
+
error: DRMErrorHandler.createError(DRMErrorCode.CERTIFICATE_FETCH_FAILED, 'FairPlay requires certificateUrl'),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const cert = await this.certManager.fetchCertificate(this.config.certificateUrl, this.config.headers);
|
|
20
|
+
this.log('FairPlay certificate fetched, size:', cert.byteLength);
|
|
21
|
+
return { success: true, drmType: 'fairplay', keySystem: KEY_SYSTEMS.FAIRPLAY };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `FairPlay init failed: ${error.message}`, error),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getHLSConfig() {
|
|
31
|
+
return {
|
|
32
|
+
emeEnabled: true,
|
|
33
|
+
drmSystems: {
|
|
34
|
+
'com.apple.fps.1_0': {
|
|
35
|
+
licenseUrl: this.config.licenseUrl,
|
|
36
|
+
serverCertificateUrl: this.config.certificateUrl,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async destroy() {
|
|
42
|
+
this.certManager.clear();
|
|
43
|
+
this.log('FairPlay DRM destroyed');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=FairPlayDRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FairPlayDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/FairPlayDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,OAAO,WAAY,SAAQ,OAAO;IAAxC;;QACU,gBAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAuCjD,CAAC;IArCC,YAAY,KAAa,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAChC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,wBAAwB,EAAE,kCAAkC,CAAC;iBAC9G,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtG,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,mBAAmB,EAAE;oBACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAClC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;iBACjD;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM';
|
|
2
|
+
import { DRMInitResult } from '../types/DRMTypes';
|
|
3
|
+
export declare class PlayReadyDRM extends BaseDRM {
|
|
4
|
+
getKeySystem(): string;
|
|
5
|
+
initialize(): Promise<DRMInitResult>;
|
|
6
|
+
getDashProtectionData(): Record<string, any>;
|
|
7
|
+
destroy(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=PlayReadyDRM.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayReadyDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/PlayReadyDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAG7E,qBAAa,YAAa,SAAQ,OAAO;IACvC,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAqB1C,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM.js';
|
|
2
|
+
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
|
|
3
|
+
import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
|
|
4
|
+
export class PlayReadyDRM extends BaseDRM {
|
|
5
|
+
getKeySystem() { return KEY_SYSTEMS.PLAYREADY; }
|
|
6
|
+
async initialize() {
|
|
7
|
+
try {
|
|
8
|
+
const config = [{
|
|
9
|
+
initDataTypes: ['cenc'],
|
|
10
|
+
videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }],
|
|
11
|
+
audioCapabilities: [{ contentType: 'audio/mp4; codecs="mp4a.40.2"' }],
|
|
12
|
+
persistentState: this.config.persistentState || 'optional',
|
|
13
|
+
distinctiveIdentifier: this.config.distinctiveIdentifier || 'optional',
|
|
14
|
+
}];
|
|
15
|
+
await navigator.requestMediaKeySystemAccess(KEY_SYSTEMS.PLAYREADY, config);
|
|
16
|
+
this.log('PlayReady access granted');
|
|
17
|
+
return { success: true, drmType: 'playready', keySystem: KEY_SYSTEMS.PLAYREADY };
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return {
|
|
21
|
+
success: false,
|
|
22
|
+
error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `PlayReady init failed: ${error.message}`, error),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
getDashProtectionData() {
|
|
27
|
+
return {
|
|
28
|
+
[KEY_SYSTEMS.PLAYREADY]: {
|
|
29
|
+
serverURL: this.config.licenseUrl,
|
|
30
|
+
httpRequestHeaders: this.config.headers || {},
|
|
31
|
+
withCredentials: this.config.withCredentials || false,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async destroy() {
|
|
36
|
+
this.log('PlayReady DRM destroyed');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=PlayReadyDRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayReadyDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/PlayReadyDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,YAAY,KAAa,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAkC,CAAC;oBAC7C,aAAa,EAAE,CAAC,MAAM,CAAC;oBACvB,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;oBACvE,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;oBACrE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,UAAU;oBAC1D,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,UAAU;iBACvE,CAAC,CAAC;YAEH,MAAM,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;QACnF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBACjC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK;aACtD;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM';
|
|
2
|
+
import { DRMInitResult } from '../types/DRMTypes';
|
|
3
|
+
export declare class WidevineDRM extends BaseDRM {
|
|
4
|
+
getKeySystem(): string;
|
|
5
|
+
initialize(): Promise<DRMInitResult>;
|
|
6
|
+
getHLSConfig(): Record<string, any>;
|
|
7
|
+
getDashProtectionData(): Record<string, any>;
|
|
8
|
+
destroy(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=WidevineDRM.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidevineDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/WidevineDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAG7E,qBAAa,WAAY,SAAQ,OAAO;IACtC,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IA2B1C,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmBnC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { BaseDRM } from './BaseDRM.js';
|
|
2
|
+
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
|
|
3
|
+
import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
|
|
4
|
+
export class WidevineDRM extends BaseDRM {
|
|
5
|
+
getKeySystem() { return KEY_SYSTEMS.WIDEVINE; }
|
|
6
|
+
async initialize() {
|
|
7
|
+
try {
|
|
8
|
+
const config = [{
|
|
9
|
+
initDataTypes: ['cenc'],
|
|
10
|
+
videoCapabilities: [{
|
|
11
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
12
|
+
robustness: this.config.videoRobustness || 'SW_SECURE_CRYPTO',
|
|
13
|
+
}],
|
|
14
|
+
audioCapabilities: [{
|
|
15
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
16
|
+
robustness: this.config.audioRobustness || 'SW_SECURE_CRYPTO',
|
|
17
|
+
}],
|
|
18
|
+
persistentState: this.config.persistentState || 'optional',
|
|
19
|
+
distinctiveIdentifier: this.config.distinctiveIdentifier || 'optional',
|
|
20
|
+
}];
|
|
21
|
+
await navigator.requestMediaKeySystemAccess(KEY_SYSTEMS.WIDEVINE, config);
|
|
22
|
+
this.log('Widevine access granted');
|
|
23
|
+
return { success: true, drmType: 'widevine', keySystem: KEY_SYSTEMS.WIDEVINE };
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `Widevine init failed: ${error.message}`, error),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
getHLSConfig() {
|
|
33
|
+
return {
|
|
34
|
+
emeEnabled: true,
|
|
35
|
+
widevineLicenseUrl: this.config.licenseUrl,
|
|
36
|
+
drmSystems: {
|
|
37
|
+
'com.widevine.alpha': {
|
|
38
|
+
licenseUrl: this.config.licenseUrl,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
licenseXhrSetup: this.config.headers
|
|
42
|
+
? (xhr) => {
|
|
43
|
+
for (const [k, v] of Object.entries(this.config.headers)) {
|
|
44
|
+
xhr.setRequestHeader(k, v);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
: undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
getDashProtectionData() {
|
|
51
|
+
return {
|
|
52
|
+
[KEY_SYSTEMS.WIDEVINE]: {
|
|
53
|
+
serverURL: this.config.licenseUrl,
|
|
54
|
+
httpRequestHeaders: this.config.headers || {},
|
|
55
|
+
withCredentials: this.config.withCredentials || false,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async destroy() {
|
|
60
|
+
this.log('Widevine DRM destroyed');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=WidevineDRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidevineDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/WidevineDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,KAAa,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAkC,CAAC;oBAC7C,aAAa,EAAE,CAAC,MAAM,CAAC;oBACvB,iBAAiB,EAAE,CAAC;4BAClB,WAAW,EAAE,iCAAiC;4BAC9C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,kBAAkB;yBAC9D,CAAC;oBACF,iBAAiB,EAAE,CAAC;4BAClB,WAAW,EAAE,+BAA+B;4BAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,kBAAkB;yBAC9D,CAAC;oBACF,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,UAAU;oBAC1D,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,UAAU;iBACvE,CAAC,CAAC;YAEH,MAAM,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAC1C,UAAU,EAAE;gBACV,oBAAoB,EAAE;oBACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;iBACnC;aACF;YACD,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAClC,CAAC,CAAC,CAAC,GAAmB,EAAE,EAAE;oBACtB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAC,EAAE,CAAC;wBAC1D,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBACtB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBACjC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK;aACtD;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface BunnyNetConfig {
|
|
2
|
+
libraryId: string;
|
|
3
|
+
videoId: string;
|
|
4
|
+
token?: string;
|
|
5
|
+
expirationTime?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface BunnyNetEndpoints {
|
|
8
|
+
license: string;
|
|
9
|
+
certificate: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const BUNNY_NET_BASE_URL = "https://video.bunnycdn.com";
|
|
12
|
+
export declare const BUNNY_NET_ENDPOINTS: {
|
|
13
|
+
readonly license: "/FairPlay/License";
|
|
14
|
+
readonly certificate: "/FairPlay/Certificate";
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=BunnyNetTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BunnyNetTypes.d.ts","sourceRoot":"","sources":["../../../src/drm/types/BunnyNetTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,+BAA+B,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BunnyNetTypes.js","sourceRoot":"","sources":["../../../src/drm/types/BunnyNetTypes.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,uBAAuB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare enum DRMErrorCode {
|
|
2
|
+
UNSUPPORTED = "DRM_UNSUPPORTED",
|
|
3
|
+
LICENSE_REQUEST_FAILED = "DRM_LICENSE_REQUEST_FAILED",
|
|
4
|
+
LICENSE_RESPONSE_INVALID = "DRM_LICENSE_RESPONSE_INVALID",
|
|
5
|
+
CERTIFICATE_FETCH_FAILED = "DRM_CERTIFICATE_FETCH_FAILED",
|
|
6
|
+
KEY_SESSION_ERROR = "DRM_KEY_SESSION_ERROR",
|
|
7
|
+
OUTPUT_RESTRICTED = "DRM_OUTPUT_RESTRICTED",
|
|
8
|
+
INITIALIZATION_FAILED = "DRM_INITIALIZATION_FAILED",
|
|
9
|
+
UNKNOWN = "DRM_UNKNOWN"
|
|
10
|
+
}
|
|
11
|
+
export declare const KEY_SYSTEMS: {
|
|
12
|
+
readonly WIDEVINE: "com.widevine.alpha";
|
|
13
|
+
readonly FAIRPLAY: "com.apple.fps.1_0";
|
|
14
|
+
readonly PLAYREADY: "com.microsoft.playready";
|
|
15
|
+
};
|
|
16
|
+
export interface ExtendedDRMConfig {
|
|
17
|
+
type?: 'widevine' | 'fairplay' | 'playready' | 'auto';
|
|
18
|
+
licenseUrl: string;
|
|
19
|
+
certificateUrl?: string;
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
withCredentials?: boolean;
|
|
22
|
+
serverCertificate?: Uint8Array;
|
|
23
|
+
videoRobustness?: string;
|
|
24
|
+
audioRobustness?: string;
|
|
25
|
+
persistentState?: MediaKeysRequirement;
|
|
26
|
+
distinctiveIdentifier?: MediaKeysRequirement;
|
|
27
|
+
}
|
|
28
|
+
export interface DRMCapabilities {
|
|
29
|
+
widevine: boolean;
|
|
30
|
+
fairplay: boolean;
|
|
31
|
+
playready: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface LicenseRequest {
|
|
34
|
+
url: string;
|
|
35
|
+
method: string;
|
|
36
|
+
headers: Record<string, string>;
|
|
37
|
+
body: ArrayBuffer;
|
|
38
|
+
}
|
|
39
|
+
export interface LicenseResponse {
|
|
40
|
+
status: number;
|
|
41
|
+
data: ArrayBuffer;
|
|
42
|
+
headers: Record<string, string>;
|
|
43
|
+
}
|
|
44
|
+
export interface DRMInitResult {
|
|
45
|
+
success: boolean;
|
|
46
|
+
drmType?: string;
|
|
47
|
+
keySystem?: string;
|
|
48
|
+
error?: DRMError;
|
|
49
|
+
}
|
|
50
|
+
export interface DRMError {
|
|
51
|
+
code: DRMErrorCode | string;
|
|
52
|
+
message: string;
|
|
53
|
+
details?: any;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=DRMTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DRMTypes.d.ts","sourceRoot":"","sources":["../../../src/drm/types/DRMTypes.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACtB,WAAW,oBAAoB;IAC/B,sBAAsB,+BAA+B;IACrD,wBAAwB,iCAAiC;IACzD,wBAAwB,iCAAiC;IACzD,iBAAiB,0BAA0B;IAC3C,iBAAiB,0BAA0B;IAC3C,qBAAqB,8BAA8B;IACnD,OAAO,gBAAgB;CACxB;AAED,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,qBAAqB,CAAC,EAAE,oBAAoB,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf"}
|