unified-video-framework 1.4.383 → 1.4.384

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.
Files changed (27) hide show
  1. package/package.json +1 -1
  2. package/packages/core/dist/interfaces.d.ts +20 -1
  3. package/packages/core/dist/interfaces.d.ts.map +1 -1
  4. package/packages/core/src/interfaces.ts +41 -2
  5. package/packages/web/dist/WebPlayer.d.ts.map +1 -1
  6. package/packages/web/dist/WebPlayer.js +23 -1
  7. package/packages/web/dist/WebPlayer.js.map +1 -1
  8. package/packages/web/dist/drm/DRMHelper.d.ts +28 -0
  9. package/packages/web/dist/drm/DRMHelper.d.ts.map +1 -0
  10. package/packages/web/dist/drm/DRMHelper.js +117 -0
  11. package/packages/web/dist/drm/DRMHelper.js.map +1 -0
  12. package/packages/web/dist/react/WebPlayerView.d.ts +19 -1
  13. package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
  14. package/packages/web/dist/react/WebPlayerView.js.map +1 -1
  15. package/packages/web/dist/security/CanvasVideoRenderer.d.ts +26 -0
  16. package/packages/web/dist/security/CanvasVideoRenderer.d.ts.map +1 -0
  17. package/packages/web/dist/security/CanvasVideoRenderer.js +143 -0
  18. package/packages/web/dist/security/CanvasVideoRenderer.js.map +1 -0
  19. package/packages/web/dist/security/ScreenProtectionController.d.ts +9 -1
  20. package/packages/web/dist/security/ScreenProtectionController.d.ts.map +1 -1
  21. package/packages/web/dist/security/ScreenProtectionController.js +86 -1
  22. package/packages/web/dist/security/ScreenProtectionController.js.map +1 -1
  23. package/packages/web/src/WebPlayer.ts +34 -1
  24. package/packages/web/src/drm/DRMHelper.ts +203 -0
  25. package/packages/web/src/react/WebPlayerView.tsx +23 -4
  26. package/packages/web/src/security/CanvasVideoRenderer.ts +246 -0
  27. package/packages/web/src/security/ScreenProtectionController.ts +118 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasVideoRenderer.js","sourceRoot":"","sources":["../../src/security/CanvasVideoRenderer.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
- import { ScreenCaptureEvent } from '@unified-video/core';
1
+ import { ScreenCaptureEvent, EnhancedScreenProtectionConfig } from '@unified-video/core';
2
2
  export interface ScreenProtectionOptions {
3
3
  videoElement: HTMLVideoElement;
4
4
  containerElement: HTMLElement;
5
+ config: EnhancedScreenProtectionConfig;
5
6
  watermarkConfig?: any;
6
7
  onDetection?: (event: ScreenCaptureEvent) => void;
7
8
  onDevToolsDetected?: () => void;
9
+ onPause?: () => void;
8
10
  }
