unified-video-framework 1.4.412 → 1.4.414
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/dist/interfaces/IVideoPlayer.d.ts +0 -22
- package/packages/core/dist/interfaces/IVideoPlayer.d.ts.map +1 -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/IVideoPlayer.ts +0 -27
- 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/WebPlayer.d.ts +0 -4
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +62 -73
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/drm/DRMManager.d.ts +16 -9
- package/packages/web/dist/drm/DRMManager.d.ts.map +1 -1
- package/packages/web/dist/drm/DRMManager.js +109 -42
- package/packages/web/dist/drm/DRMManager.js.map +1 -1
- package/packages/web/dist/drm/index.d.ts +15 -0
- package/packages/web/dist/drm/index.d.ts.map +1 -0
- package/packages/web/dist/drm/index.js +13 -0
- package/packages/web/dist/drm/index.js.map +1 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +19 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +1 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.js +112 -0
- package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +1 -0
- package/packages/web/dist/drm/providers/GenericProvider.d.ts +30 -0
- package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +1 -0
- package/packages/web/dist/drm/providers/GenericProvider.js +104 -0
- package/packages/web/dist/drm/providers/GenericProvider.js.map +1 -0
- package/packages/web/dist/drm/systems/BaseDRM.d.ts +18 -0
- package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/BaseDRM.js +29 -0
- package/packages/web/dist/drm/systems/BaseDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +32 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.js +198 -0
- package/packages/web/dist/drm/systems/FairPlayDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +9 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.js +92 -0
- package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +1 -0
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts +9 -0
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +1 -0
- package/packages/web/dist/drm/systems/WidevineDRM.js +73 -0
- package/packages/web/dist/drm/systems/WidevineDRM.js.map +1 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +20 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +1 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.js +8 -0
- package/packages/web/dist/drm/types/BunnyNetTypes.js.map +1 -0
- package/packages/web/dist/drm/types/DRMTypes.d.ts +56 -49
- package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -1
- package/packages/web/dist/drm/types/DRMTypes.js +19 -13
- package/packages/web/dist/drm/types/DRMTypes.js.map +1 -1
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts +20 -0
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/BrowserDetector.js +168 -0
- package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -0
- package/packages/web/dist/drm/utils/CertificateManager.d.ts +15 -0
- package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/CertificateManager.js +46 -0
- package/packages/web/dist/drm/utils/CertificateManager.js.map +1 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +7 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.js +49 -0
- package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +1 -0
- package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts +15 -0
- package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts.map +1 -0
- package/packages/web/dist/drm/utils/LicenseRequestHandler.js +110 -0
- package/packages/web/dist/drm/utils/LicenseRequestHandler.js.map +1 -0
- package/packages/web/dist/react/WebPlayerView.d.ts +1 -18
- package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
- package/packages/web/dist/react/WebPlayerView.js +0 -5
- package/packages/web/dist/react/WebPlayerView.js.map +1 -1
- package/packages/web/src/WebPlayer.ts +79 -106
- package/packages/web/src/drm/DRMManager.ts +214 -99
- package/packages/web/src/drm/index.ts +37 -0
- package/packages/web/src/drm/providers/BunnyNetProvider.ts +171 -0
- package/packages/web/src/drm/providers/GenericProvider.ts +151 -0
- package/packages/web/src/drm/systems/BaseDRM.ts +68 -0
- package/packages/web/src/drm/systems/FairPlayDRM.ts +306 -0
- package/packages/web/src/drm/systems/PlayReadyDRM.ts +132 -0
- package/packages/web/src/drm/systems/WidevineDRM.ts +106 -0
- package/packages/web/src/drm/types/BunnyNetTypes.ts +35 -0
- package/packages/web/src/drm/types/DRMTypes.ts +92 -97
- package/packages/web/src/drm/utils/BrowserDetector.ts +233 -0
- package/packages/web/src/drm/utils/CertificateManager.ts +86 -0
- package/packages/web/src/drm/utils/DRMErrorHandler.ts +84 -0
- package/packages/web/src/drm/utils/LicenseRequestHandler.ts +180 -0
- package/packages/web/src/react/WebPlayerView.tsx +1 -28
- package/packages/web/src/drm/BunnyCDNDRMProvider.ts +0 -104
- package/packages/web/src/drm/FairPlayDRMHandler.ts +0 -322
- package/packages/web/src/drm/WidevineDRMHandler.ts +0 -246
|
@@ -2,7 +2,6 @@ import { BasePlayer } from "../../core/dist/BasePlayer.js";
|
|
|
2
2
|
import { ChapterManager as CoreChapterManager } from "../../core/dist/index.js";
|
|
3
3
|
import { ChapterManager } from "./chapters/ChapterManager.js";
|
|
4
4
|
import YouTubeExtractor from "./utils/YouTubeExtractor.js";
|
|
5
|
-
import { DRMManager } from "./drm/DRMManager.js";
|
|
6
5
|
export class WebPlayer extends BasePlayer {
|
|
7
6
|
constructor() {
|
|
8
7
|
super(...arguments);
|
|
@@ -50,8 +49,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
50
49
|
this.selectedSubtitleKey = 'off';
|
|
51
50
|
this._kiTo = null;
|
|
52
51
|
this.paywallController = null;
|
|
53
|
-
this.drmManager = null;
|
|
54
|
-
this.drmConfig = null;
|
|
55
52
|
this._playPromise = null;
|
|
56
53
|
this._deferredPause = false;
|
|
57
54
|
this._lastToggleAt = 0;
|
|
@@ -533,10 +530,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
533
530
|
if (!this.video) {
|
|
534
531
|
throw new Error('Video element not initialized');
|
|
535
532
|
}
|
|
536
|
-
if (source.drm) {
|
|
537
|
-
this.debugLog('[WebPlayer] DRM configuration detected, initializing...');
|
|
538
|
-
await this.initializeDRM(source);
|
|
539
|
-
}
|
|
540
533
|
const sourceType = this.detectSourceType(source);
|
|
541
534
|
try {
|
|
542
535
|
await this.loadVideoSource(source.url, sourceType, source);
|
|
@@ -555,45 +548,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
555
548
|
}
|
|
556
549
|
}
|
|
557
550
|
}
|
|
558
|
-
async initializeDRM(source) {
|
|
559
|
-
if (!source.drm)
|
|
560
|
-
return;
|
|
561
|
-
try {
|
|
562
|
-
const webDRMConfig = this.convertDRMConfig(source.drm);
|
|
563
|
-
this.drmManager = new DRMManager(webDRMConfig);
|
|
564
|
-
await this.drmManager.initialize();
|
|
565
|
-
this.debugLog('[WebPlayer] DRM initialized successfully');
|
|
566
|
-
this.drmConfig = webDRMConfig;
|
|
567
|
-
}
|
|
568
|
-
catch (error) {
|
|
569
|
-
console.error('[WebPlayer] Failed to initialize DRM:', error);
|
|
570
|
-
this.handleError({
|
|
571
|
-
code: 'DRM_INIT_ERROR',
|
|
572
|
-
message: 'Failed to initialize DRM protection',
|
|
573
|
-
type: 'drm',
|
|
574
|
-
fatal: true,
|
|
575
|
-
details: error
|
|
576
|
-
});
|
|
577
|
-
throw error;
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
convertDRMConfig(drmConfig) {
|
|
581
|
-
if (drmConfig.bunny) {
|
|
582
|
-
return {
|
|
583
|
-
provider: 'bunny',
|
|
584
|
-
bunny: drmConfig.bunny
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
return {
|
|
588
|
-
provider: 'generic',
|
|
589
|
-
generic: {
|
|
590
|
-
type: drmConfig.type === 'fairplay' ? 'fairplay' : 'widevine',
|
|
591
|
-
licenseUrl: drmConfig.licenseUrl,
|
|
592
|
-
certificateUrl: drmConfig.certificateUrl,
|
|
593
|
-
headers: drmConfig.headers
|
|
594
|
-
}
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
551
|
async loadVideoSource(url, sourceType, source) {
|
|
598
552
|
switch (sourceType) {
|
|
599
553
|
case 'hls':
|
|
@@ -797,12 +751,32 @@ export class WebPlayer extends BasePlayer {
|
|
|
797
751
|
hlsConfig.startPosition = this.config.startTime;
|
|
798
752
|
this.debugLog(`⏩ HLS startPosition set to: ${this.config.startTime}s (continue watching)`);
|
|
799
753
|
}
|
|
800
|
-
this.
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
754
|
+
if (this.source?.drm) {
|
|
755
|
+
try {
|
|
756
|
+
const { DRMManager } = await import('./drm/DRMManager');
|
|
757
|
+
const drmManager = new DRMManager(this.video, this.source.drm, this.config.debug);
|
|
758
|
+
this.debugLog('Initializing DRM for HLS...');
|
|
759
|
+
const initResult = await drmManager.initialize();
|
|
760
|
+
if (!initResult.success) {
|
|
761
|
+
throw initResult.error || new Error('DRM initialization failed');
|
|
762
|
+
}
|
|
763
|
+
const drmConfig = drmManager.getHLSConfig();
|
|
764
|
+
Object.assign(hlsConfig, drmConfig);
|
|
765
|
+
this.debugLog(`✅ HLS DRM configured: ${initResult.drmType} (${initResult.keySystem})`);
|
|
766
|
+
this._drmManager = drmManager;
|
|
767
|
+
}
|
|
768
|
+
catch (error) {
|
|
769
|
+
this.handleError({
|
|
770
|
+
code: 'DRM_ERROR',
|
|
771
|
+
message: `Failed to initialize DRM: ${error.message || error}`,
|
|
772
|
+
type: 'drm',
|
|
773
|
+
fatal: true,
|
|
774
|
+
details: error
|
|
775
|
+
});
|
|
776
|
+
throw error;
|
|
777
|
+
}
|
|
805
778
|
}
|
|
779
|
+
this.hls = new window.Hls(hlsConfig);
|
|
806
780
|
this.hls.loadSource(url);
|
|
807
781
|
this.hls.attachMedia(this.video);
|
|
808
782
|
this.hls.on(window.Hls.Events.MANIFEST_PARSED, (event, data) => {
|
|
@@ -833,11 +807,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
833
807
|
});
|
|
834
808
|
}
|
|
835
809
|
else if (this.video.canPlayType('application/vnd.apple.mpegurl')) {
|
|
836
|
-
if (this.drmManager && this.drmConfig) {
|
|
837
|
-
this.debugLog('[WebPlayer] Setting up DRM for native Safari HLS playback...');
|
|
838
|
-
await this.drmManager.setupDRM(this.video, url);
|
|
839
|
-
this.debugLog('[WebPlayer] DRM setup complete');
|
|
840
|
-
}
|
|
841
810
|
this.video.src = url;
|
|
842
811
|
}
|
|
843
812
|
else {
|
|
@@ -873,14 +842,34 @@ export class WebPlayer extends BasePlayer {
|
|
|
873
842
|
await this.loadScript('https://cdn.dashjs.org/latest/dash.all.min.js');
|
|
874
843
|
}
|
|
875
844
|
this.dash = window.dashjs.MediaPlayer().create();
|
|
876
|
-
if (this.drmManager && this.drmConfig) {
|
|
877
|
-
this.debugLog('[WebPlayer] Setting up DRM for DASH playback...');
|
|
878
|
-
await this.drmManager.setupDRM(this.video, url);
|
|
879
|
-
this.debugLog('[WebPlayer] DRM setup complete');
|
|
880
|
-
}
|
|
881
845
|
if (this.config.startTime !== undefined && this.config.startTime > 0) {
|
|
882
846
|
this.debugLog(`⏩ DASH will seek to: ${this.config.startTime}s on ready (continue watching)`);
|
|
883
847
|
}
|
|
848
|
+
if (this.source?.drm) {
|
|
849
|
+
try {
|
|
850
|
+
const { DRMManager } = await import('./drm/DRMManager');
|
|
851
|
+
const drmManager = new DRMManager(this.video, this.source.drm, this.config.debug);
|
|
852
|
+
this.debugLog('Initializing DRM for DASH...');
|
|
853
|
+
const initResult = await drmManager.initialize();
|
|
854
|
+
if (!initResult.success) {
|
|
855
|
+
throw initResult.error || new Error('DRM initialization failed');
|
|
856
|
+
}
|
|
857
|
+
const protectionData = drmManager.getDashProtectionData();
|
|
858
|
+
this.dash.setProtectionData(protectionData);
|
|
859
|
+
this.debugLog(`✅ DASH DRM configured: ${initResult.drmType} (${initResult.keySystem})`);
|
|
860
|
+
this._drmManager = drmManager;
|
|
861
|
+
}
|
|
862
|
+
catch (error) {
|
|
863
|
+
this.handleError({
|
|
864
|
+
code: 'DRM_ERROR',
|
|
865
|
+
message: `Failed to initialize DRM: ${error.message || error}`,
|
|
866
|
+
type: 'drm',
|
|
867
|
+
fatal: true,
|
|
868
|
+
details: error
|
|
869
|
+
});
|
|
870
|
+
throw error;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
884
873
|
this.dash.initialize(this.video, url, this.config.autoPlay);
|
|
885
874
|
this.dash.updateSettings({
|
|
886
875
|
streaming: {
|
|
@@ -7524,14 +7513,10 @@ export class WebPlayer extends BasePlayer {
|
|
|
7524
7513
|
this.isDetectedAsLive = true;
|
|
7525
7514
|
}
|
|
7526
7515
|
this.lastDuration = duration;
|
|
7527
|
-
|
|
7528
|
-
!isFinite(duration) ||
|
|
7529
|
-
this.isDetectedAsLive ||
|
|
7530
|
-
(duration > 0 && (duration - current) < 15);
|
|
7531
|
-
if (isLiveStream) {
|
|
7516
|
+
if (this.config.isLive === true) {
|
|
7532
7517
|
timeDisplay.innerHTML = '<span class="uvf-live-dot"></span><span class="uvf-live-text">LIVE</span>';
|
|
7533
7518
|
timeDisplay.classList.add('uvf-is-live');
|
|
7534
|
-
this.debugLog('Time display: LIVE stream
|
|
7519
|
+
this.debugLog('Time display: LIVE stream (isLive=true)');
|
|
7535
7520
|
}
|
|
7536
7521
|
else {
|
|
7537
7522
|
const currentFormatted = this.formatTime(current);
|
|
@@ -9715,6 +9700,16 @@ export class WebPlayer extends BasePlayer {
|
|
|
9715
9700
|
return epgBtn ? epgBtn.style.display !== 'none' : false;
|
|
9716
9701
|
}
|
|
9717
9702
|
async cleanup() {
|
|
9703
|
+
if (this._drmManager) {
|
|
9704
|
+
try {
|
|
9705
|
+
this.debugLog('Cleaning up DRM resources');
|
|
9706
|
+
await this._drmManager.destroy();
|
|
9707
|
+
this._drmManager = null;
|
|
9708
|
+
}
|
|
9709
|
+
catch (error) {
|
|
9710
|
+
this.debugLog('Error cleaning up DRM:', error);
|
|
9711
|
+
}
|
|
9712
|
+
}
|
|
9718
9713
|
if (this.hls) {
|
|
9719
9714
|
this.hls.destroy();
|
|
9720
9715
|
this.hls = null;
|
|
@@ -9729,12 +9724,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
9729
9724
|
}
|
|
9730
9725
|
async destroy() {
|
|
9731
9726
|
await this.cleanup();
|
|
9732
|
-
if (this.drmManager) {
|
|
9733
|
-
this.debugLog('[WebPlayer] Cleaning up DRM resources...');
|
|
9734
|
-
this.drmManager.destroy();
|
|
9735
|
-
this.drmManager = null;
|
|
9736
|
-
this.drmConfig = null;
|
|
9737
|
-
}
|
|
9738
9727
|
if (this.hideControlsTimeout) {
|
|
9739
9728
|
clearTimeout(this.hideControlsTimeout);
|
|
9740
9729
|
this.hideControlsTimeout = null;
|