unified-video-framework 1.4.411 → 1.4.412

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 (39) hide show
  1. package/package.json +1 -1
  2. package/packages/core/dist/interfaces/IVideoPlayer.d.ts +22 -0
  3. package/packages/core/dist/interfaces/IVideoPlayer.d.ts.map +1 -1
  4. package/packages/core/src/interfaces/IVideoPlayer.ts +27 -0
  5. package/packages/web/dist/WebPlayer.d.ts +4 -0
  6. package/packages/web/dist/WebPlayer.d.ts.map +1 -1
  7. package/packages/web/dist/WebPlayer.js +67 -0
  8. package/packages/web/dist/WebPlayer.js.map +1 -1
  9. package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts +13 -0
  10. package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts.map +1 -0
  11. package/packages/web/dist/drm/BunnyCDNDRMProvider.js +65 -0
  12. package/packages/web/dist/drm/BunnyCDNDRMProvider.js.map +1 -0
  13. package/packages/web/dist/drm/DRMManager.d.ts +13 -0
  14. package/packages/web/dist/drm/DRMManager.d.ts.map +1 -0
  15. package/packages/web/dist/drm/DRMManager.js +59 -0
  16. package/packages/web/dist/drm/DRMManager.js.map +1 -0
  17. package/packages/web/dist/drm/FairPlayDRMHandler.d.ts +24 -0
  18. package/packages/web/dist/drm/FairPlayDRMHandler.d.ts.map +1 -0
  19. package/packages/web/dist/drm/FairPlayDRMHandler.js +190 -0
  20. package/packages/web/dist/drm/FairPlayDRMHandler.js.map +1 -0
  21. package/packages/web/dist/drm/WidevineDRMHandler.d.ts +21 -0
  22. package/packages/web/dist/drm/WidevineDRMHandler.d.ts.map +1 -0
  23. package/packages/web/dist/drm/WidevineDRMHandler.js +143 -0
  24. package/packages/web/dist/drm/WidevineDRMHandler.js.map +1 -0
  25. package/packages/web/dist/drm/types/DRMTypes.d.ts +52 -0
  26. package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -0
  27. package/packages/web/dist/drm/types/DRMTypes.js +15 -0
  28. package/packages/web/dist/drm/types/DRMTypes.js.map +1 -0
  29. package/packages/web/dist/react/WebPlayerView.d.ts +18 -1
  30. package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
  31. package/packages/web/dist/react/WebPlayerView.js +5 -0
  32. package/packages/web/dist/react/WebPlayerView.js.map +1 -1
  33. package/packages/web/src/WebPlayer.ts +95 -0
  34. package/packages/web/src/drm/BunnyCDNDRMProvider.ts +104 -0
  35. package/packages/web/src/drm/DRMManager.ts +99 -0
  36. package/packages/web/src/drm/FairPlayDRMHandler.ts +322 -0
  37. package/packages/web/src/drm/WidevineDRMHandler.ts +246 -0
  38. package/packages/web/src/drm/types/DRMTypes.ts +97 -0
  39. package/packages/web/src/react/WebPlayerView.tsx +28 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * DRM Types and Interfaces
