unified-video-framework 1.4.71 → 1.4.73
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 +2 -1
- package/packages/core/dist/BasePlayer.d.ts +60 -0
- package/packages/core/dist/PlayerFactory.d.ts +11 -0
- package/packages/core/dist/PlayerFactory.d.ts.map +1 -0
- package/packages/core/dist/PlayerFactory.js +194 -0
- package/packages/core/dist/PlayerFactory.js.map +1 -0
- package/packages/core/dist/VideoPlayer.d.ts +71 -0
- package/packages/core/dist/VideoPlayerFactory.d.ts +8 -0
- package/packages/core/dist/index.d.ts +7 -0
- package/packages/core/dist/interfaces/IVideoPlayer.d.ts +184 -0
- package/packages/core/dist/interfaces.d.ts +286 -0
- package/packages/core/dist/utils/EventEmitter.d.ts +14 -0
- package/packages/core/dist/utils/PlatformDetector.d.ts +29 -0
- package/packages/react-native/dist/ReactNativePlayer.d.ts +16 -0
- package/packages/react-native/dist/ReactNativePlayer.d.ts.map +1 -0
- package/packages/react-native/dist/ReactNativePlayer.js +312 -0
- package/packages/react-native/dist/ReactNativePlayer.js.map +1 -0
- package/packages/react-native/dist/VideoPlayer.d.ts +43 -0
- package/packages/react-native/dist/VideoPlayer.d.ts.map +1 -0
- package/packages/react-native/dist/VideoPlayer.js +148 -0
- package/packages/react-native/dist/VideoPlayer.js.map +1 -0
- package/packages/react-native/dist/index.d.ts +5 -0
- package/packages/react-native/dist/index.d.ts.map +1 -0
- package/packages/react-native/dist/index.js +9 -0
- package/packages/react-native/dist/index.js.map +1 -0
- package/packages/react-native/dist/utils/EventEmitter.d.ts +14 -0
- package/packages/react-native/dist/utils/EventEmitter.d.ts.map +1 -0
- package/packages/react-native/dist/utils/EventEmitter.js +59 -0
- package/packages/react-native/dist/utils/EventEmitter.js.map +1 -0
- package/packages/web/dist/HTML5Player.js.map +1 -0
- package/packages/web/dist/SecureVideoPlayer.d.ts +131 -0
- package/packages/web/dist/WebPlayer.d.ts +150 -0
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +5 -12
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/index.d.ts +7 -0
- package/packages/web/dist/index.d.ts.map +1 -1
- package/packages/web/dist/index.js +1 -0
- package/packages/web/dist/index.js.map +1 -1
- package/packages/web/dist/react/EPG.d.ts.map +1 -0
- package/packages/web/dist/react/EPG.js +7 -0
- package/packages/web/dist/react/EPG.js.map +1 -0
- package/packages/web/dist/react/WebPlayerView-debug.d.ts +98 -0
- package/packages/web/dist/react/WebPlayerView-debug.d.ts.map +1 -0
- package/packages/web/dist/react/WebPlayerView-debug.js +482 -0
- package/packages/web/dist/react/WebPlayerView-debug.js.map +1 -0
- package/packages/web/dist/react/WebPlayerView.d.ts +97 -0
- package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
- package/packages/web/dist/react/WebPlayerView.js +43 -3
- package/packages/web/dist/react/WebPlayerView.js.map +1 -1
- package/packages/web/dist/react/components/EPGNavigationControls.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGNavigationControls.js +202 -0
- package/packages/web/dist/react/components/EPGNavigationControls.js.map +1 -0
- package/packages/web/dist/react/components/EPGOverlay-improved-positioning.d.ts +5 -0
- package/packages/web/dist/react/components/EPGOverlay-improved-positioning.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGOverlay-improved-positioning.js +415 -0
- package/packages/web/dist/react/components/EPGOverlay-improved-positioning.js.map +1 -0
- package/packages/web/dist/react/components/EPGOverlay.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGOverlay.js +384 -0
- package/packages/web/dist/react/components/EPGOverlay.js.map +1 -0
- package/packages/web/dist/react/components/EPGProgramDetails.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGProgramDetails.js +437 -0
- package/packages/web/dist/react/components/EPGProgramDetails.js.map +1 -0
- package/packages/web/dist/react/components/EPGProgramGrid.d.ts +19 -0
- package/packages/web/dist/react/components/EPGProgramGrid.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGProgramGrid.js +265 -0
- package/packages/web/dist/react/components/EPGProgramGrid.js.map +1 -0
- package/packages/web/dist/react/components/EPGTimelineHeader.d.ts +16 -0
- package/packages/web/dist/react/components/EPGTimelineHeader.d.ts.map +1 -0
- package/packages/web/dist/react/components/EPGTimelineHeader.js +153 -0
- package/packages/web/dist/react/components/EPGTimelineHeader.js.map +1 -0
- package/packages/web/dist/react/debug/EPGDebugger.d.ts +11 -0
- package/packages/web/dist/react/debug/EPGDebugger.d.ts.map +1 -0
- package/packages/web/dist/react/debug/EPGDebugger.js +96 -0
- package/packages/web/dist/react/debug/EPGDebugger.js.map +1 -0
- package/packages/web/dist/react/debug/sampleEPGData.d.ts +12 -0
- package/packages/web/dist/react/debug/sampleEPGData.d.ts.map +1 -0
- package/packages/web/dist/react/debug/sampleEPGData.js +191 -0
- package/packages/web/dist/react/debug/sampleEPGData.js.map +1 -0
- package/packages/web/dist/react/examples/EPGTestExample.d.ts +4 -0
- package/packages/web/dist/react/examples/EPGTestExample.d.ts.map +1 -0
- package/packages/web/dist/react/examples/EPGTestExample.js +129 -0
- package/packages/web/dist/react/examples/EPGTestExample.js.map +1 -0
- package/packages/web/dist/react/types/EPGTypes.d.ts.map +1 -0
- package/packages/web/dist/react/types/EPGTypes.js +2 -0
- package/packages/web/dist/react/types/EPGTypes.js.map +1 -0
- package/packages/web/dist/react/utils/EPGUtils.d.ts.map +1 -0
- package/packages/web/dist/react/utils/EPGUtils.js +154 -0
- package/packages/web/dist/react/utils/EPGUtils.js.map +1 -0
- package/packages/web/dist/test/epg-test.d.ts.map +1 -0
- package/packages/web/dist/test/epg-test.js +77 -0
- package/packages/web/dist/test/epg-test.js.map +1 -0
- package/packages/web/package.json +0 -5
- package/packages/web/src/WebPlayer.ts +6 -21
- package/packages/web/src/__tests__/WebPlayer.test.ts +314 -0
- package/packages/web/src/__tests__/epg-integration.test.ts +259 -0
- package/packages/web/src/index.ts +2 -1
- package/packages/web/src/react/WebPlayerView-debug.tsx +699 -0
- package/packages/web/src/react/WebPlayerView.tsx +49 -9
- package/packages/web/src/react/debug/EPGDebugger.tsx +94 -0
- package/packages/web/src/react/debug/EPG_TROUBLESHOOTING.md +299 -0
- package/packages/web/src/react/debug/sampleEPGData.ts +207 -0
- package/packages/web/src/react/examples/EPGTestExample.tsx +223 -0
- package/packages/web/src/test/epg-test.ts +122 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unified-video-framework",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.73",
|
|
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",
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"test:watch": "jest --watch",
|
|
73
73
|
"lint": "eslint . --ext .ts,.tsx,.js,.jsx",
|
|
74
74
|
"type-check": "tsc --noEmit",
|
|
75
|
+
"prepublishOnly": "npm run build:publish",
|
|
75
76
|
"dev": "lerna run dev --parallel",
|
|
76
77
|
"serve:demo": "node server.js",
|
|
77
78
|
"docs": "typedoc --out docs packages/core/src",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { IVideoPlayer, VideoSource, PlayerConfig, PlayerState, PlayerEvents, PlayerError, Quality, SubtitleTrack } from './interfaces/IVideoPlayer';
|
|
2
|
+
import { EventEmitter } from './utils/EventEmitter';
|
|
3
|
+
export declare abstract class BasePlayer implements IVideoPlayer {
|
|
4
|
+
protected container: HTMLElement | null;
|
|
5
|
+
protected config: PlayerConfig;
|
|
6
|
+
protected events: EventEmitter;
|
|
7
|
+
protected state: PlayerState;
|
|
8
|
+
protected source: VideoSource | null;
|
|
9
|
+
protected subtitles: SubtitleTrack[];
|
|
10
|
+
protected currentSubtitleIndex: number;
|
|
11
|
+
constructor();
|
|
12
|
+
protected getDefaultConfig(): PlayerConfig;
|
|
13
|
+
protected getDefaultState(): PlayerState;
|
|
14
|
+
initialize(container: HTMLElement | string, config?: PlayerConfig): Promise<void>;
|
|
15
|
+
protected abstract setupPlayer(): Promise<void>;
|
|
16
|
+
abstract destroy(): Promise<void>;
|
|
17
|
+
abstract load(source: VideoSource): Promise<void>;
|
|
18
|
+
play(): Promise<void>;
|
|
19
|
+
pause(): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
abstract seek(time: number): void;
|
|
22
|
+
setVolume(level: number): void;
|
|
23
|
+
mute(): void;
|
|
24
|
+
unmute(): void;
|
|
25
|
+
toggleMute(): void;
|
|
26
|
+
abstract getQualities(): Quality[];
|
|
27
|
+
abstract getCurrentQuality(): Quality | null;
|
|
28
|
+
abstract setQuality(index: number): void;
|
|
29
|
+
abstract setAutoQuality(enabled: boolean): void;
|
|
30
|
+
setPlaybackRate(rate: number): void;
|
|
31
|
+
getPlaybackRate(): number;
|
|
32
|
+
getCurrentTime(): number;
|
|
33
|
+
getDuration(): number;
|
|
34
|
+
getBufferedPercentage(): number;
|
|
35
|
+
getState(): PlayerState;
|
|
36
|
+
isPlaying(): boolean;
|
|
37
|
+
isPaused(): boolean;
|
|
38
|
+
isEnded(): boolean;
|
|
39
|
+
abstract enterFullscreen(): Promise<void>;
|
|
40
|
+
abstract exitFullscreen(): Promise<void>;
|
|
41
|
+
toggleFullscreen(): Promise<void>;
|
|
42
|
+
abstract enterPictureInPicture(): Promise<void>;
|
|
43
|
+
abstract exitPictureInPicture(): Promise<void>;
|
|
44
|
+
on(event: keyof PlayerEvents, handler: Function): void;
|
|
45
|
+
off(event: keyof PlayerEvents, handler?: Function): void;
|
|
46
|
+
once(event: keyof PlayerEvents, handler: Function): void;
|
|
47
|
+
protected emit(event: keyof PlayerEvents, ...args: any[]): void;
|
|
48
|
+
setFreeDuration?(seconds: number): void;
|
|
49
|
+
resetFreePreviewGate?(): void;
|
|
50
|
+
getSubtitles(): SubtitleTrack[];
|
|
51
|
+
setSubtitleTrack(index: number): void;
|
|
52
|
+
disableSubtitles(): void;
|
|
53
|
+
protected abstract applySubtitleTrack(track: SubtitleTrack): void;
|
|
54
|
+
protected abstract removeSubtitles(): void;
|
|
55
|
+
protected handleError(error: PlayerError): void;
|
|
56
|
+
protected updateTime(time: number): void;
|
|
57
|
+
protected updateBuffered(percentage: number): void;
|
|
58
|
+
protected setBuffering(isBuffering: boolean): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=BasePlayer.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { VideoPlayer } from './VideoPlayer';
|
|
2
|
+
import { VideoPlayerConfig, PlatformInfo } from './interfaces';
|
|
3
|
+
export declare class PlayerFactory {
|
|
4
|
+
private static platformDetector;
|
|
5
|
+
static createPlayer(container: HTMLElement | any, config?: VideoPlayerConfig): Promise<VideoPlayer>;
|
|
6
|
+
static getPlatformInfo(): PlatformInfo;
|
|
7
|
+
static isFeatureSupported(feature: string): boolean;
|
|
8
|
+
private static getFeatureSupport;
|
|
9
|
+
static getOptimizedConfig(baseConfig?: VideoPlayerConfig): VideoPlayerConfig;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PlayerFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerFactory.d.ts","sourceRoot":"","sources":["../src/PlayerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAgB,YAAY,EAAE,MAAM,cAAc,CAAC;AAG7E,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA0B;WAQ5C,YAAY,CACvB,SAAS,EAAE,WAAW,GAAG,GAAG,EAC5B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,WAAW,CAAC;IAiDvB,MAAM,CAAC,eAAe,IAAI,YAAY;IAStC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKnD,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA2DhC,MAAM,CAAC,kBAAkB,CAAC,UAAU,GAAE,iBAAsB,GAAG,iBAAiB;CAwEjF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.PlayerFactory = void 0;
|
|
27
|
+
const interfaces_1 = require("./interfaces");
|
|
28
|
+
const PlatformDetector_1 = require("./utils/PlatformDetector");
|
|
29
|
+
class PlayerFactory {
|
|
30
|
+
static async createPlayer(container, config = {}) {
|
|
31
|
+
const platform = this.platformDetector.detect();
|
|
32
|
+
console.log(`Creating player for platform: ${platform.type}`);
|
|
33
|
+
switch (platform.type) {
|
|
34
|
+
case interfaces_1.PlatformType.IOS:
|
|
35
|
+
const { IOSPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/react-native')));
|
|
36
|
+
return new IOSPlayer(container, config);
|
|
37
|
+
case interfaces_1.PlatformType.ANDROID:
|
|
38
|
+
const { AndroidPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/react-native')));
|
|
39
|
+
return new AndroidPlayer(container, config);
|
|
40
|
+
case interfaces_1.PlatformType.TIZEN:
|
|
41
|
+
const { TizenPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/enact')));
|
|
42
|
+
return new TizenPlayer(container, config);
|
|
43
|
+
case interfaces_1.PlatformType.WEBOS:
|
|
44
|
+
const { WebOSPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/enact')));
|
|
45
|
+
return new WebOSPlayer(container, config);
|
|
46
|
+
case interfaces_1.PlatformType.ROKU:
|
|
47
|
+
const { RokuPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/roku')));
|
|
48
|
+
return new RokuPlayer(container, config);
|
|
49
|
+
case interfaces_1.PlatformType.ANDROID_TV:
|
|
50
|
+
const { AndroidTVPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/react-native')));
|
|
51
|
+
return new AndroidTVPlayer(container, config);
|
|
52
|
+
case interfaces_1.PlatformType.APPLE_TV:
|
|
53
|
+
const { AppleTVPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/react-native')));
|
|
54
|
+
return new AppleTVPlayer(container, config);
|
|
55
|
+
case interfaces_1.PlatformType.WINDOWS:
|
|
56
|
+
const { WindowsPlayer } = await Promise.resolve().then(() => __importStar(require('@video-framework/web')));
|
|
57
|
+
return new WindowsPlayer(container, config);
|
|
58
|
+
case interfaces_1.PlatformType.WEB:
|
|
59
|
+
default:
|
|
60
|
+
const { HTML5Player } = await Promise.resolve().then(() => __importStar(require('@video-framework/web')));
|
|
61
|
+
return new HTML5Player(container, config);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
static getPlatformInfo() {
|
|
65
|
+
return this.platformDetector.detect();
|
|
66
|
+
}
|
|
67
|
+
static isFeatureSupported(feature) {
|
|
68
|
+
const platform = this.platformDetector.detect();
|
|
69
|
+
return this.getFeatureSupport(platform.type, feature);
|
|
70
|
+
}
|
|
71
|
+
static getFeatureSupport(platform, feature) {
|
|
72
|
+
const featureMatrix = {
|
|
73
|
+
'drm-fairplay': [interfaces_1.PlatformType.IOS, interfaces_1.PlatformType.APPLE_TV],
|
|
74
|
+
'drm-widevine': [
|
|
75
|
+
interfaces_1.PlatformType.ANDROID,
|
|
76
|
+
interfaces_1.PlatformType.ANDROID_TV,
|
|
77
|
+
interfaces_1.PlatformType.TIZEN,
|
|
78
|
+
interfaces_1.PlatformType.WEBOS,
|
|
79
|
+
interfaces_1.PlatformType.WEB
|
|
80
|
+
],
|
|
81
|
+
'drm-playready': [
|
|
82
|
+
interfaces_1.PlatformType.TIZEN,
|
|
83
|
+
interfaces_1.PlatformType.WEBOS,
|
|
84
|
+
interfaces_1.PlatformType.ROKU,
|
|
85
|
+
interfaces_1.PlatformType.WINDOWS
|
|
86
|
+
],
|
|
87
|
+
'picture-in-picture': [
|
|
88
|
+
interfaces_1.PlatformType.IOS,
|
|
89
|
+
interfaces_1.PlatformType.ANDROID,
|
|
90
|
+
interfaces_1.PlatformType.WEB
|
|
91
|
+
],
|
|
92
|
+
'airplay': [interfaces_1.PlatformType.IOS, interfaces_1.PlatformType.APPLE_TV],
|
|
93
|
+
'chromecast': [interfaces_1.PlatformType.ANDROID, interfaces_1.PlatformType.WEB],
|
|
94
|
+
'offline-playback': [
|
|
95
|
+
interfaces_1.PlatformType.IOS,
|
|
96
|
+
interfaces_1.PlatformType.ANDROID,
|
|
97
|
+
interfaces_1.PlatformType.WEB
|
|
98
|
+
],
|
|
99
|
+
'4k-playback': [
|
|
100
|
+
interfaces_1.PlatformType.TIZEN,
|
|
101
|
+
interfaces_1.PlatformType.WEBOS,
|
|
102
|
+
interfaces_1.PlatformType.APPLE_TV,
|
|
103
|
+
interfaces_1.PlatformType.ANDROID_TV,
|
|
104
|
+
interfaces_1.PlatformType.ROKU
|
|
105
|
+
],
|
|
106
|
+
'hdr': [
|
|
107
|
+
interfaces_1.PlatformType.TIZEN,
|
|
108
|
+
interfaces_1.PlatformType.WEBOS,
|
|
109
|
+
interfaces_1.PlatformType.APPLE_TV,
|
|
110
|
+
interfaces_1.PlatformType.ROKU
|
|
111
|
+
],
|
|
112
|
+
'spatial-audio': [interfaces_1.PlatformType.IOS, interfaces_1.PlatformType.APPLE_TV],
|
|
113
|
+
'remote-control': [
|
|
114
|
+
interfaces_1.PlatformType.TIZEN,
|
|
115
|
+
interfaces_1.PlatformType.WEBOS,
|
|
116
|
+
interfaces_1.PlatformType.ROKU,
|
|
117
|
+
interfaces_1.PlatformType.ANDROID_TV,
|
|
118
|
+
interfaces_1.PlatformType.APPLE_TV
|
|
119
|
+
]
|
|
120
|
+
};
|
|
121
|
+
return featureMatrix[feature]?.includes(platform) || false;
|
|
122
|
+
}
|
|
123
|
+
static getOptimizedConfig(baseConfig = {}) {
|
|
124
|
+
const platform = this.platformDetector.detect();
|
|
125
|
+
const platformConfigs = {
|
|
126
|
+
[interfaces_1.PlatformType.IOS]: {
|
|
127
|
+
playsInline: true,
|
|
128
|
+
muted: true,
|
|
129
|
+
pictureInPicture: true
|
|
130
|
+
},
|
|
131
|
+
[interfaces_1.PlatformType.ANDROID]: {
|
|
132
|
+
playsInline: true,
|
|
133
|
+
muted: true
|
|
134
|
+
},
|
|
135
|
+
[interfaces_1.PlatformType.TIZEN]: {
|
|
136
|
+
controls: false,
|
|
137
|
+
adaptiveBitrate: {
|
|
138
|
+
autoLevelEnabled: true,
|
|
139
|
+
startLevel: -1
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
[interfaces_1.PlatformType.WEBOS]: {
|
|
143
|
+
controls: false,
|
|
144
|
+
adaptiveBitrate: {
|
|
145
|
+
autoLevelEnabled: true,
|
|
146
|
+
startLevel: -1
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
[interfaces_1.PlatformType.ROKU]: {
|
|
150
|
+
controls: false,
|
|
151
|
+
adaptiveBitrate: {
|
|
152
|
+
autoLevelEnabled: true
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
[interfaces_1.PlatformType.ANDROID_TV]: {
|
|
156
|
+
controls: false,
|
|
157
|
+
adaptiveBitrate: {
|
|
158
|
+
autoLevelEnabled: true,
|
|
159
|
+
maxBitrate: 8000000
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
[interfaces_1.PlatformType.APPLE_TV]: {
|
|
163
|
+
controls: false,
|
|
164
|
+
adaptiveBitrate: {
|
|
165
|
+
autoLevelEnabled: true,
|
|
166
|
+
maxBitrate: 10000000
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
[interfaces_1.PlatformType.WINDOWS]: {
|
|
170
|
+
controls: true,
|
|
171
|
+
pictureInPicture: false
|
|
172
|
+
},
|
|
173
|
+
[interfaces_1.PlatformType.WEB]: {
|
|
174
|
+
controls: true,
|
|
175
|
+
playsInline: true,
|
|
176
|
+
pictureInPicture: true
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const platformConfig = platformConfigs[platform.type] || {};
|
|
180
|
+
return {
|
|
181
|
+
...baseConfig,
|
|
182
|
+
...platformConfig,
|
|
183
|
+
...Object.keys(baseConfig).reduce((acc, key) => {
|
|
184
|
+
if (baseConfig[key] !== undefined) {
|
|
185
|
+
acc[key] = baseConfig[key];
|
|
186
|
+
}
|
|
187
|
+
return acc;
|
|
188
|
+
}, {})
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.PlayerFactory = PlayerFactory;
|
|
193
|
+
PlayerFactory.platformDetector = new PlatformDetector_1.PlatformDetector();
|
|
194
|
+
//# sourceMappingURL=PlayerFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerFactory.js","sourceRoot":"","sources":["../src/PlayerFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { VideoPlayerConfig, VideoSource, PlayerState, PlayerEvent, EventHandler, Quality, SubtitleTrack, AudioTrack, PlayerMetrics, PlayerError, DRMConfig } from './interfaces';
|
|
4
|
+
export declare abstract class VideoPlayer {
|
|
5
|
+
protected config: VideoPlayerConfig;
|
|
6
|
+
protected eventEmitter: EventEmitter;
|
|
7
|
+
protected state: PlayerState;
|
|
8
|
+
protected currentSource?: VideoSource;
|
|
9
|
+
protected metrics: PlayerMetrics;
|
|
10
|
+
protected errors: PlayerError[];
|
|
11
|
+
constructor(config?: VideoPlayerConfig);
|
|
12
|
+
abstract load(source: VideoSource): Promise<void>;
|
|
13
|
+
abstract play(): Promise<void>;
|
|
14
|
+
abstract pause(): void;
|
|
15
|
+
abstract stop(): void;
|
|
16
|
+
abstract seek(position: number): void;
|
|
17
|
+
abstract setVolume(volume: number): void;
|
|
18
|
+
abstract setPlaybackRate(rate: number): void;
|
|
19
|
+
abstract getCurrentTime(): number;
|
|
20
|
+
abstract getDuration(): number;
|
|
21
|
+
abstract getVolume(): number;
|
|
22
|
+
abstract getPlaybackRate(): number;
|
|
23
|
+
abstract isMuted(): boolean;
|
|
24
|
+
abstract setMuted(muted: boolean): void;
|
|
25
|
+
abstract getAvailableQualities(): Quality[];
|
|
26
|
+
abstract getCurrentQuality(): Quality | null;
|
|
27
|
+
abstract setQuality(quality: Quality): void;
|
|
28
|
+
abstract enableAutoQuality(enabled: boolean): void;
|
|
29
|
+
abstract getSubtitleTracks(): SubtitleTrack[];
|
|
30
|
+
abstract getCurrentSubtitleTrack(): SubtitleTrack | null;
|
|
31
|
+
abstract setSubtitleTrack(track: SubtitleTrack | null): void;
|
|
32
|
+
abstract getAudioTracks(): AudioTrack[];
|
|
33
|
+
abstract getCurrentAudioTrack(): AudioTrack | null;
|
|
34
|
+
abstract setAudioTrack(track: AudioTrack): void;
|
|
35
|
+
abstract enterFullscreen(): void;
|
|
36
|
+
abstract exitFullscreen(): void;
|
|
37
|
+
abstract isFullscreen(): boolean;
|
|
38
|
+
abstract enterPictureInPicture(): void;
|
|
39
|
+
abstract exitPictureInPicture(): void;
|
|
40
|
+
abstract isPictureInPicture(): boolean;
|
|
41
|
+
on(event: PlayerEvent, handler: EventHandler): void;
|
|
42
|
+
off(event: PlayerEvent, handler: EventHandler): void;
|
|
43
|
+
once(event: PlayerEvent, handler: EventHandler): void;
|
|
44
|
+
removeAllListeners(event?: PlayerEvent): void;
|
|
45
|
+
protected emit(event: PlayerEvent, data?: any): void;
|
|
46
|
+
getState(): PlayerState;
|
|
47
|
+
protected setState(newState: PlayerState): void;
|
|
48
|
+
getConfig(): VideoPlayerConfig;
|
|
49
|
+
updateConfig(config: Partial<VideoPlayerConfig>): void;
|
|
50
|
+
protected abstract applyConfig(): void;
|
|
51
|
+
getMetrics(): PlayerMetrics;
|
|
52
|
+
protected initializeMetrics(): PlayerMetrics;
|
|
53
|
+
protected generateSessionId(): string;
|
|
54
|
+
protected handleError(error: PlayerError): void;
|
|
55
|
+
protected trackAnalytics(event: string, data?: any): void;
|
|
56
|
+
protected abstract configureDRM(drmConfig: DRMConfig): Promise<void>;
|
|
57
|
+
abstract destroy(): void;
|
|
58
|
+
protected cleanup(): void;
|
|
59
|
+
protected formatTime(seconds: number): string;
|
|
60
|
+
private pad;
|
|
61
|
+
abstract getBufferedRanges(): TimeRanges;
|
|
62
|
+
abstract getSeekableRanges(): TimeRanges;
|
|
63
|
+
protected isBuffering(): boolean;
|
|
64
|
+
abstract getBandwidth(): number;
|
|
65
|
+
abstract getNetworkState(): number;
|
|
66
|
+
abstract getVideoWidth(): number;
|
|
67
|
+
abstract getVideoHeight(): number;
|
|
68
|
+
abstract getDroppedFrames(): number;
|
|
69
|
+
abstract getDecodedFrames(): number;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=VideoPlayer.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IVideoPlayer, PlayerConfig } from './interfaces/IVideoPlayer';
|
|
2
|
+
export type Platform = 'web' | 'ios' | 'android' | 'tizen' | 'webos' | 'roku' | 'androidtv' | 'appletv' | 'windows';
|
|
3
|
+
export declare class VideoPlayerFactory {
|
|
4
|
+
static create(platform: Platform, container: HTMLElement | string | any, config?: PlayerConfig): Promise<IVideoPlayer>;
|
|
5
|
+
static detectPlatform(): Platform;
|
|
6
|
+
static createForCurrentPlatform(container: HTMLElement | string | any, config?: PlayerConfig): Promise<IVideoPlayer>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=VideoPlayerFactory.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './interfaces';
|
|
2
|
+
export { BasePlayer } from './BasePlayer';
|
|
3
|
+
export { VideoPlayerFactory } from './VideoPlayerFactory';
|
|
4
|
+
export type { Platform } from './VideoPlayerFactory';
|
|
5
|
+
export { EventEmitter } from './utils/EventEmitter';
|
|
6
|
+
export declare const VERSION = "1.0.0";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
export interface VideoSource {
|
|
2
|
+
url: string;
|
|
3
|
+
type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto';
|
|
4
|
+
drm?: DRMConfig;
|
|
5
|
+
subtitles?: SubtitleTrack[];
|
|
6
|
+
metadata?: VideoMetadata;
|
|
7
|
+
}
|
|
8
|
+
export interface DRMConfig {
|
|
9
|
+
licenseUrl: string;
|
|
10
|
+
certificateUrl?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
type: 'widevine' | 'playready' | 'fairplay' | 'clearkey';
|
|
13
|
+
}
|
|
14
|
+
export interface SubtitleTrack {
|
|
15
|
+
url: string;
|
|
16
|
+
language: string;
|
|
17
|
+
label: string;
|
|
18
|
+
kind: 'subtitles' | 'captions' | 'descriptions';
|
|
19
|
+
default?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface VideoMetadata {
|
|
22
|
+
id?: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
duration?: number;
|
|
26
|
+
thumbnailUrl?: string;
|
|
27
|
+
posterUrl?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface Quality {
|
|
30
|
+
height: number;
|
|
31
|
+
width: number;
|
|
32
|
+
bitrate: number;
|
|
33
|
+
label: string;
|
|
34
|
+
index: number;
|
|
35
|
+
}
|
|
36
|
+
export interface PlayerState {
|
|
37
|
+
isPlaying: boolean;
|
|
38
|
+
isPaused: boolean;
|
|
39
|
+
isBuffering: boolean;
|
|
40
|
+
isEnded: boolean;
|
|
41
|
+
isError: boolean;
|
|
42
|
+
currentTime: number;
|
|
43
|
+
duration: number;
|
|
44
|
+
bufferedPercentage: number;
|
|
45
|
+
volume: number;
|
|
46
|
+
isMuted: boolean;
|
|
47
|
+
playbackRate: number;
|
|
48
|
+
currentQuality?: Quality;
|
|
49
|
+
availableQualities: Quality[];
|
|
50
|
+
}
|
|
51
|
+
export interface PlayerEvents {
|
|
52
|
+
onReady?: () => void;
|
|
53
|
+
onPlay?: () => void;
|
|
54
|
+
onPause?: () => void;
|
|
55
|
+
onEnded?: () => void;
|
|
56
|
+
onTimeUpdate?: (time: number) => void;
|
|
57
|
+
onBuffering?: (isBuffering: boolean) => void;
|
|
58
|
+
onError?: (error: PlayerError) => void;
|
|
59
|
+
onQualityChanged?: (quality: Quality) => void;
|
|
60
|
+
onVolumeChanged?: (volume: number) => void;
|
|
61
|
+
onFullscreenChanged?: (isFullscreen: boolean) => void;
|
|
62
|
+
onProgress?: (buffered: number) => void;
|
|
63
|
+
onSeeking?: () => void;
|
|
64
|
+
onSeeked?: () => void;
|
|
65
|
+
onLoadedMetadata?: (metadata: VideoMetadata) => void;
|
|
66
|
+
onFreePreviewEnded?: () => void;
|
|
67
|
+
epgToggle?: (data?: any) => void;
|
|
68
|
+
epgDataSet?: (data?: any) => void;
|
|
69
|
+
}
|
|
70
|
+
export interface PlayerError {
|
|
71
|
+
code: string;
|
|
72
|
+
message: string;
|
|
73
|
+
type: 'network' | 'media' | 'drm' | 'unknown';
|
|
74
|
+
fatal: boolean;
|
|
75
|
+
details?: any;
|
|
76
|
+
}
|
|
77
|
+
export interface PaywallConfig {
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
apiBase: string;
|
|
80
|
+
userId: string;
|
|
81
|
+
videoId: string;
|
|
82
|
+
gateways: Array<'stripe' | 'cashfree'>;
|
|
83
|
+
branding?: {
|
|
84
|
+
title?: string;
|
|
85
|
+
description?: string;
|
|
86
|
+
logoUrl?: string;
|
|
87
|
+
theme?: any;
|
|
88
|
+
};
|
|
89
|
+
popup?: {
|
|
90
|
+
width?: number;
|
|
91
|
+
height?: number;
|
|
92
|
+
};
|
|
93
|
+
emailAuth?: {
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
skipIfAuthenticated?: boolean;
|
|
96
|
+
sessionStorage?: {
|
|
97
|
+
tokenKey?: string;
|
|
98
|
+
refreshTokenKey?: string;
|
|
99
|
+
userIdKey?: string;
|
|
100
|
+
};
|
|
101
|
+
api?: {
|
|
102
|
+
requestOtp: string;
|
|
103
|
+
verifyOtp: string;
|
|
104
|
+
refreshToken?: string;
|
|
105
|
+
logout?: string;
|
|
106
|
+
};
|
|
107
|
+
ui?: {
|
|
108
|
+
title?: string;
|
|
109
|
+
description?: string;
|
|
110
|
+
emailPlaceholder?: string;
|
|
111
|
+
otpPlaceholder?: string;
|
|
112
|
+
submitButtonText?: string;
|
|
113
|
+
resendButtonText?: string;
|
|
114
|
+
resendCooldown?: number;
|
|
115
|
+
};
|
|
116
|
+
validation?: {
|
|
117
|
+
otpLength?: number;
|
|
118
|
+
otpTimeout?: number;
|
|
119
|
+
rateLimiting?: {
|
|
120
|
+
maxAttempts?: number;
|
|
121
|
+
windowMinutes?: number;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export interface PlayerConfig {
|
|
127
|
+
autoPlay?: boolean;
|
|
128
|
+
muted?: boolean;
|
|
129
|
+
volume?: number;
|
|
130
|
+
controls?: boolean;
|
|
131
|
+
loop?: boolean;
|
|
132
|
+
preload?: 'none' | 'metadata' | 'auto';
|
|
133
|
+
crossOrigin?: 'anonymous' | 'use-credentials';
|
|
134
|
+
playsInline?: boolean;
|
|
135
|
+
defaultQuality?: number;
|
|
136
|
+
enableAdaptiveBitrate?: boolean;
|
|
137
|
+
debug?: boolean;
|
|
138
|
+
freeDuration?: number;
|
|
139
|
+
paywall?: PaywallConfig;
|
|
140
|
+
}
|
|
141
|
+
export interface IVideoPlayer {
|
|
142
|
+
initialize(container: HTMLElement | string, config?: PlayerConfig): Promise<void>;
|
|
143
|
+
destroy(): Promise<void>;
|
|
144
|
+
load(source: VideoSource): Promise<void>;
|
|
145
|
+
play(): Promise<void>;
|
|
146
|
+
pause(): void;
|
|
147
|
+
stop(): void;
|
|
148
|
+
seek(time: number): void;
|
|
149
|
+
setVolume(level: number): void;
|
|
150
|
+
mute(): void;
|
|
151
|
+
unmute(): void;
|
|
152
|
+
toggleMute(): void;
|
|
153
|
+
getQualities(): Quality[];
|
|
154
|
+
getCurrentQuality(): Quality | null;
|
|
155
|
+
setQuality(index: number): void;
|
|
156
|
+
setAutoQuality(enabled: boolean): void;
|
|
157
|
+
setPlaybackRate(rate: number): void;
|
|
158
|
+
getPlaybackRate(): number;
|
|
159
|
+
getCurrentTime(): number;
|
|
160
|
+
getDuration(): number;
|
|
161
|
+
getBufferedPercentage(): number;
|
|
162
|
+
getState(): PlayerState;
|
|
163
|
+
isPlaying(): boolean;
|
|
164
|
+
isPaused(): boolean;
|
|
165
|
+
isEnded(): boolean;
|
|
166
|
+
enterFullscreen(): Promise<void>;
|
|
167
|
+
exitFullscreen(): Promise<void>;
|
|
168
|
+
toggleFullscreen(): Promise<void>;
|
|
169
|
+
enterPictureInPicture(): Promise<void>;
|
|
170
|
+
exitPictureInPicture(): Promise<void>;
|
|
171
|
+
on(event: keyof PlayerEvents, handler: Function): void;
|
|
172
|
+
off(event: keyof PlayerEvents, handler?: Function): void;
|
|
173
|
+
once(event: keyof PlayerEvents, handler: Function): void;
|
|
174
|
+
getSubtitles(): SubtitleTrack[];
|
|
175
|
+
setSubtitleTrack(index: number): void;
|
|
176
|
+
disableSubtitles(): void;
|
|
177
|
+
setAudioTrack?(index: number): void;
|
|
178
|
+
getAudioTracks?(): any[];
|
|
179
|
+
getThumbnail?(time: number): string;
|
|
180
|
+
getStats?(): any;
|
|
181
|
+
setFreeDuration?(seconds: number): void;
|
|
182
|
+
resetFreePreviewGate?(): void;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=IVideoPlayer.d.ts.map
|