9
11
  export declare class ScreenProtectionController {
10
12
  private opts;
11
13
  private overlayElement;
14
+ private canvasRenderer;
12
15
  private detectionIntervals;
13
16
  private eventListeners;
14
17
  private isActive;
@@ -18,6 +21,7 @@ export declare class ScreenProtectionController {
18
21
  activate(): void;
19
22
  deactivate(): void;
20
23
  destroy(): void;
24
+ private initializeCanvasRendering;
21
25
  private applyVideoProtection;
22
26
  private createInterferenceOverlay;
23
27
  private animateOverlay;
@@ -27,5 +31,9 @@ export declare class ScreenProtectionController {
27
31
  private detectVisibilityChange;
28
32
  private detectScreenCaptureAPI;
29
33
  private handleDetection;
34
+ private sendTrackingEvent;
35
+ private executeWarnAction;
36
+ private executePauseAction;
37
+ private executeDegradeAction;
30
38
  }
31
39
  //# sourceMappingURL=ScreenProtectionController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenProtectionController.d.ts","sourceRoot":"","sources":["../../src/security/ScreenProtectionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,EAAE,WAAW,CAAC;IAC9B,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,cAAc,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,uBAAuB,CAAa;gBAEhC,IAAI,EAAE,uBAAuB;IAIlC,QAAQ,IAAI,IAAI;IAiBhB,UAAU,IAAI,IAAI;IA8BlB,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,eAAe;CAQxB"}
1
+ {"version":3,"file":"ScreenProtectionController.d.ts","sourceRoot":"","sources":["../../src/security/ScreenProtectionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAGzF,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,EAAE,WAAW,CAAC;IAC9B,MAAM,EAAE,8BAA8B,CAAC;IACvC,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,cAAc,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,uBAAuB,CAAa;gBAEhC,IAAI,EAAE,uBAAuB;IAIlC,QAAQ,IAAI,IAAI;IAsBhB,UAAU,IAAI,IAAI;IAoClB,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,eAAe;YA6BT,iBAAiB;IAmB/B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;CAa7B"}
@@ -1,6 +1,8 @@
1
+ import { CanvasVideoRenderer } from "./CanvasVideoRenderer.js";
1
2
  export class ScreenProtectionController {
2
3
  constructor(opts) {
3
4
  this.overlayElement = null;
5
+ this.canvasRenderer = null;
4
6
  this.detectionIntervals = [];
5
7
  this.eventListeners = [];
6
8
  this.isActive = false;
@@ -13,7 +15,10 @@ export class ScreenProtectionController {
13
15
  return;
14
16
  console.log('[ScreenProtectionController] Activating screen protection...');
15
17
  this.applyVideoProtection();
16
- this.createInterferenceOverlay();
18
+ this.initializeCanvasRendering();
19
+ if (!this.canvasRenderer) {
20
+ this.createInterferenceOverlay();
21
+ }
17
22
  this.setupDetection();
18
23
  this.isActive = true;
19
24
  }
@@ -21,6 +26,10 @@ export class ScreenProtectionController {
21
26
  if (!this.isActive)
22
27
  return;
23
28
  console.log('[ScreenProtectionController] Deactivating screen protection...');
29
+ if (this.canvasRenderer) {
30
+ this.canvasRenderer.deactivate();
31
+ this.canvasRenderer = null;
32
+ }
24
33
  if (this.overlayElement && this.overlayElement.parentElement) {
25
34
  this.overlayElement.parentElement.removeChild(this.overlayElement);
26
35
  this.overlayElement = null;
@@ -40,6 +49,25 @@ export class ScreenProtectionController {
40
49
  destroy() {
41
50
  this.deactivate();
42
51
  }
52
+ initializeCanvasRendering() {
53
+ if (!this.opts.config.canvasRendering?.enabled) {
54
+ return;
55
+ }
56
+ console.log('[ScreenProtectionController] Initializing canvas-based video rendering...');
57
+ console.warn('[ScreenProtectionController] WARNING: Canvas rendering does NOT prevent screenshots.');
58
+ console.warn('[ScreenProtectionController] This only adds obfuscation. Use DRM for true protection.');
59
+ const watermarkText = this.opts.config.forensicWatermark?.userId
60
+ ? `PROTECTED - ${this.opts.config.forensicWatermark.userId}`
61
+ : 'PROTECTED CONTENT';
62
+ this.canvasRenderer = new CanvasVideoRenderer({
63
+ sourceVideo: this.opts.videoElement,
64
+ containerElement: this.opts.containerElement,
65
+ watermarkText: watermarkText,
66
+ enableNoise: this.opts.config.canvasRendering.enableNoise ?? true,
67
+ enableDynamicTransforms: this.opts.config.canvasRendering.enableDynamicTransforms ?? true
68
+ });
69
+ this.canvasRenderer.activate();
70
+ }
43
71
  applyVideoProtection() {
44
72
  const { videoElement, containerElement } = this.opts;
45
73
  try {
@@ -188,6 +216,63 @@ export class ScreenProtectionController {
188
216
  if (this.opts.onDetection) {
189
217
  this.opts.onDetection(event);
190
218
  }
219
+ if (this.opts.config.trackingEndpoint) {
220
+ this.sendTrackingEvent(event);
221
+ }
222
+ const action = this.opts.config.onDetection || 'warn';
223
+ switch (action) {
224
+ case 'warn':
225
+ this.executeWarnAction();
226
+ break;
227
+ case 'pause':
228
+ this.executePauseAction();
229
+ break;
230
+ case 'degrade':
231
+ this.executeDegradeAction();
232
+ break;
233
+ }
234
+ }
235
+ async sendTrackingEvent(event) {
236
+ try {
237
+ await fetch(this.opts.config.trackingEndpoint, {
238
+ method: 'POST',
239
+ headers: {
240
+ 'Content-Type': 'application/json'
241
+ },
242
+ body: JSON.stringify({
243
+ event,
244
+ userAgent: navigator.userAgent,
245
+ timestamp: new Date().toISOString(),
246
+ forensicData: this.opts.config.forensicWatermark
247
+ })
248
+ });
249
+ }
250
+ catch (error) {
251
+ console.error('[ScreenProtection] Failed to send tracking event:', error);
252
+ }
253
+ }
254
+ executeWarnAction() {
255
+ const message = this.opts.config.warningMessage ||
256
+ 'Screen recording or screenshot detected. This content is protected.';
257
+ console.warn(`[ScreenProtection] ${message}`);
258
+ }
259
+ executePauseAction() {
260
+ console.warn('[ScreenProtection] Pausing playback due to suspicious activity');
261
+ if (this.opts.onPause) {
262
+ this.opts.onPause();
263
+ }
264
+ else {
265
+ this.opts.videoElement.pause();
266
+ }
267
+ }
268
+ executeDegradeAction() {
269
+ console.warn('[ScreenProtection] Degrading video quality due to suspicious activity');
270
+ this.opts.videoElement.style.filter = 'blur(10px) brightness(0.5)';
271
+ setTimeout(() => {
272
+ if (this.opts.videoElement.style.filter) {
273
+ this.opts.videoElement.style.filter = '';
274
+ }
275
+ }, 5000);
191
276
  }
192
277
  }
193
278
  //# sourceMappingURL=ScreenProtectionController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenProtectionController.js","sourceRoot":"","sources":["../../src/security/ScreenProtectionController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScreenProtectionController.js","sourceRoot":"","sources":["../../src/security/ScreenProtectionController.ts"],"names":[],"mappings":"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"}
@@ -8153,6 +8153,14 @@ export class WebPlayer extends BasePlayer {
8153
8153
  private initializeScreenProtection(): void {
8154
8154
  if (!this.video || !this.container) return;
8155
8155
 
8156
+ // Normalize config: convert boolean to EnhancedScreenProtectionConfig
8157
+ const screenProtConfig = (this.config as any).screenProtection;
8158
+ const enhancedConfig = typeof screenProtConfig === 'boolean'
8159
+ ? { enabled: true } // Simple mode: just { enabled: true }
8160
+ : screenProtConfig; // Advanced mode: full config object
8161
+
8162
+ if (!enhancedConfig || !enhancedConfig.enabled) return;
8163
+
8156
8164
  console.warn(
8157
8165
  '[Unified Video Framework] Screen Protection Enabled\n' +
8158
8166
  'Note: Browsers cannot completely block screen recording. ' +
@@ -8161,10 +8169,14 @@ export class WebPlayer extends BasePlayer {
8161
8169
  );
8162
8170
 
8163
8171
  // Enhance watermark for protection
8172
+ const watermarkText = enhancedConfig.forensicWatermark?.userId
8173
+ ? `PROTECTED - ${enhancedConfig.forensicWatermark.userId}`
8174
+ : 'PROTECTED CONTENT';
8175
+
8164
8176
  if (!(this.config as any).watermark) {
8165
8177
  (this.config as any).watermark = {
8166
8178
  enabled: true,
8167
- text: 'PROTECTED CONTENT',
8179
+ text: watermarkText,
8168
8180
  randomPosition: true,
8169
8181
  updateInterval: 1000 // Rapid updates
8170
8182
  };
@@ -8175,6 +8187,10 @@ export class WebPlayer extends BasePlayer {
8175
8187
  (this.config as any).watermark.updateInterval || 5000,
8176
8188
  1000
8177
8189
  );
8190
+ // Add forensic watermark user ID if provided
8191
+ if (enhancedConfig.forensicWatermark?.userId) {
8192
+ (this.config as any).watermark.text = watermarkText;
8193
+ }
8178
8194
  }
8179
8195
  this.setupWatermark(); // Re-setup with new config
8180
8196
 
@@ -8182,10 +8198,17 @@ export class WebPlayer extends BasePlayer {
8182
8198
  this.screenProtectionController = new ScreenProtectionController({
8183
8199
  videoElement: this.video,
8184
8200
  containerElement: this.container,
8201
+ config: enhancedConfig,
8185
8202
  watermarkConfig: (this.config as any).watermark,
8186
8203
  onDetection: (event: ScreenCaptureEvent) => {
8187
8204
  console.warn('[Screen Protection] Detection:', event);
8188
8205
  this.emit('onScreenCaptureDetected', event);
8206
+
8207
+ // Call config callback if provided
8208
+ if (enhancedConfig.onScreenCaptureDetected) {
8209
+ enhancedConfig.onScreenCaptureDetected(event);
8210
+ }
8211
+ // Also check legacy callback
8189
8212
  if ((this.config as any).onScreenCaptureDetected) {
8190
8213
  (this.config as any).onScreenCaptureDetected(event);
8191
8214
  }
@@ -8193,9 +8216,19 @@ export class WebPlayer extends BasePlayer {
8193
8216
  onDevToolsDetected: () => {
8194
8217
  console.warn('[Screen Protection] DevTools detected');
8195
8218
  this.emit('onDevToolsDetected');
8219
+
8220
+ // Call config callback if provided
8221
+ if (enhancedConfig.onDevToolsDetected) {
8222
+ enhancedConfig.onDevToolsDetected();
8223
+ }
8224
+ // Also check legacy callback
8196
8225
  if ((this.config as any).onDevToolsDetected) {
8197
8226
  (this.config as any).onDevToolsDetected();
8198
8227
  }
8228
+ },
8229
+ onPause: () => {
8230
+ // Pause video when requested by protection controller
8231
+ this.pause();
8199
8232
  }
8200
8233
  });
8201
8234
 
@@ -0,0 +1,203 @@
1
+ /**
2
+ * DRM Helper Utility
3
+ *
4
+ * Simplifies DRM configuration for users who need maximum security (true black screen protection).
5
+ * This is Option B - for advanced users who can encrypt their videos and set up license servers.
6
+ */
7
+
8
+ import { DRMConfig, DRMType } from '../../../core/dist';
9
+
10
+ export interface DRMHelperOptions {
11
+ licenseServerUrl: string;
12
+ certificateUrl?: string; // Required for FairPlay (Safari)
13
+ headers?: Record<string, string>;
14
+ preferredDRM?: 'widevine' | 'playready' | 'fairplay' | 'auto';
15
+ }
16
+
17
+ export class DRMHelper {
18
+ /**
19
+ * Detect the best DRM system for the current browser
20
+ */
21
+ static detectBestDRM(): DRMType {
22
+ const ua = navigator.userAgent.toLowerCase();
23
+
24
+ // Safari - use FairPlay
25
+ if (ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1) {
26
+ return DRMType.FAIRPLAY;
27
+ }
28
+
29
+ // Edge - prefer PlayReady, fallback to Widevine
30
+ if (ua.indexOf('edg') !== -1) {
31
+ return DRMType.PLAYREADY;
32
+ }
33
+
34
+ // Chrome, Firefox, Opera - use Widevine
35
+ return DRMType.WIDEVINE;
36
+ }
37
+
38
+ /**
39
+ * Create a simple DRM configuration
40
+ *
41
+ * @example
42
+ * const drmConfig = DRMHelper.createConfig({
43
+ * licenseServerUrl: 'https://your-license-server.com/license',
44
+ * certificateUrl: 'https://your-license-server.com/cert', // FairPlay only
45
+ * headers: {
46
+ * 'Authorization': 'Bearer your-token'
47
+ * }
48
+ * });
49
+ */
50
+ static createConfig(options: DRMHelperOptions): DRMConfig {
51
+ const preferredDRMMap: Record<string, DRMType> = {
52
+ 'widevine': DRMType.WIDEVINE,
53
+ 'playready': DRMType.PLAYREADY,
54
+ 'fairplay': DRMType.FAIRPLAY
55
+ };
56
+
57
+ const drmType = options.preferredDRM === 'auto' || !options.preferredDRM
58
+ ? this.detectBestDRM()
59
+ : preferredDRMMap[options.preferredDRM];
60
+
61
+ return {
62
+ type: drmType,
63
+ licenseUrl: options.licenseServerUrl,
64
+ certificateUrl: options.certificateUrl,
65
+ headers: options.headers || {},
66
+ // Widevine security level (L1 = hardware-backed, most secure)
67
+ ...(drmType === DRMType.WIDEVINE && { securityLevel: 'L1' as any })
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Check if browser supports DRM
73
+ */
74
+ static async checkDRMSupport(): Promise<{
75
+ widevine: boolean;
76
+ playready: boolean;
77
+ fairplay: boolean;
78
+ recommended: DRMType;
79
+ }> {
80
+ const keySystemMap = {
81
+ widevine: 'com.widevine.alpha',
82
+ playready: 'com.microsoft.playready',
83
+ fairplay: 'com.apple.fps'
84
+ };
85
+
86
+ const support = {
87
+ widevine: false,
88
+ playready: false,
89
+ fairplay: false,
90
+ recommended: 'widevine' as DRMType
91
+ };
92
+
93
+ if (!navigator.requestMediaKeySystemAccess) {
94
+ return support;
95
+ }
96
+
97
+ // Check Widevine
98
+ try {
99
+ await navigator.requestMediaKeySystemAccess(keySystemMap.widevine, [{
100
+ initDataTypes: ['cenc'],
101
+ videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }]
102
+ }]);
103
+ support.widevine = true;
104
+ } catch (e) {}
105
+
106
+ // Check PlayReady
107
+ try {
108
+ await navigator.requestMediaKeySystemAccess(keySystemMap.playready, [{
109
+ initDataTypes: ['cenc'],
110
+ videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }]
111
+ }]);
112
+ support.playready = true;
113
+ } catch (e) {}
114
+
115
+ // Check FairPlay
116
+ try {
117
+ await navigator.requestMediaKeySystemAccess(keySystemMap.fairplay, [{
118
+ initDataTypes: ['skd'],
119
+ videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }]
120
+ }]);
121
+ support.fairplay = true;
122
+ } catch (e) {}
123
+
124
+ // Set recommended based on what's supported
125
+ support.recommended = this.detectBestDRM();
126
+
127
+ return support;
128
+ }
129
+
130
+ /**
131
+ * Validate DRM configuration
132
+ */
133
+ static validateConfig(config: DRMConfig): { valid: boolean; errors: string[] } {
134
+ const errors: string[] = [];
135
+
136
+ if (!config.type) {
137
+ errors.push('DRM type is required');
138
+ }
139
+
140
+ if (!config.licenseUrl) {
141
+ errors.push('License server URL is required');
142
+ }
143
+
144
+ if (config.type === 'fairplay' && !config.certificateUrl) {
145
+ errors.push('Certificate URL is required for FairPlay DRM');
146
+ }
147
+
148
+ try {
149
+ new URL(config.licenseUrl || '');
150
+ } catch (e) {
151
+ errors.push('License URL must be a valid URL');
152
+ }
153
+
154
+ return {
155
+ valid: errors.length === 0,
156
+ errors
157
+ };
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Quick start examples for common DRM providers
163
+ */
164
+ export const DRMProviderExamples = {
165
+ /**
166
+ * BuyDRM KeyOS
167
+ * https://www.buydrm.com/
168
+ */
169
+ BuyDRM: (customerId: string, videoId: string): DRMHelperOptions => ({
170
+ licenseServerUrl: `https://wv.service.expressplay.com/hms/wv/rights/?ExpressPlayToken=${customerId}`,
171
+ preferredDRM: 'auto'
172
+ }),
173
+
174
+ /**
175
+ * Irdeto
176
+ * https://irdeto.com/
177
+ */
178
+ Irdeto: (licenseUrl: string): DRMHelperOptions => ({
179
+ licenseServerUrl: licenseUrl,
180
+ preferredDRM: 'auto'
181
+ }),
182
+
183
+ /**
184
+ * Verimatrix
185
+ * https://www.verimatrix.com/
186
+ */
187
+ Verimatrix: (licenseUrl: string, token: string): DRMHelperOptions => ({
188
+ licenseServerUrl: licenseUrl,
189
+ headers: {
190
+ 'Authorization': `Bearer ${token}`
191
+ },
192
+ preferredDRM: 'auto'
193
+ }),
194
+
195
+ /**
196
+ * Custom DRM server
197
+ */
198
+ Custom: (licenseUrl: string, certificateUrl?: string): DRMHelperOptions => ({
199
+ licenseServerUrl: licenseUrl,
200
+ certificateUrl: certificateUrl,
201
+ preferredDRM: 'auto'
202
+ })
203
+ };
@@ -433,10 +433,29 @@ export type WebPlayerViewProps = {
433
433
  // Flash News Ticker
434
434
  flashNewsTicker?: FlashNewsTickerConfig; // Flash news ticker configuration
435
435
 
436
- // Screen Protection
437
- screenProtection?: boolean; // Enable screen recording/screenshot prevention (default: false)
438
- onScreenCaptureDetected?: (event: any) => void; // Called when potential screen capture detected
439
- onDevToolsDetected?: () => void; // Called when DevTools opened
436
+ // Screen Protection (Simple: boolean | Advanced: config object)
437
+ screenProtection?: boolean | {
438
+ enabled: boolean;
439
+ forensicWatermark?: {
440
+ userId?: string;
441
+ sessionId?: string;
442
+ invisible?: boolean;
443
+ };
444
+ canvasRendering?: {
445
+ enabled: boolean;
446
+ enableNoise?: boolean;
447
+ enableDynamicTransforms?: boolean;
448
+ };
449
+ aggressiveMode?: boolean;
450
+ onDetection?: 'warn' | 'pause' | 'degrade';
451
+ warningMessage?: string;
452
+ trackingEndpoint?: string;
453
+ onScreenCaptureDetected?: (event: any) => void;
454
+ onDevToolsDetected?: () => void;
455
+ };
456
+ // Legacy callbacks (deprecated)
457
+ onScreenCaptureDetected?: (event: any) => void;
458
+ onDevToolsDetected?: () => void;
440
459
  };
441
460
 
442
461
  export const WebPlayerView: React.FC<WebPlayerViewProps> = (props) => {