libbitsub 1.10.2 → 1.11.0
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/README.md +184 -34
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/hlsjs.d.ts +45 -0
- package/dist/integrations/hlsjs.d.ts.map +1 -0
- package/dist/integrations/hlsjs.js +121 -0
- package/dist/integrations/hlsjs.js.map +1 -0
- package/dist/integrations/index.d.ts +11 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +11 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/react.d.ts +55 -0
- package/dist/integrations/react.d.ts.map +1 -0
- package/dist/integrations/react.js +127 -0
- package/dist/integrations/react.js.map +1 -0
- package/dist/integrations/shaka.d.ts +38 -0
- package/dist/integrations/shaka.d.ts.map +1 -0
- package/dist/integrations/shaka.js +71 -0
- package/dist/integrations/shaka.js.map +1 -0
- package/dist/integrations/shared.d.ts +41 -0
- package/dist/integrations/shared.d.ts.map +1 -0
- package/dist/integrations/shared.js +123 -0
- package/dist/integrations/shared.js.map +1 -0
- package/dist/integrations/videojs.d.ts +85 -0
- package/dist/integrations/videojs.d.ts.map +1 -0
- package/dist/integrations/videojs.js +111 -0
- package/dist/integrations/videojs.js.map +1 -0
- package/dist/ts/diagnostics.d.ts.map +1 -1
- package/dist/ts/diagnostics.js.map +1 -1
- package/dist/ts/frame-export.d.ts.map +1 -1
- package/dist/ts/frame-export.js +4 -4
- package/dist/ts/frame-export.js.map +1 -1
- package/dist/ts/parsers.d.ts +7 -6
- package/dist/ts/parsers.d.ts.map +1 -1
- package/dist/ts/parsers.js +76 -13
- package/dist/ts/parsers.js.map +1 -1
- package/dist/ts/range-loader.d.ts +31 -0
- package/dist/ts/range-loader.d.ts.map +1 -0
- package/dist/ts/range-loader.js +220 -0
- package/dist/ts/range-loader.js.map +1 -0
- package/dist/ts/renderers.d.ts +14 -0
- package/dist/ts/renderers.d.ts.map +1 -1
- package/dist/ts/renderers.js +445 -162
- package/dist/ts/renderers.js.map +1 -1
- package/dist/ts/types.d.ts +51 -1
- package/dist/ts/types.d.ts.map +1 -1
- package/dist/ts/utils.d.ts.map +1 -1
- package/dist/ts/utils.js.map +1 -1
- package/dist/ts/wasm.d.ts +2 -0
- package/dist/ts/wasm.d.ts.map +1 -1
- package/dist/ts/wasm.js +12 -0
- package/dist/ts/wasm.js.map +1 -1
- package/dist/ts/webgl2-renderer.d.ts +9 -0
- package/dist/ts/webgl2-renderer.d.ts.map +1 -1
- package/dist/ts/webgl2-renderer.js +34 -0
- package/dist/ts/webgl2-renderer.js.map +1 -1
- package/dist/ts/webgpu-renderer.d.ts +9 -0
- package/dist/ts/webgpu-renderer.d.ts.map +1 -1
- package/dist/ts/webgpu-renderer.js +70 -2
- package/dist/ts/webgpu-renderer.js.map +1 -1
- package/dist/ts/worker.d.ts +11 -0
- package/dist/ts/worker.d.ts.map +1 -1
- package/dist/ts/worker.js +229 -161
- package/dist/ts/worker.js.map +1 -1
- package/dist/wrapper.d.ts +3 -1
- package/dist/wrapper.d.ts.map +1 -1
- package/dist/wrapper.js +2 -0
- package/dist/wrapper.js.map +1 -1
- package/examples/README.md +38 -0
- package/examples/hlsjs/README.md +53 -0
- package/examples/react/README.md +60 -0
- package/examples/shaka/README.md +61 -0
- package/examples/videojs/README.md +55 -0
- package/package.json +64 -7
- package/pkg/README.md +184 -34
- package/pkg/libbitsub.d.ts +14 -0
- package/pkg/libbitsub.js +50 -0
- package/pkg/libbitsub_bg.wasm +0 -0
- package/pkg/libbitsub_bg.wasm.d.ts +7 -0
- package/pkg/package.json +1 -1
- package/src/integrations/hlsjs.ts +154 -0
- package/src/integrations/index.ts +36 -0
- package/src/integrations/react.tsx +170 -0
- package/src/integrations/shaka.ts +92 -0
- package/src/integrations/shared.ts +170 -0
- package/src/integrations/videojs.ts +200 -0
- package/src/wrapper.ts +12 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Optional React bindings for libbitsub bitmap subtitles.
|
|
4
|
+
*
|
|
5
|
+
* Peer dependency: react >= 18
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { useRef } from 'react'
|
|
10
|
+
* import { useBitSub } from 'libbitsub/react'
|
|
11
|
+
*
|
|
12
|
+
* function Player({ src, subUrl }: { src: string; subUrl: string }) {
|
|
13
|
+
* const videoRef = useRef<HTMLVideoElement>(null)
|
|
14
|
+
* useBitSub(videoRef, { subUrl })
|
|
15
|
+
* return (
|
|
16
|
+
* <div style={{ position: 'relative' }}>
|
|
17
|
+
* <video ref={videoRef} src={src} controls playsInline />
|
|
18
|
+
* </div>
|
|
19
|
+
* )
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Prefer either `useBitSub` *or* `BitSubOverlay` for a given video — not both.
|
|
24
|
+
*/
|
|
25
|
+
import { useEffect, useRef, useState } from 'react';
|
|
26
|
+
import { attachBitSub } from './shared';
|
|
27
|
+
function sourceKey(source) {
|
|
28
|
+
if (!source)
|
|
29
|
+
return '';
|
|
30
|
+
return JSON.stringify({
|
|
31
|
+
subUrl: source.subUrl ?? null,
|
|
32
|
+
idxUrl: source.idxUrl ?? null,
|
|
33
|
+
fileName: source.fileName ?? null,
|
|
34
|
+
hasSubContent: Boolean(source.subContent),
|
|
35
|
+
hasIdxContent: Boolean(source.idxContent),
|
|
36
|
+
cacheLimit: source.cacheLimit ?? null,
|
|
37
|
+
timeOffset: source.timeOffset ?? null,
|
|
38
|
+
streamingLoad: source.streamingLoad ?? null,
|
|
39
|
+
rangeRequests: source.rangeRequests ?? null,
|
|
40
|
+
debug: source.debug ?? null,
|
|
41
|
+
displaySettings: source.displaySettings ?? null,
|
|
42
|
+
prefetchWindow: source.prefetchWindow ?? null
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Bind a libbitsub renderer to a video element ref for the lifetime of the source.
|
|
47
|
+
* Cleans up automatically on unmount or when the source identity changes.
|
|
48
|
+
*/
|
|
49
|
+
export function useBitSub(videoRef, options) {
|
|
50
|
+
const controllerRef = useRef(null);
|
|
51
|
+
const [controller, setController] = useState(null);
|
|
52
|
+
const [error, setError] = useState(null);
|
|
53
|
+
const onEventRef = useRef(undefined);
|
|
54
|
+
const onWarningRef = useRef(undefined);
|
|
55
|
+
const onErrorRef = useRef(undefined);
|
|
56
|
+
const onLoadingRef = useRef(undefined);
|
|
57
|
+
const onLoadedRef = useRef(undefined);
|
|
58
|
+
onEventRef.current = options?.onEvent;
|
|
59
|
+
onWarningRef.current = options?.onWarning;
|
|
60
|
+
onErrorRef.current = options?.onError;
|
|
61
|
+
onLoadingRef.current = options?.onLoading;
|
|
62
|
+
onLoadedRef.current = options?.onLoaded;
|
|
63
|
+
const enabled = options?.enabled !== false;
|
|
64
|
+
const key = sourceKey(options);
|
|
65
|
+
const displaySettings = options?.displaySettings;
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
setError(null);
|
|
68
|
+
const video = videoRef.current;
|
|
69
|
+
if (!video || !options || !enabled) {
|
|
70
|
+
controllerRef.current?.dispose();
|
|
71
|
+
controllerRef.current = null;
|
|
72
|
+
setController(null);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const { enabled: _enabled, onEvent: _onEvent, onWarning: _onWarning, onError: _onError, onLoading: _onLoading, onLoaded: _onLoaded, ...source } = options;
|
|
76
|
+
const attachOptions = {
|
|
77
|
+
...source,
|
|
78
|
+
onEvent: (event) => onEventRef.current?.(event),
|
|
79
|
+
onWarning: (warning) => onWarningRef.current?.(warning),
|
|
80
|
+
onError: (err) => {
|
|
81
|
+
setError(err);
|
|
82
|
+
onErrorRef.current?.(err);
|
|
83
|
+
},
|
|
84
|
+
onLoading: () => onLoadingRef.current?.(),
|
|
85
|
+
onLoaded: () => onLoadedRef.current?.()
|
|
86
|
+
};
|
|
87
|
+
try {
|
|
88
|
+
const next = attachBitSub(video, attachOptions);
|
|
89
|
+
controllerRef.current = next;
|
|
90
|
+
setController(next);
|
|
91
|
+
return () => {
|
|
92
|
+
next.dispose();
|
|
93
|
+
if (controllerRef.current === next) {
|
|
94
|
+
controllerRef.current = null;
|
|
95
|
+
setController(null);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const resolved = err instanceof Error ? err : new Error(String(err));
|
|
101
|
+
setError(resolved);
|
|
102
|
+
onErrorRef.current?.(resolved);
|
|
103
|
+
controllerRef.current = null;
|
|
104
|
+
setController(null);
|
|
105
|
+
}
|
|
106
|
+
// key captures source identity; callback props stay fresh via refs
|
|
107
|
+
}, [videoRef, key, enabled]);
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (displaySettings) {
|
|
110
|
+
controllerRef.current?.setDisplaySettings(displaySettings);
|
|
111
|
+
}
|
|
112
|
+
}, [displaySettings]);
|
|
113
|
+
return { controller, error };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Declarative overlay helper. Renders nothing visible itself — libbitsub attaches
|
|
117
|
+
* its canvas next to the video element. Useful when you want JSX-configured tracks.
|
|
118
|
+
*/
|
|
119
|
+
export function BitSubOverlay(props) {
|
|
120
|
+
const { videoRef, className, style, ...options } = props;
|
|
121
|
+
useBitSub(videoRef, options);
|
|
122
|
+
if (!className && !style)
|
|
123
|
+
return null;
|
|
124
|
+
return _jsx("span", { className: className, style: { display: 'none', ...style }, "aria-hidden": 'true' });
|
|
125
|
+
}
|
|
126
|
+
export { attachBitSub, createBitSubRenderer } from './shared';
|
|
127
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/integrations/react.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Shaka Player adapter for libbitsub bitmap subtitles.
|
|
3
|
+
*
|
|
4
|
+
* Bitmap PGS/VobSub tracks are not native Shaka text tracks — this helper
|
|
5
|
+
* overlays libbitsub on the player media element.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import shaka from 'shaka-player'
|
|
10
|
+
* import { attachBitSubToShaka } from 'libbitsub/shaka'
|
|
11
|
+
*
|
|
12
|
+
* const player = new shaka.Player(video)
|
|
13
|
+
* await player.load(manifestUri)
|
|
14
|
+
* const bitsub = attachBitSubToShaka(player, { subUrl: '/subs/movie.sup' })
|
|
15
|
+
* // later
|
|
16
|
+
* bitsub.dispose()
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { type AttachBitSubOptions, type BitSubController } from './shared';
|
|
20
|
+
/** Minimal Shaka Player surface used by the adapter. */
|
|
21
|
+
export interface ShakaPlayerLike {
|
|
22
|
+
getMediaElement(): HTMLMediaElement | null;
|
|
23
|
+
addEventListener?(type: string, listener: (...args: unknown[]) => void): void;
|
|
24
|
+
removeEventListener?(type: string, listener: (...args: unknown[]) => void): void;
|
|
25
|
+
}
|
|
26
|
+
export type BitSubShakaOptions = AttachBitSubOptions;
|
|
27
|
+
export interface BitSubShakaHandle extends BitSubController {
|
|
28
|
+
/** Underlying Shaka player reference. */
|
|
29
|
+
readonly player: ShakaPlayerLike;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Attach libbitsub to a Shaka Player instance.
|
|
33
|
+
* Rebinds automatically when Shaka swaps the media element (if event APIs exist).
|
|
34
|
+
*/
|
|
35
|
+
export declare function attachBitSubToShaka(player: ShakaPlayerLike, options?: BitSubShakaOptions): BitSubShakaHandle;
|
|
36
|
+
export type { AttachBitSubOptions, BitSubController, BitSubSourceOptions, BitSubRenderer } from './shared';
|
|
37
|
+
export { attachBitSub, createBitSubRenderer } from './shared';
|
|
38
|
+
//# sourceMappingURL=shaka.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaka.d.ts","sourceRoot":"","sources":["../../src/integrations/shaka.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAExF,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAAA;IAC1C,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7E,mBAAmB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CACjF;AAED,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAA;AAEpD,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAiDhH;AAED,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC1G,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Shaka Player adapter for libbitsub bitmap subtitles.
|
|
3
|
+
*
|
|
4
|
+
* Bitmap PGS/VobSub tracks are not native Shaka text tracks — this helper
|
|
5
|
+
* overlays libbitsub on the player media element.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import shaka from 'shaka-player'
|
|
10
|
+
* import { attachBitSubToShaka } from 'libbitsub/shaka'
|
|
11
|
+
*
|
|
12
|
+
* const player = new shaka.Player(video)
|
|
13
|
+
* await player.load(manifestUri)
|
|
14
|
+
* const bitsub = attachBitSubToShaka(player, { subUrl: '/subs/movie.sup' })
|
|
15
|
+
* // later
|
|
16
|
+
* bitsub.dispose()
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { attachBitSub } from './shared';
|
|
20
|
+
/**
|
|
21
|
+
* Attach libbitsub to a Shaka Player instance.
|
|
22
|
+
* Rebinds automatically when Shaka swaps the media element (if event APIs exist).
|
|
23
|
+
*/
|
|
24
|
+
export function attachBitSubToShaka(player, options = {}) {
|
|
25
|
+
const media = player.getMediaElement();
|
|
26
|
+
if (!(media instanceof HTMLVideoElement)) {
|
|
27
|
+
throw new Error('libbitsub Shaka adapter requires a player with an HTMLVideoElement media element');
|
|
28
|
+
}
|
|
29
|
+
const controller = attachBitSub(media, options);
|
|
30
|
+
const onLoaded = () => {
|
|
31
|
+
if (controller.disposed)
|
|
32
|
+
return;
|
|
33
|
+
const next = player.getMediaElement();
|
|
34
|
+
if (next instanceof HTMLVideoElement) {
|
|
35
|
+
controller.setVideo(next);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const onUnloading = () => {
|
|
39
|
+
if (!controller.disposed)
|
|
40
|
+
controller.clear();
|
|
41
|
+
};
|
|
42
|
+
player.addEventListener?.('loaded', onLoaded);
|
|
43
|
+
player.addEventListener?.('unloading', onUnloading);
|
|
44
|
+
const dispose = () => {
|
|
45
|
+
player.removeEventListener?.('loaded', onLoaded);
|
|
46
|
+
player.removeEventListener?.('unloading', onUnloading);
|
|
47
|
+
controller.dispose();
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
player,
|
|
51
|
+
get renderer() {
|
|
52
|
+
return controller.renderer;
|
|
53
|
+
},
|
|
54
|
+
get video() {
|
|
55
|
+
return controller.video;
|
|
56
|
+
},
|
|
57
|
+
get disposed() {
|
|
58
|
+
return controller.disposed;
|
|
59
|
+
},
|
|
60
|
+
load: (source) => controller.load(source),
|
|
61
|
+
clear: () => controller.clear(),
|
|
62
|
+
dispose,
|
|
63
|
+
getDisplaySettings: () => controller.getDisplaySettings(),
|
|
64
|
+
setDisplaySettings: (settings) => controller.setDisplaySettings(settings),
|
|
65
|
+
resetDisplaySettings: () => controller.resetDisplaySettings(),
|
|
66
|
+
getStats: () => controller.getStats(),
|
|
67
|
+
setVideo: (video) => controller.setVideo(video)
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export { attachBitSub, createBitSubRenderer } from './shared';
|
|
71
|
+
//# sourceMappingURL=shaka.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaka.js","sourceRoot":"","sources":["../../src/integrations/shaka.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAmD,MAAM,UAAU,CAAA;AAgBxF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuB,EAAE,OAAO,GAAuB,EAAE;IAC3F,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;IACtC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAA;IACrG,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAE/C,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,UAAU,CAAC,QAAQ;YAAE,OAAM;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QACrC,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;YACrC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ;YAAE,UAAU,CAAC,KAAK,EAAE,CAAA;IAC9C,CAAC,CAAA;IAED,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAEnD,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,MAAM,CAAC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAChD,MAAM,CAAC,mBAAmB,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACtD,UAAU,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,OAAO;QACL,MAAM;QACN,IAAI,QAAQ;YACV,OAAO,UAAU,CAAC,QAAQ,CAAA;QAC5B,CAAC;QACD,IAAI,KAAK;YACP,OAAO,UAAU,CAAC,KAAK,CAAA;QACzB,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,UAAU,CAAC,QAAQ,CAAA;QAC5B,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACzC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;QAC/B,OAAO;QACP,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE;QACzD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACzE,oBAAoB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE;QAC7D,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;QACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;KAChD,CAAA;AACH,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared player-integration helpers for libbitsub.
|
|
3
|
+
* Optional adapters build on this surface so the core package stays dependency-free.
|
|
4
|
+
*/
|
|
5
|
+
import { type AutoVideoSubtitleOptions, type PgsRenderer, type SubtitleDisplaySettings, type SubtitleRendererStats, type VobSubRenderer } from '../wrapper';
|
|
6
|
+
/** High-level renderer produced by integrations. */
|
|
7
|
+
export type BitSubRenderer = PgsRenderer | VobSubRenderer;
|
|
8
|
+
/** Subtitle source + renderer options without a bound video element. */
|
|
9
|
+
export type BitSubSourceOptions = Omit<AutoVideoSubtitleOptions, 'video'>;
|
|
10
|
+
export interface BitSubController {
|
|
11
|
+
/** Active renderer, or null when no track is loaded. */
|
|
12
|
+
readonly renderer: BitSubRenderer | null;
|
|
13
|
+
/** Currently bound video element. */
|
|
14
|
+
readonly video: HTMLVideoElement | null;
|
|
15
|
+
/** Load or replace the active subtitle track. */
|
|
16
|
+
load(source: BitSubSourceOptions): BitSubRenderer;
|
|
17
|
+
/** Remove the active track without disposing the controller. */
|
|
18
|
+
clear(): void;
|
|
19
|
+
/** Tear down the renderer and release the controller. */
|
|
20
|
+
dispose(): void;
|
|
21
|
+
/** Whether {@link dispose} has already been called. */
|
|
22
|
+
readonly disposed: boolean;
|
|
23
|
+
getDisplaySettings(): SubtitleDisplaySettings | null;
|
|
24
|
+
setDisplaySettings(settings: Partial<SubtitleDisplaySettings>): void;
|
|
25
|
+
resetDisplaySettings(): void;
|
|
26
|
+
getStats(): SubtitleRendererStats | null;
|
|
27
|
+
/** Rebind to another video element, keeping the last source when present. */
|
|
28
|
+
setVideo(video: HTMLVideoElement | null): void;
|
|
29
|
+
}
|
|
30
|
+
export interface AttachBitSubOptions extends BitSubSourceOptions {
|
|
31
|
+
/** When false, skip the initial load even if source fields are present. Default true. */
|
|
32
|
+
autoLoad?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Attach a disposable controller to a video element.
|
|
36
|
+
* Call {@link BitSubController.load} to start a track, or pass source fields to auto-load.
|
|
37
|
+
*/
|
|
38
|
+
export declare function attachBitSub(video: HTMLVideoElement, options?: AttachBitSubOptions): BitSubController;
|
|
39
|
+
/** Convenience one-shot helper used by thin player wrappers. */
|
|
40
|
+
export declare function createBitSubRenderer(video: HTMLVideoElement, source: BitSubSourceOptions): BitSubRenderer;
|
|
41
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/integrations/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,YAAY,CAAA;AAEnB,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,cAAc,CAAA;AAEzD,wEAAwE;AACxE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAA;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;IACxC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACvC,iDAAiD;IACjD,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAAA;IACjD,gEAAgE;IAChE,KAAK,IAAI,IAAI,CAAA;IACb,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAA;IACf,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAAA;IACpD,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAA;IACpE,oBAAoB,IAAI,IAAI,CAAA;IAC5B,QAAQ,IAAI,qBAAqB,GAAG,IAAI,CAAA;IACxC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAcD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,GAAE,mBAAwB,GAAG,gBAAgB,CAmGzG;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAKzG"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared player-integration helpers for libbitsub.
|
|
3
|
+
* Optional adapters build on this surface so the core package stays dependency-free.
|
|
4
|
+
*/
|
|
5
|
+
import { createAutoSubtitleRenderer } from '../wrapper';
|
|
6
|
+
function hasSubtitleSource(source) {
|
|
7
|
+
if (!source)
|
|
8
|
+
return false;
|
|
9
|
+
return Boolean(source.subUrl || source.subContent || source.idxUrl || source.idxContent || source.fileName);
|
|
10
|
+
}
|
|
11
|
+
function assertVideo(video) {
|
|
12
|
+
if (!video) {
|
|
13
|
+
throw new Error('libbitsub integration requires an HTMLVideoElement');
|
|
14
|
+
}
|
|
15
|
+
return video;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Attach a disposable controller to a video element.
|
|
19
|
+
* Call {@link BitSubController.load} to start a track, or pass source fields to auto-load.
|
|
20
|
+
*/
|
|
21
|
+
export function attachBitSub(video, options = {}) {
|
|
22
|
+
const { autoLoad = true, ...initialSource } = options;
|
|
23
|
+
let disposed = false;
|
|
24
|
+
let boundVideo = video;
|
|
25
|
+
let renderer = null;
|
|
26
|
+
let lastSource = hasSubtitleSource(initialSource) ? { ...initialSource } : null;
|
|
27
|
+
const clearRenderer = () => {
|
|
28
|
+
if (!renderer)
|
|
29
|
+
return;
|
|
30
|
+
renderer.dispose();
|
|
31
|
+
renderer = null;
|
|
32
|
+
};
|
|
33
|
+
const controller = {
|
|
34
|
+
get renderer() {
|
|
35
|
+
return renderer;
|
|
36
|
+
},
|
|
37
|
+
get video() {
|
|
38
|
+
return boundVideo;
|
|
39
|
+
},
|
|
40
|
+
get disposed() {
|
|
41
|
+
return disposed;
|
|
42
|
+
},
|
|
43
|
+
load(source) {
|
|
44
|
+
if (disposed) {
|
|
45
|
+
throw new Error('BitSubController has been disposed');
|
|
46
|
+
}
|
|
47
|
+
const activeVideo = assertVideo(boundVideo);
|
|
48
|
+
if (!hasSubtitleSource(source)) {
|
|
49
|
+
throw new Error('BitSubController.load requires subUrl, subContent, or a detectable fileName');
|
|
50
|
+
}
|
|
51
|
+
clearRenderer();
|
|
52
|
+
lastSource = { ...source };
|
|
53
|
+
renderer = createAutoSubtitleRenderer({
|
|
54
|
+
...source,
|
|
55
|
+
video: activeVideo
|
|
56
|
+
});
|
|
57
|
+
return renderer;
|
|
58
|
+
},
|
|
59
|
+
clear() {
|
|
60
|
+
if (disposed)
|
|
61
|
+
return;
|
|
62
|
+
clearRenderer();
|
|
63
|
+
lastSource = null;
|
|
64
|
+
},
|
|
65
|
+
dispose() {
|
|
66
|
+
if (disposed)
|
|
67
|
+
return;
|
|
68
|
+
disposed = true;
|
|
69
|
+
clearRenderer();
|
|
70
|
+
lastSource = null;
|
|
71
|
+
boundVideo = null;
|
|
72
|
+
},
|
|
73
|
+
getDisplaySettings() {
|
|
74
|
+
return renderer?.getDisplaySettings() ?? null;
|
|
75
|
+
},
|
|
76
|
+
setDisplaySettings(settings) {
|
|
77
|
+
renderer?.setDisplaySettings(settings);
|
|
78
|
+
},
|
|
79
|
+
resetDisplaySettings() {
|
|
80
|
+
renderer?.resetDisplaySettings();
|
|
81
|
+
},
|
|
82
|
+
getStats() {
|
|
83
|
+
return renderer?.getStats() ?? null;
|
|
84
|
+
},
|
|
85
|
+
setVideo(nextVideo) {
|
|
86
|
+
if (disposed) {
|
|
87
|
+
throw new Error('BitSubController has been disposed');
|
|
88
|
+
}
|
|
89
|
+
if (nextVideo === boundVideo) {
|
|
90
|
+
// Same element: still materialize a pending source (e.g. delayed autoLoad).
|
|
91
|
+
if (nextVideo && !renderer && lastSource) {
|
|
92
|
+
renderer = createAutoSubtitleRenderer({
|
|
93
|
+
...lastSource,
|
|
94
|
+
video: nextVideo
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const previousSource = lastSource;
|
|
100
|
+
clearRenderer();
|
|
101
|
+
boundVideo = nextVideo;
|
|
102
|
+
if (nextVideo && previousSource) {
|
|
103
|
+
lastSource = previousSource;
|
|
104
|
+
renderer = createAutoSubtitleRenderer({
|
|
105
|
+
...previousSource,
|
|
106
|
+
video: nextVideo
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
if (autoLoad && lastSource) {
|
|
112
|
+
controller.load(lastSource);
|
|
113
|
+
}
|
|
114
|
+
return controller;
|
|
115
|
+
}
|
|
116
|
+
/** Convenience one-shot helper used by thin player wrappers. */
|
|
117
|
+
export function createBitSubRenderer(video, source) {
|
|
118
|
+
return createAutoSubtitleRenderer({
|
|
119
|
+
...source,
|
|
120
|
+
video: assertVideo(video)
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/integrations/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Video.js plugin for libbitsub bitmap subtitles.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import videojs from 'video.js'
|
|
7
|
+
* import { registerBitSubPlugin } from 'libbitsub/videojs'
|
|
8
|
+
*
|
|
9
|
+
* registerBitSubPlugin(videojs)
|
|
10
|
+
* const player = videojs('my-video')
|
|
11
|
+
* player.bitsub({ subUrl: '/subs/movie.sup' })
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
import { type AttachBitSubOptions, type BitSubController, type BitSubSourceOptions } from './shared';
|
|
15
|
+
/** Minimal Video.js surface used by the plugin (avoids a hard dependency). */
|
|
16
|
+
export interface VideoJsPlayerLike {
|
|
17
|
+
ready(callback: (this: this) => void): this;
|
|
18
|
+
el(): HTMLElement | null;
|
|
19
|
+
tech?: (asHtml?: boolean) => {
|
|
20
|
+
el?: () => HTMLElement | null;
|
|
21
|
+
} | HTMLElement | null | undefined;
|
|
22
|
+
on(type: string, handler: (...args: unknown[]) => void): this;
|
|
23
|
+
off?(type: string, handler: (...args: unknown[]) => void): this;
|
|
24
|
+
addClass?(className: string): void;
|
|
25
|
+
removeClass?(className: string): void;
|
|
26
|
+
trigger?(event: string, data?: unknown): void;
|
|
27
|
+
}
|
|
28
|
+
export interface VideoJsPluginBase {
|
|
29
|
+
player: VideoJsPlayerLike;
|
|
30
|
+
options_: unknown;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
33
|
+
export interface VideoJsPluginConstructor {
|
|
34
|
+
new (player: VideoJsPlayerLike, options?: unknown): VideoJsPluginBase;
|
|
35
|
+
prototype: VideoJsPluginBase;
|
|
36
|
+
}
|
|
37
|
+
export interface VideoJsLike {
|
|
38
|
+
getPlugin(name: string): VideoJsPluginConstructor;
|
|
39
|
+
registerPlugin(name: string, plugin: unknown): void;
|
|
40
|
+
}
|
|
41
|
+
export type BitSubVideoJsOptions = AttachBitSubOptions;
|
|
42
|
+
export interface BitSubVideoJsApi {
|
|
43
|
+
/** Active controller, if any. */
|
|
44
|
+
controller(): BitSubController | null;
|
|
45
|
+
/** Load or replace the subtitle track. */
|
|
46
|
+
load(source: BitSubSourceOptions): void;
|
|
47
|
+
/** Clear the current track. */
|
|
48
|
+
clear(): void;
|
|
49
|
+
/** Dispose plugin-owned resources (also runs on player dispose). */
|
|
50
|
+
dispose(): void;
|
|
51
|
+
setDisplaySettings(settings: Parameters<BitSubController['setDisplaySettings']>[0]): void;
|
|
52
|
+
getDisplaySettings(): ReturnType<BitSubController['getDisplaySettings']>;
|
|
53
|
+
getStats(): ReturnType<BitSubController['getStats']>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Register the `bitsub` Video.js plugin.
|
|
57
|
+
* Safe to call multiple times — subsequent calls are no-ops once registered.
|
|
58
|
+
*/
|
|
59
|
+
export declare function registerBitSubPlugin(videojs: VideoJsLike, pluginName?: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Ambient augmentation helper for apps using the default plugin name `bitsub`.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* import 'libbitsub/videojs' // side-effect free; types only when referenced
|
|
66
|
+
* // or in a global.d.ts:
|
|
67
|
+
* // import type {} from 'libbitsub/videojs'
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* For full player typing, extend your video.js module:
|
|
71
|
+
* ```ts
|
|
72
|
+
* import type { BitSubVideoJsApi, BitSubVideoJsOptions } from 'libbitsub/videojs'
|
|
73
|
+
* declare module 'video.js' {
|
|
74
|
+
* interface VideoJsPlayer {
|
|
75
|
+
* bitsub(options?: BitSubVideoJsOptions): BitSubVideoJsApi
|
|
76
|
+
* }
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export type VideoJsBitSubPlayer = VideoJsPlayerLike & {
|
|
81
|
+
bitsub(options?: BitSubVideoJsOptions): BitSubVideoJsApi;
|
|
82
|
+
};
|
|
83
|
+
export type { AttachBitSubOptions, BitSubController, BitSubSourceOptions, BitSubRenderer } from './shared';
|
|
84
|
+
export { attachBitSub, createBitSubRenderer } from './shared';
|
|
85
|
+
//# sourceMappingURL=videojs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videojs.d.ts","sourceRoot":"","sources":["../../src/integrations/videojs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAElH,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAAA;IAC3C,EAAE,IAAI,WAAW,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK;QAAE,EAAE,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;KAAE,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;IAC/F,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7D,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;IAC/D,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAA;IACrE,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAA;IACjD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;CACpD;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,UAAU,IAAI,gBAAgB,GAAG,IAAI,CAAA;IACrC,0CAA0C;IAC1C,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACvC,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAAA;IACb,oEAAoE;IACpE,OAAO,IAAI,IAAI,CAAA;IACf,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACzF,kBAAkB,IAAI,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACxE,QAAQ,IAAI,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAA;CACrD;AAgBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,SAAW,GAAG,IAAI,CA8FtF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG;IACpD,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CAAA;CACzD,CAAA;AAED,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC1G,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Video.js plugin for libbitsub bitmap subtitles.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import videojs from 'video.js'
|
|
7
|
+
* import { registerBitSubPlugin } from 'libbitsub/videojs'
|
|
8
|
+
*
|
|
9
|
+
* registerBitSubPlugin(videojs)
|
|
10
|
+
* const player = videojs('my-video')
|
|
11
|
+
* player.bitsub({ subUrl: '/subs/movie.sup' })
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
import { attachBitSub } from './shared';
|
|
15
|
+
function resolveVideoElement(player) {
|
|
16
|
+
const tech = typeof player.tech === 'function' ? player.tech(true) : undefined;
|
|
17
|
+
const techEl = tech && typeof tech.el === 'function'
|
|
18
|
+
? tech.el()
|
|
19
|
+
: tech;
|
|
20
|
+
if (techEl instanceof HTMLVideoElement)
|
|
21
|
+
return techEl;
|
|
22
|
+
const root = player.el();
|
|
23
|
+
if (!root)
|
|
24
|
+
return null;
|
|
25
|
+
return root.querySelector('video');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register the `bitsub` Video.js plugin.
|
|
29
|
+
* Safe to call multiple times — subsequent calls are no-ops once registered.
|
|
30
|
+
*/
|
|
31
|
+
export function registerBitSubPlugin(videojs, pluginName = 'bitsub') {
|
|
32
|
+
const existing = typeof videojs.getPlugin === 'function' ? videojs.getPlugin(pluginName) : undefined;
|
|
33
|
+
// Only skip when a previous registerBitSubPlugin call marked the plugin.
|
|
34
|
+
if (existing && existing.__libbitsubPlugin) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const Plugin = videojs.getPlugin('plugin');
|
|
38
|
+
class BitSubPlugin extends Plugin {
|
|
39
|
+
controllerRef = null;
|
|
40
|
+
onDispose;
|
|
41
|
+
onLoadedData;
|
|
42
|
+
initialOptions;
|
|
43
|
+
constructor(player, options = {}) {
|
|
44
|
+
super(player, options);
|
|
45
|
+
this.initialOptions = options;
|
|
46
|
+
this.onDispose = () => this.disposeController();
|
|
47
|
+
this.onLoadedData = () => this.ensureController(this.initialOptions, false);
|
|
48
|
+
player.ready(() => {
|
|
49
|
+
this.ensureController(options, true);
|
|
50
|
+
player.on('loadeddata', this.onLoadedData);
|
|
51
|
+
player.on('dispose', this.onDispose);
|
|
52
|
+
player.addClass?.('vjs-bitsub');
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
controller() {
|
|
56
|
+
return this.controllerRef;
|
|
57
|
+
}
|
|
58
|
+
load(source) {
|
|
59
|
+
const controller = this.ensureController({}, false);
|
|
60
|
+
controller.load(source);
|
|
61
|
+
this.player.trigger?.('bitsubload', source);
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
this.controllerRef?.clear();
|
|
65
|
+
this.player.trigger?.('bitsubclear');
|
|
66
|
+
}
|
|
67
|
+
setDisplaySettings(settings) {
|
|
68
|
+
this.controllerRef?.setDisplaySettings(settings);
|
|
69
|
+
}
|
|
70
|
+
getDisplaySettings() {
|
|
71
|
+
return this.controllerRef?.getDisplaySettings() ?? null;
|
|
72
|
+
}
|
|
73
|
+
getStats() {
|
|
74
|
+
return this.controllerRef?.getStats() ?? null;
|
|
75
|
+
}
|
|
76
|
+
dispose() {
|
|
77
|
+
this.player.off?.('loadeddata', this.onLoadedData);
|
|
78
|
+
this.player.off?.('dispose', this.onDispose);
|
|
79
|
+
this.player.removeClass?.('vjs-bitsub');
|
|
80
|
+
this.disposeController();
|
|
81
|
+
super.dispose();
|
|
82
|
+
}
|
|
83
|
+
disposeController() {
|
|
84
|
+
this.controllerRef?.dispose();
|
|
85
|
+
this.controllerRef = null;
|
|
86
|
+
}
|
|
87
|
+
ensureController(options, allowAutoload) {
|
|
88
|
+
const video = resolveVideoElement(this.player);
|
|
89
|
+
if (!video) {
|
|
90
|
+
throw new Error('libbitsub Video.js plugin could not resolve an HTMLVideoElement');
|
|
91
|
+
}
|
|
92
|
+
if (this.controllerRef && !this.controllerRef.disposed) {
|
|
93
|
+
if (this.controllerRef.video !== video) {
|
|
94
|
+
this.controllerRef.setVideo(video);
|
|
95
|
+
}
|
|
96
|
+
return this.controllerRef;
|
|
97
|
+
}
|
|
98
|
+
const { autoLoad = true, ...source } = options;
|
|
99
|
+
this.controllerRef = attachBitSub(video, {
|
|
100
|
+
...source,
|
|
101
|
+
autoLoad: allowAutoload ? autoLoad : false
|
|
102
|
+
});
|
|
103
|
+
return this.controllerRef;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
;
|
|
107
|
+
BitSubPlugin.__libbitsubPlugin = true;
|
|
108
|
+
videojs.registerPlugin(pluginName, BitSubPlugin);
|
|
109
|
+
}
|
|
110
|
+
export { attachBitSub, createBitSubRenderer } from './shared';
|
|
111
|
+
//# sourceMappingURL=videojs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videojs.js","sourceRoot":"","sources":["../../src/integrations/videojs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/ts/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,UAAU,yBAAyB;IACjC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IACvD,YAAY,CAAC,EAAE,2BAA2B,CAAA;CAC3C;AAED,qBAAa,uBAAwB,SAAQ,KAAM,YAAW,2BAA2B;IACvF,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAA;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IAChE,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAA;IAEjC,YACE,IAAI,EAAE,2BAA2B,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;QACvD,KAAK,CAAC,EAAE,OAAO,CAAA;KACX,EAQP;CACF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,2BAA2B,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,OAAO,CAAA;CACX,GACL,uBAAuB,CAEzB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,yBAA8B,GACtC,uBAAuB,CAazB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,6BAA6B,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;CACnD,GACL,yBAAyB,CAQ3B;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CACb,GACL,yBAAyB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/ts/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB,UAAU,yBAAyB;IACjC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IACvD,YAAY,CAAC,EAAE,2BAA2B,CAAA;CAC3C;AAED,qBAAa,uBAAwB,SAAQ,KAAM,YAAW,2BAA2B;IACvF,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAA;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IAChE,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAA;IAEjC,YACE,IAAI,EAAE,2BAA2B,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;QACvD,KAAK,CAAC,EAAE,OAAO,CAAA;KACX,EAQP;CACF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,2BAA2B,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,OAAO,CAAA;CACX,GACL,uBAAuB,CAEzB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,yBAA8B,GACtC,uBAAuB,CAazB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,6BAA6B,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;CACnD,GACL,yBAAyB,CAQ3B;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CACb,GACL,yBAAyB,GAAG,IAAI,CAwClC;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAE1F"}
|