3
+ * Core types for the web DRM system supporting Bunny CDN and generic DRM providers
4
+ */
5
+
6
+ // Token provider interface - allows flexible token injection strategies
7
+ export interface DRMTokenProvider {
8
+ // Get token for manifest/playlist requests
9
+ getManifestToken(): Promise<DRMToken | null>;
10
+
11
+ // Get token for media segment requests
12
+ getSegmentToken(): Promise<DRMToken | null>;
13
+
14
+ // Get token for license server requests
15
+ getLicenseToken(): Promise<DRMToken | null>;
16
+
17
+ // Check if token needs renewal
18
+ shouldRenewToken(token: DRMToken): boolean;
19
+
20
+ // Refresh/renew token
21
+ renewToken(token: DRMToken): Promise<DRMToken>;
22
+ }
23
+
24
+ // Token structure
25
+ export interface DRMToken {
26
+ token: string; // The actual token value
27
+ expires: number; // Unix timestamp (seconds)
28
+ tokenVer?: string; // Optional token version
29
+ }
30
+
31
+ // Bunny CDN specific configuration
32
+ export interface BunnyCDNDRMConfig {
33
+ libraryId: string; // Bunny CDN library ID
34
+ videoId: string; // Video ID on Bunny CDN
35
+ pullZoneUrl: string; // e.g., "stream.example.com"
36
+ tokenProvider: DRMTokenProvider; // Token provider implementation
37
+ certificateUrl?: string; // Override default FairPlay certificate URL
38
+ licenseUrl?: string; // Override default license URL
39
+ enableReferrerProtection?: boolean; // Enable referrer header validation
40
+ }
41
+
42
+ // Generic DRM configuration (for non-Bunny providers)
43
+ export interface GenericDRMConfig {
44
+ type: 'widevine' | 'fairplay';
45
+ licenseUrl: string;
46
+ certificateUrl?: string; // Required for FairPlay
47
+ headers?: Record<string, string>; // Custom headers for license requests
48
+ certificateHeaders?: Record<string, string>; // Custom headers for certificate requests
49
+ }
50
+
51
+ // Unified DRM configuration
52
+ export interface WebDRMConfig {
53
+ // Provider type
54
+ provider: 'bunny' | 'generic';
55
+
56
+ // Provider-specific config
57
+ bunny?: BunnyCDNDRMConfig;
58
+ generic?: GenericDRMConfig;
59
+ }
60
+
61
+ // DRM Handler interface (implemented by Widevine and FairPlay handlers)
62
+ export interface IDRMHandler {
63
+ // Initialize DRM system
64
+ initialize(): Promise<void>;
65
+
66
+ // Setup DRM for video element
67
+ setupDRM(videoElement: HTMLVideoElement, manifestUrl: string): Promise<void>;
68
+
69
+ // Handle license requests
70
+ onLicenseRequest(licenseRequest: ArrayBuffer): Promise<ArrayBuffer>;
71
+
72
+ // Cleanup resources
73
+ destroy(): void;
74
+
75
+ // Check if DRM is supported in current browser
76
+ isSupported(): boolean;
77
+ }
78
+
79
+ // EME key system identifiers
80
+ export const DRM_KEY_SYSTEMS = {
81
+ WIDEVINE: 'com.widevine.alpha',
82
+ FAIRPLAY: 'com.apple.fps.1_0',
83
+ PLAYREADY: 'com.microsoft.playready',
84
+ CLEARKEY: 'org.w3.clearkey'
85
+ } as const;
86
+
87
+ // Error types
88
+ export class DRMError extends Error {
89
+ constructor(
90
+ message: string,
91
+ public code: string,
92
+ public details?: any
93
+ ) {
94
+ super(message);
95
+ this.name = 'DRMError';
96
+ }
97
+ }
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck
2
2
  import React, { useEffect, useRef, useState, useCallback } from 'react';
3
3
  import type { CSSProperties } from 'react';
4
- import type { VideoSource, SubtitleTrack, VideoMetadata, PlayerConfig } from '../../core/dist';
4
+ import type { VideoSource, SubtitleTrack, VideoMetadata, PlayerConfig, DRMTokenProvider, DRMToken, BunnyCDNDRMConfig } from '../../core/dist';
5
5
  import { WebPlayer } from '../WebPlayer';
6
6
  import { GoogleAdsManager } from '../ads/GoogleAdsManager';
7
7
  // EPG imports - conditionally loaded
@@ -224,6 +224,26 @@ export type WebPlayerViewProps = {
224
224
  // Source config
225
225
  url: string;
226
226
  type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto';
227
+
228
+ // DRM configuration (optional)
229
+ drm?: {
230
+ bunny?: {
231
+ libraryId: string;
232
+ videoId: string;
233
+ pullZoneUrl: string;
234
+ tokenProvider: DRMTokenProvider;
235
+ certificateUrl?: string;
236
+ licenseUrl?: string;
237
+ enableReferrerProtection?: boolean;
238
+ };
239
+ generic?: {
240
+ type: 'widevine' | 'fairplay';
241
+ licenseUrl: string;
242
+ certificateUrl?: string;
243
+ headers?: Record<string, string>;
244
+ };
245
+ };
246
+
227
247
  subtitles?: SubtitleTrack[];
228
248
  metadata?: VideoMetadata;
229
249
 
@@ -1020,6 +1040,13 @@ export const WebPlayerView: React.FC<WebPlayerViewProps> = (props) => {
1020
1040
  fallbackRetryDelay: props.fallbackRetryDelay,
1021
1041
  fallbackRetryAttempts: props.fallbackRetryAttempts,
1022
1042
  onAllSourcesFailed: props.onAllSourcesFailed,
1043
+
1044
+ // Pass DRM config if provided
1045
+ drm: props.drm ? {
1046
+ type: props.drm.bunny ? 'widevine' : (props.drm.generic?.type || 'widevine'),
1047
+ licenseUrl: props.drm.bunny ? '' : (props.drm.generic?.licenseUrl || ''),
1048
+ bunny: props.drm.bunny
1049
+ } as any : undefined
1023
1050
  };
1024
1051
 
1025
1052
  await player.load(source);