unified-video-framework 1.4.413 → 1.4.415
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/package.json +6 -1
- package/packages/core/src/BasePlayer.d.ts +61 -0
- package/packages/core/src/BasePlayer.d.ts.map +1 -0
- package/packages/core/src/BasePlayer.js +175 -0
- package/packages/core/src/BasePlayer.js.map +1 -0
- package/packages/core/src/VideoPlayerFactory.d.ts +8 -0
- package/packages/core/src/VideoPlayerFactory.d.ts.map +1 -0
- package/packages/core/src/VideoPlayerFactory.js +95 -0
- package/packages/core/src/VideoPlayerFactory.js.map +1 -0
- package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.d.ts +18 -0
- package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.d.ts.map +1 -0
- package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.js +117 -0
- package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.js.map +1 -0
- package/packages/core/src/analytics/core/AnalyticsProvider.d.ts +18 -0
- package/packages/core/src/analytics/core/AnalyticsProvider.d.ts.map +1 -0
- package/packages/core/src/analytics/core/AnalyticsProvider.js +99 -0
- package/packages/core/src/analytics/core/AnalyticsProvider.js.map +1 -0
- package/packages/core/src/analytics/core/DynamicAnalyticsManager.d.ts +20 -0
- package/packages/core/src/analytics/core/DynamicAnalyticsManager.d.ts.map +1 -0
- package/packages/core/src/analytics/core/DynamicAnalyticsManager.js +161 -0
- package/packages/core/src/analytics/core/DynamicAnalyticsManager.js.map +1 -0
- package/packages/core/src/analytics/core/EventBatcher.d.ts +32 -0
- package/packages/core/src/analytics/core/EventBatcher.d.ts.map +1 -0
- package/packages/core/src/analytics/core/EventBatcher.js +98 -0
- package/packages/core/src/analytics/core/EventBatcher.js.map +1 -0
- package/packages/core/src/analytics/core/PlayerAnalytics.d.ts +19 -0
- package/packages/core/src/analytics/core/PlayerAnalytics.d.ts.map +1 -0
- package/packages/core/src/analytics/core/PlayerAnalytics.js +80 -0
- package/packages/core/src/analytics/core/PlayerAnalytics.js.map +1 -0
- package/packages/core/src/analytics/index.d.ts +13 -0
- package/packages/core/src/analytics/index.d.ts.map +1 -0
- package/packages/core/src/analytics/index.js +13 -0
- package/packages/core/src/analytics/index.js.map +1 -0
- package/packages/core/src/analytics/types/AnalyticsTypes.d.ts +239 -0
- package/packages/core/src/analytics/types/AnalyticsTypes.d.ts.map +1 -0
- package/packages/core/src/analytics/types/AnalyticsTypes.js +8 -0
- package/packages/core/src/analytics/types/AnalyticsTypes.js.map +1 -0
- package/packages/core/src/analytics/utils/DeviceDetection.d.ts +27 -0
- package/packages/core/src/analytics/utils/DeviceDetection.d.ts.map +1 -0
- package/packages/core/src/analytics/utils/DeviceDetection.js +184 -0
- package/packages/core/src/analytics/utils/DeviceDetection.js.map +1 -0
- package/packages/core/src/chapter-manager.d.ts +39 -0
- package/packages/core/src/chapter-manager.d.ts.map +1 -0
- package/packages/core/src/chapter-manager.js +173 -0
- package/packages/core/src/chapter-manager.js.map +1 -0
- package/packages/core/src/index.d.ts +10 -0
- package/packages/core/src/index.d.ts.map +1 -0
- package/packages/core/src/index.js +8 -0
- package/packages/core/src/index.js.map +1 -0
- package/packages/core/src/interfaces/IVideoPlayer.d.ts +229 -0
- package/packages/core/src/interfaces/IVideoPlayer.d.ts.map +1 -0
- package/packages/core/src/interfaces/IVideoPlayer.js +2 -0
- package/packages/core/src/interfaces/IVideoPlayer.js.map +1 -0
- package/packages/core/src/interfaces.d.ts +455 -0
- package/packages/core/src/interfaces.d.ts.map +1 -0
- package/packages/core/src/interfaces.js +32 -0
- package/packages/core/src/interfaces.js.map +1 -0
- package/packages/core/src/utils/EventEmitter.d.ts +14 -0
- package/packages/core/src/utils/EventEmitter.d.ts.map +1 -0
- package/packages/core/src/utils/EventEmitter.js +55 -0
- package/packages/core/src/utils/EventEmitter.js.map +1 -0
- package/packages/web/dist/drm/DRMManager.d.ts +1 -1
- package/packages/web/dist/drm/DRMManager.d.ts.map +1 -1
- package/packages/web/dist/drm/DRMManager.js +7 -7
- package/packages/web/dist/drm/DRMManager.js.map +1 -1
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +1 -1
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +1 -1
- package/packages/web/dist/drm/providers/BunnyNetProvider.js +13 -13
- package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +1 -1
- package/packages/web/dist/drm/providers/GenericProvider.d.ts +1 -1
- package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +1 -1
- package/packages/web/dist/drm/providers/GenericProvider.js +8 -6
- package/packages/web/dist/drm/providers/GenericProvider.js.map +1 -1
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +1 -1
- package/packages/web/dist/drm/systems/FairPlayDRM.js +2 -2
- package/packages/web/dist/drm/systems/FairPlayDRM.js.map +1 -1
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +1 -1
- package/packages/web/dist/drm/systems/PlayReadyDRM.js +7 -7
- package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +1 -1
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +1 -1
- package/packages/web/dist/drm/systems/WidevineDRM.js +2 -2
- package/packages/web/dist/drm/systems/WidevineDRM.js.map +1 -1
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +1 -1
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +1 -1
- package/packages/web/dist/drm/types/DRMTypes.d.ts +1 -1
- package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -1
- package/packages/web/dist/drm/types/DRMTypes.js +5 -5
- package/packages/web/dist/drm/types/DRMTypes.js.map +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.js +10 -10
- package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -1
- package/packages/web/src/drm/DRMManager.ts +214 -213
- package/packages/web/src/drm/index.ts +37 -37
- package/packages/web/src/drm/providers/BunnyNetProvider.ts +171 -170
- package/packages/web/src/drm/providers/GenericProvider.ts +151 -148
- package/packages/web/src/drm/systems/BaseDRM.ts +68 -68
- package/packages/web/src/drm/systems/FairPlayDRM.ts +306 -305
- package/packages/web/src/drm/systems/PlayReadyDRM.ts +132 -131
- package/packages/web/src/drm/systems/WidevineDRM.ts +106 -105
- package/packages/web/src/drm/types/BunnyNetTypes.ts +35 -35
- package/packages/web/src/drm/types/DRMTypes.ts +92 -91
- package/packages/web/src/drm/utils/BrowserDetector.ts +233 -232
- package/packages/web/src/drm/utils/CertificateManager.ts +86 -86
- package/packages/web/src/drm/utils/DRMErrorHandler.ts +84 -84
- package/packages/web/src/drm/utils/LicenseRequestHandler.ts +180 -180
- package/scripts/fix-imports.js +54 -8
|
@@ -1,131 +1,132 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PlayReady DRM Implementation
|
|
3
|
-
* Implements PlayReady DRM for Edge and IE
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { BaseDRM } from './BaseDRM';
|
|
7
|
-
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes';
|
|
8
|
-
import { DRMType } from '@unified-video/core';
|
|
9
|
-
import { DRMErrorHandler } from '../utils/DRMErrorHandler';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
protectionData[
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
protectionData[
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* PlayReady DRM Implementation
|
|
3
|
+
* Implements PlayReady DRM for Edge and IE
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { BaseDRM } from './BaseDRM';
|
|
7
|
+
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes';
|
|
8
|
+
import type { DRMType } from '@unified-video/core';
|
|
9
|
+
import { DRMErrorHandler } from '../utils/DRMErrorHandler';
|
|
10
|
+
import { DRMType as DRMTypeEnum } from '@unified-video/core';
|
|
11
|
+
|
|
12
|
+
export class PlayReadyDRM extends BaseDRM {
|
|
13
|
+
async initialize(): Promise<void> {
|
|
14
|
+
this.log('Initializing PlayReady DRM...');
|
|
15
|
+
|
|
16
|
+
// PlayReady is primarily configured through HLS.js and dash.js
|
|
17
|
+
// Basic EME setup for validation
|
|
18
|
+
try {
|
|
19
|
+
const keySystemAccess = await navigator.requestMediaKeySystemAccess(
|
|
20
|
+
this.getKeySystem(),
|
|
21
|
+
this.getKeySystemConfiguration()
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
this.log('PlayReady key system access granted');
|
|
25
|
+
this.mediaKeys = await keySystemAccess.createMediaKeys();
|
|
26
|
+
|
|
27
|
+
// For HLS.js and dash.js, they handle the actual EME setup
|
|
28
|
+
// We just validate that the system is available
|
|
29
|
+
|
|
30
|
+
} catch (error: any) {
|
|
31
|
+
// Try fallback key system
|
|
32
|
+
try {
|
|
33
|
+
const fallbackKeySystem = KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][1];
|
|
34
|
+
const keySystemAccess = await navigator.requestMediaKeySystemAccess(
|
|
35
|
+
fallbackKeySystem,
|
|
36
|
+
this.getKeySystemConfiguration()
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
this.log('PlayReady fallback key system access granted');
|
|
40
|
+
this.mediaKeys = await keySystemAccess.createMediaKeys();
|
|
41
|
+
} catch (fallbackError: any) {
|
|
42
|
+
this.log('PlayReady initialization failed:', fallbackError);
|
|
43
|
+
throw DRMErrorHandler.createError(
|
|
44
|
+
DRMErrorCode.KEY_SYSTEM_ACCESS_DENIED,
|
|
45
|
+
'Failed to access PlayReady DRM system',
|
|
46
|
+
true,
|
|
47
|
+
fallbackError
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.log('PlayReady DRM initialized');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
getKeySystem(): string {
|
|
56
|
+
return KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][0];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
getHLSConfig(): any {
|
|
60
|
+
this.log('Generating HLS.js config for PlayReady');
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
emeEnabled: true,
|
|
64
|
+
drmSystems: {
|
|
65
|
+
[this.getKeySystem()]: {
|
|
66
|
+
licenseUrl: this.config.licenseUrl || this.config.playreadyOptions?.licenseUrl,
|
|
67
|
+
customData: this.config.customData || this.config.playreadyOptions?.customData,
|
|
68
|
+
},
|
|
69
|
+
// Add fallback key system
|
|
70
|
+
[KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][1]]: {
|
|
71
|
+
licenseUrl: this.config.licenseUrl || this.config.playreadyOptions?.licenseUrl,
|
|
72
|
+
customData: this.config.customData || this.config.playreadyOptions?.customData,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
requestMediaKeySystemAccessFunc: navigator.requestMediaKeySystemAccess.bind(navigator),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
getDashProtectionData(): any {
|
|
80
|
+
this.log('Generating dash.js protection data for PlayReady');
|
|
81
|
+
|
|
82
|
+
const licenseUrl = this.config.licenseUrl || this.config.playreadyOptions?.licenseUrl;
|
|
83
|
+
|
|
84
|
+
const protectionData: any = {
|
|
85
|
+
[this.getKeySystem()]: {
|
|
86
|
+
serverURL: licenseUrl,
|
|
87
|
+
},
|
|
88
|
+
// Add fallback key system
|
|
89
|
+
[KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][1]]: {
|
|
90
|
+
serverURL: licenseUrl,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// Add custom headers if provided
|
|
95
|
+
if (this.config.headers && Object.keys(this.config.headers).length > 0) {
|
|
96
|
+
protectionData[this.getKeySystem()].httpRequestHeaders = this.config.headers;
|
|
97
|
+
protectionData[KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][1]].httpRequestHeaders = this.config.headers;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Add custom data if provided
|
|
101
|
+
const customData = this.config.customData || this.config.playreadyOptions?.customData;
|
|
102
|
+
if (customData) {
|
|
103
|
+
protectionData[this.getKeySystem()].customData = customData;
|
|
104
|
+
protectionData[KEY_SYSTEMS[DRMTypeEnum.PLAYREADY][1]].customData = customData;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return protectionData;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private getKeySystemConfiguration(): MediaKeySystemConfiguration[] {
|
|
111
|
+
return [{
|
|
112
|
+
initDataTypes: ['cenc'],
|
|
113
|
+
audioCapabilities: [{
|
|
114
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
115
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
116
|
+
}],
|
|
117
|
+
videoCapabilities: [
|
|
118
|
+
{
|
|
119
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
120
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
contentType: 'video/mp4; codecs="avc1.4d401f"',
|
|
124
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
distinctiveIdentifier: 'not-allowed',
|
|
128
|
+
persistentState: 'not-allowed',
|
|
129
|
+
sessionTypes: ['temporary'],
|
|
130
|
+
}];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -1,105 +1,106 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Widevine DRM Implementation
|
|
3
|
-
* Implements Widevine DRM for Chrome, Firefox, Edge, Android
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { BaseDRM } from './BaseDRM';
|
|
7
|
-
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes';
|
|
8
|
-
import { DRMType } from '@unified-video/core';
|
|
9
|
-
import { DRMErrorHandler } from '../utils/DRMErrorHandler';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Widevine DRM Implementation
|
|
3
|
+
* Implements Widevine DRM for Chrome, Firefox, Edge, Android
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { BaseDRM } from './BaseDRM';
|
|
7
|
+
import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes';
|
|
8
|
+
import type { DRMType } from '@unified-video/core';
|
|
9
|
+
import { DRMErrorHandler } from '../utils/DRMErrorHandler';
|
|
10
|
+
import { DRMType as DRMTypeEnum } from '@unified-video/core';
|
|
11
|
+
|
|
12
|
+
export class WidevineDRM extends BaseDRM {
|
|
13
|
+
async initialize(): Promise<void> {
|
|
14
|
+
this.log('Initializing Widevine DRM...');
|
|
15
|
+
|
|
16
|
+
// Widevine is primarily configured through HLS.js and dash.js
|
|
17
|
+
// Basic EME setup for validation
|
|
18
|
+
try {
|
|
19
|
+
const keySystemAccess = await navigator.requestMediaKeySystemAccess(
|
|
20
|
+
this.getKeySystem(),
|
|
21
|
+
this.getKeySystemConfiguration()
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
this.log('Widevine key system access granted');
|
|
25
|
+
this.mediaKeys = await keySystemAccess.createMediaKeys();
|
|
26
|
+
|
|
27
|
+
// For HLS.js and dash.js, they handle the actual EME setup
|
|
28
|
+
// We just validate that the system is available
|
|
29
|
+
|
|
30
|
+
} catch (error: any) {
|
|
31
|
+
this.log('Widevine initialization failed:', error);
|
|
32
|
+
throw DRMErrorHandler.createError(
|
|
33
|
+
DRMErrorCode.KEY_SYSTEM_ACCESS_DENIED,
|
|
34
|
+
'Failed to access Widevine DRM system',
|
|
35
|
+
true,
|
|
36
|
+
error
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
this.log('Widevine DRM initialized');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
getKeySystem(): string {
|
|
44
|
+
return KEY_SYSTEMS[DRMTypeEnum.WIDEVINE][0];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
getHLSConfig(): any {
|
|
48
|
+
this.log('Generating HLS.js config for Widevine');
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
emeEnabled: true,
|
|
52
|
+
drmSystems: {
|
|
53
|
+
[this.getKeySystem()]: {
|
|
54
|
+
licenseUrl: this.config.licenseUrl || this.config.widevineOptions?.licenseUrl,
|
|
55
|
+
serverCertificate: this.config.widevineOptions?.serverCertificate,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
requestMediaKeySystemAccessFunc: navigator.requestMediaKeySystemAccess.bind(navigator),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
getDashProtectionData(): any {
|
|
63
|
+
this.log('Generating dash.js protection data for Widevine');
|
|
64
|
+
|
|
65
|
+
const protectionData: any = {
|
|
66
|
+
[this.getKeySystem()]: {
|
|
67
|
+
serverURL: this.config.licenseUrl || this.config.widevineOptions?.licenseUrl,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Add custom headers if provided
|
|
72
|
+
if (this.config.headers && Object.keys(this.config.headers).length > 0) {
|
|
73
|
+
protectionData[this.getKeySystem()].httpRequestHeaders = this.config.headers;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Add server certificate if provided
|
|
77
|
+
if (this.config.widevineOptions?.serverCertificate) {
|
|
78
|
+
protectionData[this.getKeySystem()].serverCertificate = this.config.widevineOptions.serverCertificate;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return protectionData;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private getKeySystemConfiguration(): MediaKeySystemConfiguration[] {
|
|
85
|
+
return [{
|
|
86
|
+
initDataTypes: ['cenc'],
|
|
87
|
+
audioCapabilities: [{
|
|
88
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
89
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
90
|
+
}],
|
|
91
|
+
videoCapabilities: [
|
|
92
|
+
{
|
|
93
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
94
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
contentType: 'video/mp4; codecs="avc1.4d401f"',
|
|
98
|
+
robustness: 'SW_SECURE_CRYPTO',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
distinctiveIdentifier: 'not-allowed',
|
|
102
|
+
persistentState: 'not-allowed',
|
|
103
|
+
sessionTypes: ['temporary'],
|
|
104
|
+
}];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bunny.net DRM Type Definitions
|
|
3
|
-
* Type definitions specific to Bunny.net MediaCage DRM integration
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { DRMType } from '@unified-video/core';
|
|
7
|
-
|
|
8
|
-
export interface BunnyNetConfig {
|
|
9
|
-
libraryId: string;
|
|
10
|
-
videoId: string;
|
|
11
|
-
drmType?: DRMType;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface BunnyNetEndpoints {
|
|
15
|
-
widevine: string;
|
|
16
|
-
fairplayCert: string;
|
|
17
|
-
fairplayLicense: string;
|
|
18
|
-
playready: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const BUNNY_NET_BASE_URL = 'https://video.bunnycdn.com';
|
|
22
|
-
|
|
23
|
-
export const BUNNY_NET_ENDPOINTS = {
|
|
24
|
-
WIDEVINE_LICENSE: (libraryId: string, videoId: string) =>
|
|
25
|
-
`${BUNNY_NET_BASE_URL}/WidevineLicense/${libraryId}/${videoId}`,
|
|
26
|
-
|
|
27
|
-
FAIRPLAY_CERTIFICATE: (libraryId: string) =>
|
|
28
|
-
`${BUNNY_NET_BASE_URL}/FairPlay/${libraryId}/certificate`,
|
|
29
|
-
|
|
30
|
-
FAIRPLAY_LICENSE: (libraryId: string, videoId: string) =>
|
|
31
|
-
`${BUNNY_NET_BASE_URL}/FairPlay/${libraryId}/license/?videoId=${videoId}`,
|
|
32
|
-
|
|
33
|
-
PLAYREADY_LICENSE: (libraryId: string, videoId: string) =>
|
|
34
|
-
`${BUNNY_NET_BASE_URL}/PlayReadyLicense/${libraryId}/${videoId}`,
|
|
35
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Bunny.net DRM Type Definitions
|
|
3
|
+
* Type definitions specific to Bunny.net MediaCage DRM integration
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { DRMType } from '@unified-video/core';
|
|
7
|
+
|
|
8
|
+
export interface BunnyNetConfig {
|
|
9
|
+
libraryId: string;
|
|
10
|
+
videoId: string;
|
|
11
|
+
drmType?: DRMType;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface BunnyNetEndpoints {
|
|
15
|
+
widevine: string;
|
|
16
|
+
fairplayCert: string;
|
|
17
|
+
fairplayLicense: string;
|
|
18
|
+
playready: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const BUNNY_NET_BASE_URL = 'https://video.bunnycdn.com';
|
|
22
|
+
|
|
23
|
+
export const BUNNY_NET_ENDPOINTS = {
|
|
24
|
+
WIDEVINE_LICENSE: (libraryId: string, videoId: string) =>
|
|
25
|
+
`${BUNNY_NET_BASE_URL}/WidevineLicense/${libraryId}/${videoId}`,
|
|
26
|
+
|
|
27
|
+
FAIRPLAY_CERTIFICATE: (libraryId: string) =>
|
|
28
|
+
`${BUNNY_NET_BASE_URL}/FairPlay/${libraryId}/certificate`,
|
|
29
|
+
|
|
30
|
+
FAIRPLAY_LICENSE: (libraryId: string, videoId: string) =>
|
|
31
|
+
`${BUNNY_NET_BASE_URL}/FairPlay/${libraryId}/license/?videoId=${videoId}`,
|
|
32
|
+
|
|
33
|
+
PLAYREADY_LICENSE: (libraryId: string, videoId: string) =>
|
|
34
|
+
`${BUNNY_NET_BASE_URL}/PlayReadyLicense/${libraryId}/${videoId}`,
|
|
35
|
+
};
|