avbridge 2.2.0 → 2.3.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/CHANGELOG.md +125 -1
- package/NOTICE.md +2 -2
- package/README.md +100 -74
- package/THIRD_PARTY_LICENSES.md +2 -2
- package/dist/avi-2JPBSHGA.js +183 -0
- package/dist/avi-2JPBSHGA.js.map +1 -0
- package/dist/avi-F6WZJK5T.cjs +185 -0
- package/dist/avi-F6WZJK5T.cjs.map +1 -0
- package/dist/{avi-GCGM7OJI.js → avi-NJXAXUXK.js} +9 -3
- package/dist/avi-NJXAXUXK.js.map +1 -0
- package/dist/{avi-6SJLWIWW.cjs → avi-W6L3BTWU.cjs} +10 -4
- package/dist/avi-W6L3BTWU.cjs.map +1 -0
- package/dist/{chunk-ILKDNBSE.js → chunk-2PGRFCWB.js} +59 -10
- package/dist/chunk-2PGRFCWB.js.map +1 -0
- package/dist/chunk-5YAWWKA3.js +18 -0
- package/dist/chunk-5YAWWKA3.js.map +1 -0
- package/dist/chunk-6UUT4BEA.cjs +219 -0
- package/dist/chunk-6UUT4BEA.cjs.map +1 -0
- package/dist/{chunk-OE66B34H.cjs → chunk-7RGG6ME7.cjs} +562 -94
- package/dist/chunk-7RGG6ME7.cjs.map +1 -0
- package/dist/{chunk-WD2ZNQA7.js → chunk-DCSOQH2N.js} +7 -4
- package/dist/chunk-DCSOQH2N.js.map +1 -0
- package/dist/chunk-F3LQJKXK.cjs +20 -0
- package/dist/chunk-F3LQJKXK.cjs.map +1 -0
- package/dist/chunk-IAYKFGFG.js +200 -0
- package/dist/chunk-IAYKFGFG.js.map +1 -0
- package/dist/chunk-NNVOHKXJ.cjs +204 -0
- package/dist/chunk-NNVOHKXJ.cjs.map +1 -0
- package/dist/{chunk-C5VA5U5O.js → chunk-NV7ILLWH.js} +556 -92
- package/dist/chunk-NV7ILLWH.js.map +1 -0
- package/dist/{chunk-HZLQNKFN.cjs → chunk-QQXBPW72.js} +54 -15
- package/dist/chunk-QQXBPW72.js.map +1 -0
- package/dist/chunk-XKPSTC34.cjs +210 -0
- package/dist/chunk-XKPSTC34.cjs.map +1 -0
- package/dist/{chunk-L4NPOJ36.cjs → chunk-Z33SBWL5.cjs} +7 -4
- package/dist/chunk-Z33SBWL5.cjs.map +1 -0
- package/dist/element-browser.js +631 -103
- package/dist/element-browser.js.map +1 -1
- package/dist/element.cjs +4 -4
- package/dist/element.d.cts +1 -1
- package/dist/element.d.ts +1 -1
- package/dist/element.js +3 -3
- package/dist/index.cjs +174 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +48 -4
- package/dist/index.d.ts +48 -4
- package/dist/index.js +93 -12
- package/dist/index.js.map +1 -1
- package/dist/libav-http-reader-AZLE7YFS.cjs +16 -0
- package/dist/{libav-http-reader-FPYDBMYK.cjs.map → libav-http-reader-AZLE7YFS.cjs.map} +1 -1
- package/dist/libav-http-reader-WXG3Z7AI.js +3 -0
- package/dist/{libav-http-reader-NQJVY273.js.map → libav-http-reader-WXG3Z7AI.js.map} +1 -1
- package/dist/{player-DUyvltvy.d.cts → player-B6WB74RD.d.cts} +63 -3
- package/dist/{player-DUyvltvy.d.ts → player-B6WB74RD.d.ts} +63 -3
- package/dist/player.cjs +5500 -0
- package/dist/player.cjs.map +1 -0
- package/dist/player.d.cts +649 -0
- package/dist/player.d.ts +649 -0
- package/dist/player.js +5498 -0
- package/dist/player.js.map +1 -0
- package/dist/source-73CAH6HW.cjs +28 -0
- package/dist/{source-CN43EI7Z.cjs.map → source-73CAH6HW.cjs.map} +1 -1
- package/dist/source-F656KYYV.js +3 -0
- package/dist/{source-FFZ7TW2B.js.map → source-F656KYYV.js.map} +1 -1
- package/dist/source-QJR3OHTW.js +3 -0
- package/dist/source-QJR3OHTW.js.map +1 -0
- package/dist/source-VB74JQ7Z.cjs +28 -0
- package/dist/source-VB74JQ7Z.cjs.map +1 -0
- package/dist/variant-routing-434STYAB.js +3 -0
- package/dist/{variant-routing-JOBWXYKD.js.map → variant-routing-434STYAB.js.map} +1 -1
- package/dist/variant-routing-HONNAA6R.cjs +12 -0
- package/dist/{variant-routing-GOHB2RZN.cjs.map → variant-routing-HONNAA6R.cjs.map} +1 -1
- package/package.json +9 -1
- package/src/classify/rules.ts +27 -5
- package/src/convert/remux.ts +8 -0
- package/src/convert/transcode.ts +41 -8
- package/src/element/avbridge-player.ts +845 -0
- package/src/element/player-icons.ts +25 -0
- package/src/element/player-styles.ts +472 -0
- package/src/errors.ts +47 -0
- package/src/index.ts +23 -0
- package/src/player-element.ts +18 -0
- package/src/player.ts +127 -27
- package/src/plugins/builtin.ts +2 -2
- package/src/probe/avi.ts +4 -0
- package/src/probe/index.ts +40 -10
- package/src/strategies/fallback/audio-output.ts +31 -0
- package/src/strategies/fallback/decoder.ts +83 -2
- package/src/strategies/fallback/index.ts +34 -1
- package/src/strategies/fallback/variant-routing.ts +7 -13
- package/src/strategies/fallback/video-renderer.ts +129 -33
- package/src/strategies/hybrid/decoder.ts +131 -20
- package/src/strategies/hybrid/index.ts +36 -2
- package/src/strategies/remux/index.ts +13 -1
- package/src/strategies/remux/mse.ts +12 -2
- package/src/strategies/remux/pipeline.ts +6 -0
- package/src/subtitles/index.ts +7 -3
- package/src/types.ts +53 -1
- package/src/util/libav-http-reader.ts +5 -1
- package/src/util/source.ts +28 -8
- package/src/util/transport.ts +26 -0
- package/vendor/libav/avbridge/libav-6.8.8.0-avbridge.wasm.mjs +1 -1
- package/vendor/libav/avbridge/libav-6.8.8.0-avbridge.wasm.wasm +0 -0
- package/dist/avi-6SJLWIWW.cjs.map +0 -1
- package/dist/avi-GCGM7OJI.js.map +0 -1
- package/dist/chunk-C5VA5U5O.js.map +0 -1
- package/dist/chunk-HZLQNKFN.cjs.map +0 -1
- package/dist/chunk-ILKDNBSE.js.map +0 -1
- package/dist/chunk-J5MCMN3S.js +0 -27
- package/dist/chunk-J5MCMN3S.js.map +0 -1
- package/dist/chunk-L4NPOJ36.cjs.map +0 -1
- package/dist/chunk-NZU7W256.cjs +0 -29
- package/dist/chunk-NZU7W256.cjs.map +0 -1
- package/dist/chunk-OE66B34H.cjs.map +0 -1
- package/dist/chunk-WD2ZNQA7.js.map +0 -1
- package/dist/libav-http-reader-FPYDBMYK.cjs +0 -16
- package/dist/libav-http-reader-NQJVY273.js +0 -3
- package/dist/source-CN43EI7Z.cjs +0 -28
- package/dist/source-FFZ7TW2B.js +0 -3
- package/dist/variant-routing-GOHB2RZN.cjs +0 -12
- package/dist/variant-routing-JOBWXYKD.js +0 -3
|
@@ -17,7 +17,7 @@ type ContainerKind = "mp4" | "mov" | "mkv" | "webm" | "avi" | "asf" | "flv" | "r
|
|
|
17
17
|
/** Video codec families. Strings, not enums, so plugins can extend. */
|
|
18
18
|
type VideoCodec = "h264" | "h265" | "vp8" | "vp9" | "av1" | "mpeg4" | "wmv3" | "vc1" | "rv10" | "rv20" | "rv30" | "rv40" | "mpeg2" | "mpeg1" | "theora" | (string & {});
|
|
19
19
|
/** Audio codec families. */
|
|
20
|
-
type AudioCodec = "aac" | "mp3" | "opus" | "vorbis" | "flac" | "pcm" | "ac3" | "eac3" | "wmav2" | "wmapro" | "alac" | "cook" | "ra_144" | "ra_288" | "sipr" | "atrac3" | (string & {});
|
|
20
|
+
type AudioCodec = "aac" | "mp3" | "opus" | "vorbis" | "flac" | "pcm" | "ac3" | "eac3" | "wmav2" | "wmapro" | "alac" | "cook" | "ra_144" | "ra_288" | "sipr" | "atrac3" | "dts" | "truehd" | (string & {});
|
|
21
21
|
interface VideoTrackInfo {
|
|
22
22
|
id: number;
|
|
23
23
|
codec: VideoCodec;
|
|
@@ -156,7 +156,7 @@ interface Plugin {
|
|
|
156
156
|
name: string;
|
|
157
157
|
canHandle(context: MediaContext): boolean;
|
|
158
158
|
/** Returns a session if it claims the context, otherwise throws. */
|
|
159
|
-
execute(context: MediaContext, target: HTMLVideoElement): Promise<PlaybackSession>;
|
|
159
|
+
execute(context: MediaContext, target: HTMLVideoElement, transport?: TransportConfig): Promise<PlaybackSession>;
|
|
160
160
|
}
|
|
161
161
|
/** Player creation options. */
|
|
162
162
|
interface CreatePlayerOptions {
|
|
@@ -196,6 +196,36 @@ interface CreatePlayerOptions {
|
|
|
196
196
|
* strategy in the fallback chain on failure or stall.
|
|
197
197
|
*/
|
|
198
198
|
autoEscalate?: boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Behavior when the browser tab becomes hidden.
|
|
201
|
+
* - `"pause"` (default): auto-pause on hide, auto-resume on visible
|
|
202
|
+
* if the user had been playing. Matches YouTube, Netflix, and
|
|
203
|
+
* native media players. Prevents degraded playback from Chrome's
|
|
204
|
+
* background throttling of requestAnimationFrame and setTimeout.
|
|
205
|
+
* - `"continue"`: keep playing. Playback will degrade anyway due to
|
|
206
|
+
* browser throttling, but useful for consumers who want full
|
|
207
|
+
* control of visibility handling themselves.
|
|
208
|
+
*/
|
|
209
|
+
backgroundBehavior?: "pause" | "continue";
|
|
210
|
+
/**
|
|
211
|
+
* Extra {@link RequestInit} merged into every HTTP request the player
|
|
212
|
+
* makes (probe Range requests, subtitle fetches, libav HTTP reader).
|
|
213
|
+
* Headers are merged, not overwritten — so you can add `Authorization`
|
|
214
|
+
* without losing the player's `Range` header.
|
|
215
|
+
*/
|
|
216
|
+
requestInit?: RequestInit;
|
|
217
|
+
/**
|
|
218
|
+
* Custom fetch implementation. Defaults to `globalThis.fetch`. Useful
|
|
219
|
+
* for interceptors, logging, or environments without a global fetch.
|
|
220
|
+
*/
|
|
221
|
+
fetchFn?: FetchFn;
|
|
222
|
+
}
|
|
223
|
+
/** Signature-compatible with `globalThis.fetch`. */
|
|
224
|
+
type FetchFn = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
225
|
+
/** Internal transport config bundle. Not part of the public API. */
|
|
226
|
+
interface TransportConfig {
|
|
227
|
+
requestInit?: RequestInit;
|
|
228
|
+
fetchFn?: FetchFn;
|
|
199
229
|
}
|
|
200
230
|
/** Events emitted by {@link UnifiedPlayer}. Strongly typed. */
|
|
201
231
|
interface PlayerEventMap {
|
|
@@ -236,6 +266,24 @@ interface ConvertOptions {
|
|
|
236
266
|
onProgress?: (info: ProgressInfo) => void;
|
|
237
267
|
/** When true, reject on any uncertain codec/container combo. Default: `false` (best-effort). */
|
|
238
268
|
strict?: boolean;
|
|
269
|
+
/**
|
|
270
|
+
* Write output progressively to a `WritableStream` instead of accumulating
|
|
271
|
+
* in memory. Use with the File System Access API (`showSaveFilePicker()`) to
|
|
272
|
+
* transcode files larger than available memory.
|
|
273
|
+
*
|
|
274
|
+
* When set, the returned `ConvertResult.blob` will be an empty Blob (the
|
|
275
|
+
* real data went to the stream). The caller is responsible for closing the
|
|
276
|
+
* stream after the returned promise resolves.
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```ts
|
|
280
|
+
* const handle = await showSaveFilePicker({ suggestedName: "output.mp4" });
|
|
281
|
+
* const writable = await handle.createWritable();
|
|
282
|
+
* const result = await transcode(file, { outputStream: writable });
|
|
283
|
+
* await writable.close();
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
outputStream?: WritableStream;
|
|
239
287
|
}
|
|
240
288
|
/** Progress information passed to {@link ConvertOptions.onProgress}. */
|
|
241
289
|
interface ProgressInfo {
|
|
@@ -324,8 +372,13 @@ declare class UnifiedPlayer {
|
|
|
324
372
|
private lastProgressTime;
|
|
325
373
|
private lastProgressPosition;
|
|
326
374
|
private errorListener;
|
|
375
|
+
private endedListener;
|
|
376
|
+
private userIntent;
|
|
377
|
+
private autoPausedForVisibility;
|
|
378
|
+
private visibilityListener;
|
|
327
379
|
private switchingPromise;
|
|
328
380
|
private subtitleResources;
|
|
381
|
+
private readonly transport;
|
|
329
382
|
/**
|
|
330
383
|
* @internal Use {@link createPlayer} or {@link UnifiedPlayer.create} instead.
|
|
331
384
|
*/
|
|
@@ -353,6 +406,13 @@ declare class UnifiedPlayer {
|
|
|
353
406
|
play(): Promise<void>;
|
|
354
407
|
/** Pause playback. No-op if the player is not ready or already paused. */
|
|
355
408
|
pause(): void;
|
|
409
|
+
/**
|
|
410
|
+
* Handle browser tab visibility changes. On hide: pause if the user
|
|
411
|
+
* had been playing. On show: resume if we were the one who paused.
|
|
412
|
+
* Skips when `backgroundBehavior: "continue"` is set (listener isn't
|
|
413
|
+
* installed in that case).
|
|
414
|
+
*/
|
|
415
|
+
private onVisibilityChange;
|
|
356
416
|
/** Seek to the given time in seconds. Throws if the player is not ready. */
|
|
357
417
|
seek(time: number): Promise<void>;
|
|
358
418
|
/** Switch the active audio track by track ID. Throws if the player is not ready. */
|
|
@@ -370,4 +430,4 @@ declare class UnifiedPlayer {
|
|
|
370
430
|
}
|
|
371
431
|
declare function createPlayer(options: CreatePlayerOptions): Promise<UnifiedPlayer>;
|
|
372
432
|
|
|
373
|
-
export { type AudioCodec as A, type Classification as C, type DiagnosticsSnapshot as D, type HardwareAccelerationHint as H, type MediaContext as M, type OutputAudioCodec as O, type PlaybackSession as P, type StrategyClass as S, type
|
|
433
|
+
export { type AudioCodec as A, type Classification as C, type DiagnosticsSnapshot as D, type FetchFn as F, type HardwareAccelerationHint as H, type MediaContext as M, type OutputAudioCodec as O, type PlaybackSession as P, type StrategyClass as S, type TransportConfig as T, UnifiedPlayer as U, type VideoCodec as V, type MediaInput as a, type ConvertOptions as b, type ConvertResult as c, type TranscodeOptions as d, type AudioTrackInfo as e, type ContainerKind as f, type CreatePlayerOptions as g, type OutputFormat as h, type OutputVideoCodec as i, type PlayerEventMap as j, type PlayerEventName as k, type Plugin as l, type ProgressInfo as m, type StrategyName as n, type SubtitleTrackInfo as o, type TranscodeQuality as p, type VideoTrackInfo as q, createPlayer as r };
|
|
@@ -17,7 +17,7 @@ type ContainerKind = "mp4" | "mov" | "mkv" | "webm" | "avi" | "asf" | "flv" | "r
|
|
|
17
17
|
/** Video codec families. Strings, not enums, so plugins can extend. */
|
|
18
18
|
type VideoCodec = "h264" | "h265" | "vp8" | "vp9" | "av1" | "mpeg4" | "wmv3" | "vc1" | "rv10" | "rv20" | "rv30" | "rv40" | "mpeg2" | "mpeg1" | "theora" | (string & {});
|
|
19
19
|
/** Audio codec families. */
|
|
20
|
-
type AudioCodec = "aac" | "mp3" | "opus" | "vorbis" | "flac" | "pcm" | "ac3" | "eac3" | "wmav2" | "wmapro" | "alac" | "cook" | "ra_144" | "ra_288" | "sipr" | "atrac3" | (string & {});
|
|
20
|
+
type AudioCodec = "aac" | "mp3" | "opus" | "vorbis" | "flac" | "pcm" | "ac3" | "eac3" | "wmav2" | "wmapro" | "alac" | "cook" | "ra_144" | "ra_288" | "sipr" | "atrac3" | "dts" | "truehd" | (string & {});
|
|
21
21
|
interface VideoTrackInfo {
|
|
22
22
|
id: number;
|
|
23
23
|
codec: VideoCodec;
|
|
@@ -156,7 +156,7 @@ interface Plugin {
|
|
|
156
156
|
name: string;
|
|
157
157
|
canHandle(context: MediaContext): boolean;
|
|
158
158
|
/** Returns a session if it claims the context, otherwise throws. */
|
|
159
|
-
execute(context: MediaContext, target: HTMLVideoElement): Promise<PlaybackSession>;
|
|
159
|
+
execute(context: MediaContext, target: HTMLVideoElement, transport?: TransportConfig): Promise<PlaybackSession>;
|
|
160
160
|
}
|
|
161
161
|
/** Player creation options. */
|
|
162
162
|
interface CreatePlayerOptions {
|
|
@@ -196,6 +196,36 @@ interface CreatePlayerOptions {
|
|
|
196
196
|
* strategy in the fallback chain on failure or stall.
|
|
197
197
|
*/
|
|
198
198
|
autoEscalate?: boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Behavior when the browser tab becomes hidden.
|
|
201
|
+
* - `"pause"` (default): auto-pause on hide, auto-resume on visible
|
|
202
|
+
* if the user had been playing. Matches YouTube, Netflix, and
|
|
203
|
+
* native media players. Prevents degraded playback from Chrome's
|
|
204
|
+
* background throttling of requestAnimationFrame and setTimeout.
|
|
205
|
+
* - `"continue"`: keep playing. Playback will degrade anyway due to
|
|
206
|
+
* browser throttling, but useful for consumers who want full
|
|
207
|
+
* control of visibility handling themselves.
|
|
208
|
+
*/
|
|
209
|
+
backgroundBehavior?: "pause" | "continue";
|
|
210
|
+
/**
|
|
211
|
+
* Extra {@link RequestInit} merged into every HTTP request the player
|
|
212
|
+
* makes (probe Range requests, subtitle fetches, libav HTTP reader).
|
|
213
|
+
* Headers are merged, not overwritten — so you can add `Authorization`
|
|
214
|
+
* without losing the player's `Range` header.
|
|
215
|
+
*/
|
|
216
|
+
requestInit?: RequestInit;
|
|
217
|
+
/**
|
|
218
|
+
* Custom fetch implementation. Defaults to `globalThis.fetch`. Useful
|
|
219
|
+
* for interceptors, logging, or environments without a global fetch.
|
|
220
|
+
*/
|
|
221
|
+
fetchFn?: FetchFn;
|
|
222
|
+
}
|
|
223
|
+
/** Signature-compatible with `globalThis.fetch`. */
|
|
224
|
+
type FetchFn = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
225
|
+
/** Internal transport config bundle. Not part of the public API. */
|
|
226
|
+
interface TransportConfig {
|
|
227
|
+
requestInit?: RequestInit;
|
|
228
|
+
fetchFn?: FetchFn;
|
|
199
229
|
}
|
|
200
230
|
/** Events emitted by {@link UnifiedPlayer}. Strongly typed. */
|
|
201
231
|
interface PlayerEventMap {
|
|
@@ -236,6 +266,24 @@ interface ConvertOptions {
|
|
|
236
266
|
onProgress?: (info: ProgressInfo) => void;
|
|
237
267
|
/** When true, reject on any uncertain codec/container combo. Default: `false` (best-effort). */
|
|
238
268
|
strict?: boolean;
|
|
269
|
+
/**
|
|
270
|
+
* Write output progressively to a `WritableStream` instead of accumulating
|
|
271
|
+
* in memory. Use with the File System Access API (`showSaveFilePicker()`) to
|
|
272
|
+
* transcode files larger than available memory.
|
|
273
|
+
*
|
|
274
|
+
* When set, the returned `ConvertResult.blob` will be an empty Blob (the
|
|
275
|
+
* real data went to the stream). The caller is responsible for closing the
|
|
276
|
+
* stream after the returned promise resolves.
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```ts
|
|
280
|
+
* const handle = await showSaveFilePicker({ suggestedName: "output.mp4" });
|
|
281
|
+
* const writable = await handle.createWritable();
|
|
282
|
+
* const result = await transcode(file, { outputStream: writable });
|
|
283
|
+
* await writable.close();
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
outputStream?: WritableStream;
|
|
239
287
|
}
|
|
240
288
|
/** Progress information passed to {@link ConvertOptions.onProgress}. */
|
|
241
289
|
interface ProgressInfo {
|
|
@@ -324,8 +372,13 @@ declare class UnifiedPlayer {
|
|
|
324
372
|
private lastProgressTime;
|
|
325
373
|
private lastProgressPosition;
|
|
326
374
|
private errorListener;
|
|
375
|
+
private endedListener;
|
|
376
|
+
private userIntent;
|
|
377
|
+
private autoPausedForVisibility;
|
|
378
|
+
private visibilityListener;
|
|
327
379
|
private switchingPromise;
|
|
328
380
|
private subtitleResources;
|
|
381
|
+
private readonly transport;
|
|
329
382
|
/**
|
|
330
383
|
* @internal Use {@link createPlayer} or {@link UnifiedPlayer.create} instead.
|
|
331
384
|
*/
|
|
@@ -353,6 +406,13 @@ declare class UnifiedPlayer {
|
|
|
353
406
|
play(): Promise<void>;
|
|
354
407
|
/** Pause playback. No-op if the player is not ready or already paused. */
|
|
355
408
|
pause(): void;
|
|
409
|
+
/**
|
|
410
|
+
* Handle browser tab visibility changes. On hide: pause if the user
|
|
411
|
+
* had been playing. On show: resume if we were the one who paused.
|
|
412
|
+
* Skips when `backgroundBehavior: "continue"` is set (listener isn't
|
|
413
|
+
* installed in that case).
|
|
414
|
+
*/
|
|
415
|
+
private onVisibilityChange;
|
|
356
416
|
/** Seek to the given time in seconds. Throws if the player is not ready. */
|
|
357
417
|
seek(time: number): Promise<void>;
|
|
358
418
|
/** Switch the active audio track by track ID. Throws if the player is not ready. */
|
|
@@ -370,4 +430,4 @@ declare class UnifiedPlayer {
|
|
|
370
430
|
}
|
|
371
431
|
declare function createPlayer(options: CreatePlayerOptions): Promise<UnifiedPlayer>;
|
|
372
432
|
|
|
373
|
-
export { type AudioCodec as A, type Classification as C, type DiagnosticsSnapshot as D, type HardwareAccelerationHint as H, type MediaContext as M, type OutputAudioCodec as O, type PlaybackSession as P, type StrategyClass as S, type
|
|
433
|
+
export { type AudioCodec as A, type Classification as C, type DiagnosticsSnapshot as D, type FetchFn as F, type HardwareAccelerationHint as H, type MediaContext as M, type OutputAudioCodec as O, type PlaybackSession as P, type StrategyClass as S, type TransportConfig as T, UnifiedPlayer as U, type VideoCodec as V, type MediaInput as a, type ConvertOptions as b, type ConvertResult as c, type TranscodeOptions as d, type AudioTrackInfo as e, type ContainerKind as f, type CreatePlayerOptions as g, type OutputFormat as h, type OutputVideoCodec as i, type PlayerEventMap as j, type PlayerEventName as k, type Plugin as l, type ProgressInfo as m, type StrategyName as n, type SubtitleTrackInfo as o, type TranscodeQuality as p, type VideoTrackInfo as q, createPlayer as r };
|