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.
- package/package.json +1 -1
- package/packages/core/dist/interfaces/IVideoPlayer.d.ts +22 -0
- package/packages/core/dist/interfaces/IVideoPlayer.d.ts.map +1 -1
- package/packages/core/src/interfaces/IVideoPlayer.ts +27 -0
- package/packages/web/dist/WebPlayer.d.ts +4 -0
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +67 -0
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts +13 -0
- package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts.map +1 -0
- package/packages/web/dist/drm/BunnyCDNDRMProvider.js +65 -0
- package/packages/web/dist/drm/BunnyCDNDRMProvider.js.map +1 -0
- package/packages/web/dist/drm/DRMManager.d.ts +13 -0
- package/packages/web/dist/drm/DRMManager.d.ts.map +1 -0
- package/packages/web/dist/drm/DRMManager.js +59 -0
- package/packages/web/dist/drm/DRMManager.js.map +1 -0
- package/packages/web/dist/drm/FairPlayDRMHandler.d.ts +24 -0
- package/packages/web/dist/drm/FairPlayDRMHandler.d.ts.map +1 -0
- package/packages/web/dist/drm/FairPlayDRMHandler.js +190 -0
- package/packages/web/dist/drm/FairPlayDRMHandler.js.map +1 -0
- package/packages/web/dist/drm/WidevineDRMHandler.d.ts +21 -0
- package/packages/web/dist/drm/WidevineDRMHandler.d.ts.map +1 -0
- package/packages/web/dist/drm/WidevineDRMHandler.js +143 -0
- package/packages/web/dist/drm/WidevineDRMHandler.js.map +1 -0
- package/packages/web/dist/drm/types/DRMTypes.d.ts +52 -0
- package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -0
- package/packages/web/dist/drm/types/DRMTypes.js +15 -0
- package/packages/web/dist/drm/types/DRMTypes.js.map +1 -0
- package/packages/web/dist/react/WebPlayerView.d.ts +18 -1
- package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
- package/packages/web/dist/react/WebPlayerView.js +5 -0
- package/packages/web/dist/react/WebPlayerView.js.map +1 -1
- package/packages/web/src/WebPlayer.ts +95 -0
- package/packages/web/src/drm/BunnyCDNDRMProvider.ts +104 -0
- package/packages/web/src/drm/DRMManager.ts +99 -0
- package/packages/web/src/drm/FairPlayDRMHandler.ts +322 -0
- package/packages/web/src/drm/WidevineDRMHandler.ts +246 -0
- package/packages/web/src/drm/types/DRMTypes.ts +97 -0
- 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);
|