unified-video-framework 1.4.418 → 1.4.419
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 +1 -1
- package/packages/web/dist/drm/DRMManager.d.ts.map +1 -1
- package/packages/web/dist/drm/DRMManager.js +2 -1
- package/packages/web/dist/drm/DRMManager.js.map +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.js +61 -18
- package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -1
- package/packages/web/src/drm/DRMManager.ts +6 -5
- package/packages/web/src/drm/utils/BrowserDetector.ts +75 -27
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unified-video-framework",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.419",
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DRMManager.d.ts","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAqB,aAAa,EAA2C,MAAM,kBAAkB,CAAC;AAS7G,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,KAAK,CAAkB;gBAEnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAE,OAAe;IAU/E,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DRMManager.d.ts","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAqB,aAAa,EAA2C,MAAM,kBAAkB,CAAC;AAS7G,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,KAAK,CAAkB;gBAEnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAE,OAAe;IAU/E,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IA0D1C,YAAY,IAAI,GAAG;IAWnB,qBAAqB,IAAI,GAAG;IAWtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,GAAG;CAKZ"}
|
|
@@ -36,9 +36,10 @@ export class DRMManager {
|
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
38
|
this.log('DRM initialization failed:', error);
|
|
39
|
+
const capabilities = await this.browserDetector.detectCapabilities();
|
|
39
40
|
const drmError = error.code && error.code.startsWith('DRM_')
|
|
40
41
|
? error
|
|
41
|
-
: DRMErrorHandler.createError(DRMErrorCode.CONFIGURATION_ERROR, error.message || 'DRM initialization failed', true, error);
|
|
42
|
+
: DRMErrorHandler.createError(DRMErrorCode.CONFIGURATION_ERROR, error.message || 'DRM initialization failed', true, { ...error, capabilities });
|
|
42
43
|
return {
|
|
43
44
|
success: false,
|
|
44
45
|
drmType: this.config.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DRMManager.js","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA8C,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,UAAU;IAOrB,YAAY,YAA8B,EAAE,MAAiB,EAAE,QAAiB,KAAK;QAJ7E,cAAS,GAAmB,IAAI,CAAC;QAEjC,UAAK,GAAY,KAAK,CAAC;QAG7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IACvD,CAAC;IAKD,KAAK,CAAC,UAAU;QACd,IAAI;YACF,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAGvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YACrE,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;YAGpD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;gBAC1D,MAAM,eAAe,CAAC,WAAW,CAC/B,YAAY,CAAC,mBAAmB,EAChC,oCAAoC,WAAW,gDAAgD,EAC/F,IAAI,EACJ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CACvC,CAAC;aACH;YAED,IAAI,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;YAG1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAG/C,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAElC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;aACzC,CAAC;SACH;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YAE9C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC1D,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,eAAe,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"DRMManager.js","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserDetector.d.ts","sourceRoot":"","sources":["../../../src/drm/utils/BrowserDetector.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAe,MAAM,mBAAmB,CAAC;AAGjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAgC;IAEpD,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,eAAe;IAU/B,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IA2C9C,qBAAqB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQhD,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB5D,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;YAQA,oBAAoB;YAkCpB,oBAAoB;
|
|
1
|
+
{"version":3,"file":"BrowserDetector.d.ts","sourceRoot":"","sources":["../../../src/drm/utils/BrowserDetector.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAe,MAAM,mBAAmB,CAAC;AAGjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAgC;IAEpD,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,eAAe;IAU/B,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IA2C9C,qBAAqB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQhD,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB5D,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;YAQA,oBAAoB;YAkCpB,oBAAoB;YA4DpB,qBAAqB;IAoDnC,cAAc,IAAI,MAAM;IAexB,iBAAiB,IAAI,IAAI;CAG1B"}
|
|
@@ -98,26 +98,51 @@ export class BrowserDetector {
|
|
|
98
98
|
async checkWidevineSupport() {
|
|
99
99
|
try {
|
|
100
100
|
if (!navigator.requestMediaKeySystemAccess) {
|
|
101
|
+
console.warn('[BrowserDetector] EME API (requestMediaKeySystemAccess) not available. Secure context check:', window.isSecureContext);
|
|
101
102
|
return false;
|
|
102
103
|
}
|
|
103
|
-
const
|
|
104
|
+
const configs = [
|
|
105
|
+
{
|
|
104
106
|
initDataTypes: ['cenc'],
|
|
105
107
|
videoCapabilities: [{
|
|
106
108
|
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
109
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
107
110
|
}],
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
audioCapabilities: [{
|
|
112
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
113
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
114
|
+
}]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
initDataTypes: ['cenc'],
|
|
118
|
+
videoCapabilities: [{
|
|
119
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"'
|
|
120
|
+
}]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
initDataTypes: ['cenc'],
|
|
124
|
+
videoCapabilities: [{
|
|
125
|
+
contentType: 'video/mp4; codecs="avc1.4d401e"'
|
|
126
|
+
}]
|
|
113
127
|
}
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
];
|
|
129
|
+
for (const keySystem of KEY_SYSTEMS[DRMTypeEnum.WIDEVINE]) {
|
|
130
|
+
for (const config of configs) {
|
|
131
|
+
try {
|
|
132
|
+
await navigator.requestMediaKeySystemAccess(keySystem, [config]);
|
|
133
|
+
console.log(`[BrowserDetector] Widevine supported with system: ${keySystem} and config:`, config);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
116
139
|
}
|
|
117
140
|
}
|
|
141
|
+
console.warn('[BrowserDetector] Widevine support check failed for all configurations');
|
|
118
142
|
return false;
|
|
119
143
|
}
|
|
120
|
-
catch {
|
|
144
|
+
catch (err) {
|
|
145
|
+
console.error('[BrowserDetector] Error checking Widevine support:', err);
|
|
121
146
|
return false;
|
|
122
147
|
}
|
|
123
148
|
}
|
|
@@ -126,24 +151,42 @@ export class BrowserDetector {
|
|
|
126
151
|
if (!navigator.requestMediaKeySystemAccess) {
|
|
127
152
|
return false;
|
|
128
153
|
}
|
|
129
|
-
const
|
|
154
|
+
const configs = [
|
|
155
|
+
{
|
|
130
156
|
initDataTypes: ['cenc'],
|
|
131
157
|
videoCapabilities: [{
|
|
132
158
|
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
159
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
133
160
|
}],
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
161
|
+
audioCapabilities: [{
|
|
162
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
163
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
164
|
+
}]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
initDataTypes: ['cenc'],
|
|
168
|
+
videoCapabilities: [{
|
|
169
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"'
|
|
170
|
+
}]
|
|
139
171
|
}
|
|
140
|
-
|
|
141
|
-
|
|
172
|
+
];
|
|
173
|
+
for (const keySystem of KEY_SYSTEMS[DRMTypeEnum.PLAYREADY]) {
|
|
174
|
+
for (const config of configs) {
|
|
175
|
+
try {
|
|
176
|
+
await navigator.requestMediaKeySystemAccess(keySystem, [config]);
|
|
177
|
+
console.log(`[BrowserDetector] PlayReady supported with system: ${keySystem} and config:`, config);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
142
183
|
}
|
|
143
184
|
}
|
|
185
|
+
console.warn('[BrowserDetector] PlayReady support check failed for all configurations');
|
|
144
186
|
return false;
|
|
145
187
|
}
|
|
146
|
-
catch {
|
|
188
|
+
catch (err) {
|
|
189
|
+
console.error('[BrowserDetector] Error checking PlayReady support:', err);
|
|
147
190
|
return false;
|
|
148
191
|
}
|
|
149
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserDetector.js","sourceRoot":"","sources":["../../../src/drm/utils/BrowserDetector.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,OAAO,eAAe;IAI1B;QAFQ,iBAAY,GAA2B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowserDetector.js","sourceRoot":"","sources":["../../../src/drm/utils/BrowserDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,14 +68,15 @@ export class DRMManager {
|
|
|
68
68
|
} catch (error: any) {
|
|
69
69
|
this.log('DRM initialization failed:', error);
|
|
70
70
|
|
|
71
|
+
const capabilities = await this.browserDetector.detectCapabilities();
|
|
71
72
|
const drmError = error.code && error.code.startsWith('DRM_')
|
|
72
73
|
? error
|
|
73
74
|
: DRMErrorHandler.createError(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
DRMErrorCode.CONFIGURATION_ERROR,
|
|
76
|
+
error.message || 'DRM initialization failed',
|
|
77
|
+
true,
|
|
78
|
+
{ ...error, capabilities }
|
|
79
|
+
);
|
|
79
80
|
|
|
80
81
|
return {
|
|
81
82
|
success: false,
|
|
@@ -11,7 +11,7 @@ export class BrowserDetector {
|
|
|
11
11
|
private static instance: BrowserDetector;
|
|
12
12
|
private capabilities: DRMCapabilities | null = null;
|
|
13
13
|
|
|
14
|
-
private constructor() {}
|
|
14
|
+
private constructor() { }
|
|
15
15
|
|
|
16
16
|
static getInstance(): BrowserDetector {
|
|
17
17
|
if (!BrowserDetector.instance) {
|
|
@@ -151,28 +151,56 @@ export class BrowserDetector {
|
|
|
151
151
|
private async checkWidevineSupport(): Promise<boolean> {
|
|
152
152
|
try {
|
|
153
153
|
if (!navigator.requestMediaKeySystemAccess) {
|
|
154
|
+
console.warn('[BrowserDetector] EME API (requestMediaKeySystemAccess) not available. Secure context check:', window.isSecureContext);
|
|
154
155
|
return false;
|
|
155
156
|
}
|
|
156
157
|
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
158
|
+
const configs: MediaKeySystemConfiguration[] = [
|
|
159
|
+
// Standard config with robustness
|
|
160
|
+
{
|
|
161
|
+
initDataTypes: ['cenc'],
|
|
162
|
+
videoCapabilities: [{
|
|
163
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
164
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
165
|
+
}],
|
|
166
|
+
audioCapabilities: [{
|
|
167
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
168
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
169
|
+
}]
|
|
170
|
+
},
|
|
171
|
+
// More permissive config (no robustness)
|
|
172
|
+
{
|
|
173
|
+
initDataTypes: ['cenc'],
|
|
174
|
+
videoCapabilities: [{
|
|
175
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"'
|
|
176
|
+
}]
|
|
177
|
+
},
|
|
178
|
+
// Baseline config
|
|
179
|
+
{
|
|
180
|
+
initDataTypes: ['cenc'],
|
|
181
|
+
videoCapabilities: [{
|
|
182
|
+
contentType: 'video/mp4; codecs="avc1.4d401e"'
|
|
183
|
+
}]
|
|
184
|
+
}
|
|
185
|
+
];
|
|
163
186
|
|
|
164
187
|
for (const keySystem of KEY_SYSTEMS[DRMTypeEnum.WIDEVINE]) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
188
|
+
for (const config of configs) {
|
|
189
|
+
try {
|
|
190
|
+
await navigator.requestMediaKeySystemAccess(keySystem, [config]);
|
|
191
|
+
console.log(`[BrowserDetector] Widevine supported with system: ${keySystem} and config:`, config);
|
|
192
|
+
return true;
|
|
193
|
+
} catch (e) {
|
|
194
|
+
// Try next config
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
171
197
|
}
|
|
172
198
|
}
|
|
173
199
|
|
|
200
|
+
console.warn('[BrowserDetector] Widevine support check failed for all configurations');
|
|
174
201
|
return false;
|
|
175
|
-
} catch {
|
|
202
|
+
} catch (err) {
|
|
203
|
+
console.error('[BrowserDetector] Error checking Widevine support:', err);
|
|
176
204
|
return false;
|
|
177
205
|
}
|
|
178
206
|
}
|
|
@@ -186,25 +214,45 @@ export class BrowserDetector {
|
|
|
186
214
|
return false;
|
|
187
215
|
}
|
|
188
216
|
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
217
|
+
const configs: MediaKeySystemConfiguration[] = [
|
|
218
|
+
// Standard config
|
|
219
|
+
{
|
|
220
|
+
initDataTypes: ['cenc'],
|
|
221
|
+
videoCapabilities: [{
|
|
222
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
223
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
224
|
+
}],
|
|
225
|
+
audioCapabilities: [{
|
|
226
|
+
contentType: 'audio/mp4; codecs="mp4a.40.2"',
|
|
227
|
+
robustness: 'SW_SECURE_CRYPTO'
|
|
228
|
+
}]
|
|
229
|
+
},
|
|
230
|
+
// More permissive config
|
|
231
|
+
{
|
|
232
|
+
initDataTypes: ['cenc'],
|
|
233
|
+
videoCapabilities: [{
|
|
234
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"'
|
|
235
|
+
}]
|
|
236
|
+
}
|
|
237
|
+
];
|
|
195
238
|
|
|
196
239
|
for (const keySystem of KEY_SYSTEMS[DRMTypeEnum.PLAYREADY]) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
240
|
+
for (const config of configs) {
|
|
241
|
+
try {
|
|
242
|
+
await navigator.requestMediaKeySystemAccess(keySystem, [config]);
|
|
243
|
+
console.log(`[BrowserDetector] PlayReady supported with system: ${keySystem} and config:`, config);
|
|
244
|
+
return true;
|
|
245
|
+
} catch (e) {
|
|
246
|
+
// Try next config
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
203
249
|
}
|
|
204
250
|
}
|
|
205
251
|
|
|
252
|
+
console.warn('[BrowserDetector] PlayReady support check failed for all configurations');
|
|
206
253
|
return false;
|
|
207
|
-
} catch {
|
|
254
|
+
} catch (err) {
|
|
255
|
+
console.error('[BrowserDetector] Error checking PlayReady support:', err);
|
|
208
256
|
return false;
|
|
209
257
|
}
|
|
210
258
|
}
|