avbridge 2.10.0 → 2.12.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 +69 -0
- package/dist/{avi-B5CQYB7L.cjs → avi-EQE6AR75.cjs} +4 -4
- package/dist/{avi-2ILLBNPQ.cjs.map → avi-EQE6AR75.cjs.map} +1 -1
- package/dist/{avi-RWWPN2PR.js → avi-NNHH4AAA.js} +3 -3
- package/dist/{avi-JXU4GQL2.js.map → avi-NNHH4AAA.js.map} +1 -1
- package/dist/{avi-JXU4GQL2.js → avi-S7EY54YA.js} +3 -3
- package/dist/{avi-RWWPN2PR.js.map → avi-S7EY54YA.js.map} +1 -1
- package/dist/{avi-2ILLBNPQ.cjs → avi-Y3N325WZ.cjs} +4 -4
- package/dist/{avi-B5CQYB7L.cjs.map → avi-Y3N325WZ.cjs.map} +1 -1
- package/dist/{chunk-GYIJU44C.js → chunk-2LNXMGT6.js} +5 -5
- package/dist/{chunk-GYIJU44C.js.map → chunk-2LNXMGT6.js.map} +1 -1
- package/dist/{chunk-DCSOQH2N.js → chunk-3AI5WFFN.js} +40 -16
- package/dist/chunk-3AI5WFFN.js.map +1 -0
- package/dist/{chunk-2NSOOMXW.js → chunk-3YKWU4FM.js} +3 -3
- package/dist/{chunk-2NSOOMXW.js.map → chunk-3YKWU4FM.js.map} +1 -1
- package/dist/{chunk-CL6UEUQF.js → chunk-5Y5BTB5D.js} +5 -5
- package/dist/{chunk-CL6UEUQF.js.map → chunk-5Y5BTB5D.js.map} +1 -1
- package/dist/{chunk-NQULEIA3.cjs → chunk-7EF4VTUS.cjs} +36 -28
- package/dist/chunk-7EF4VTUS.cjs.map +1 -0
- package/dist/{chunk-5KVLE6YI.js → chunk-EDDWAN2L.js} +3 -2
- package/dist/chunk-EDDWAN2L.js.map +1 -0
- package/dist/{chunk-OTFS7DC4.cjs → chunk-GJBNLPGI.cjs} +14 -14
- package/dist/{chunk-OTFS7DC4.cjs.map → chunk-GJBNLPGI.cjs.map} +1 -1
- package/dist/{chunk-BYGZN4Z5.cjs → chunk-HBHSUGNI.cjs} +5 -5
- package/dist/{chunk-BYGZN4Z5.cjs.map → chunk-HBHSUGNI.cjs.map} +1 -1
- package/dist/{chunk-L7A3ECI2.cjs → chunk-HZUVMXBN.cjs} +4 -4
- package/dist/{chunk-L7A3ECI2.cjs.map → chunk-HZUVMXBN.cjs.map} +1 -1
- package/dist/{chunk-S4WAZC2T.cjs → chunk-WRKO6Q42.cjs} +3 -2
- package/dist/chunk-WRKO6Q42.cjs.map +1 -0
- package/dist/{chunk-Z33SBWL5.cjs → chunk-YPZFGJV3.cjs} +40 -16
- package/dist/chunk-YPZFGJV3.cjs.map +1 -0
- package/dist/{chunk-3GKM5DFM.js → chunk-Z26PXRUY.js} +18 -10
- package/dist/chunk-Z26PXRUY.js.map +1 -0
- package/dist/element-browser.js +65 -19
- package/dist/element-browser.js.map +1 -1
- package/dist/element.cjs +21 -8
- package/dist/element.cjs.map +1 -1
- package/dist/element.d.cts +1 -1
- package/dist/element.d.ts +1 -1
- package/dist/element.js +20 -7
- package/dist/element.js.map +1 -1
- package/dist/index.cjs +23 -23
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -10
- package/dist/{libav-demux-3N5Y3VQA.cjs → libav-demux-575OYCT2.cjs} +9 -9
- package/dist/{libav-demux-3N5Y3VQA.cjs.map → libav-demux-575OYCT2.cjs.map} +1 -1
- package/dist/{libav-demux-JXD4OTLM.js → libav-demux-SXZDLC7W.js} +4 -4
- package/dist/{libav-demux-JXD4OTLM.js.map → libav-demux-SXZDLC7W.js.map} +1 -1
- package/dist/libav-http-reader-2S5HAHW4.js +3 -0
- package/dist/{libav-http-reader-WXG3Z7AI.js.map → libav-http-reader-2S5HAHW4.js.map} +1 -1
- package/dist/libav-http-reader-Q356EO2K.cjs +16 -0
- package/dist/{libav-http-reader-AZLE7YFS.cjs.map → libav-http-reader-Q356EO2K.cjs.map} +1 -1
- package/dist/{player-DDdNVFDv.d.cts → player-bQ6n4hVp.d.cts} +15 -0
- package/dist/{player-DDdNVFDv.d.ts → player-bQ6n4hVp.d.ts} +15 -0
- package/dist/player.cjs +166 -33
- package/dist/player.cjs.map +1 -1
- package/dist/player.d.cts +36 -0
- package/dist/player.d.ts +36 -0
- package/dist/player.js +162 -29
- package/dist/player.js.map +1 -1
- package/dist/remux-7TA4FKTY.js +10 -0
- package/dist/{remux-56V7LDAD.js.map → remux-7TA4FKTY.js.map} +1 -1
- package/dist/remux-VPKCLHHM.cjs +35 -0
- package/dist/{remux-KUS5GIL6.cjs.map → remux-VPKCLHHM.cjs.map} +1 -1
- package/dist/subtitles-5H24MEBJ.js +4 -0
- package/dist/{subtitles-4T74JRGT.js.map → subtitles-5H24MEBJ.js.map} +1 -1
- package/dist/subtitles-HMVGWTU2.cjs +29 -0
- package/dist/{subtitles-QUH4LPI4.cjs.map → subtitles-HMVGWTU2.cjs.map} +1 -1
- package/package.json +1 -1
- package/src/element/avbridge-player.ts +128 -18
- package/src/element/avbridge-subtitles.ts +273 -0
- package/src/element/avbridge-video.ts +21 -1
- package/src/element/player-styles.ts +13 -1
- package/src/player.ts +3 -3
- package/src/strategies/fallback/audio-output.ts +10 -0
- package/src/subtitles/index.ts +2 -0
- package/src/types.ts +15 -0
- package/src/util/libav-http-reader.ts +58 -19
- package/dist/chunk-3GKM5DFM.js.map +0 -1
- package/dist/chunk-5KVLE6YI.js.map +0 -1
- package/dist/chunk-DCSOQH2N.js.map +0 -1
- package/dist/chunk-NQULEIA3.cjs.map +0 -1
- package/dist/chunk-S4WAZC2T.cjs.map +0 -1
- package/dist/chunk-Z33SBWL5.cjs.map +0 -1
- package/dist/libav-http-reader-AZLE7YFS.cjs +0 -16
- package/dist/libav-http-reader-WXG3Z7AI.js +0 -3
- package/dist/remux-56V7LDAD.js +0 -10
- package/dist/remux-KUS5GIL6.cjs +0 -35
- package/dist/subtitles-4T74JRGT.js +0 -4
- package/dist/subtitles-QUH4LPI4.cjs +0 -29
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkWRKO6Q42_cjs = require('./chunk-WRKO6Q42.cjs');
|
|
4
|
+
var chunkHBHSUGNI_cjs = require('./chunk-HBHSUGNI.cjs');
|
|
5
5
|
var chunk2IJ66NTD_cjs = require('./chunk-2IJ66NTD.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkHZUVMXBN_cjs = require('./chunk-HZUVMXBN.cjs');
|
|
7
7
|
var chunkG4APZMCP_cjs = require('./chunk-G4APZMCP.cjs');
|
|
8
8
|
var chunkF3LQJKXK_cjs = require('./chunk-F3LQJKXK.cjs');
|
|
9
9
|
|
|
@@ -734,12 +734,12 @@ async function createRemuxPipeline(ctx, video) {
|
|
|
734
734
|
const mb = await import('mediabunny');
|
|
735
735
|
const videoTrackInfo = ctx.videoTracks[0];
|
|
736
736
|
if (!videoTrackInfo) throw new Error("remux: source has no video track");
|
|
737
|
-
const mbVideoCodec =
|
|
737
|
+
const mbVideoCodec = chunkHBHSUGNI_cjs.avbridgeVideoToMediabunny(videoTrackInfo.codec);
|
|
738
738
|
if (!mbVideoCodec) {
|
|
739
739
|
throw new Error(`remux: video codec "${videoTrackInfo.codec}" is not supported by mediabunny output`);
|
|
740
740
|
}
|
|
741
741
|
const input = new mb.Input({
|
|
742
|
-
source: await
|
|
742
|
+
source: await chunkHBHSUGNI_cjs.buildMediabunnySourceFromInput(mb, ctx.source),
|
|
743
743
|
formats: mb.ALL_FORMATS
|
|
744
744
|
});
|
|
745
745
|
const allTracks = await input.getTracks();
|
|
@@ -771,7 +771,7 @@ async function createRemuxPipeline(ctx, video) {
|
|
|
771
771
|
throw new Error("remux: audio track not found in input");
|
|
772
772
|
}
|
|
773
773
|
inputAudio = newInput;
|
|
774
|
-
mbAudioCodec =
|
|
774
|
+
mbAudioCodec = chunkHBHSUGNI_cjs.avbridgeAudioToMediabunny(trackInfo.codec);
|
|
775
775
|
audioSink = new mb.EncodedPacketSink(newInput);
|
|
776
776
|
audioConfig = await newInput.getDecoderConfig();
|
|
777
777
|
}
|
|
@@ -1055,7 +1055,7 @@ var VideoRenderer = class {
|
|
|
1055
1055
|
}
|
|
1056
1056
|
target.style.visibility = "hidden";
|
|
1057
1057
|
const overlayParent = parent instanceof HTMLElement ? parent : document.body;
|
|
1058
|
-
this.subtitleOverlay = new
|
|
1058
|
+
this.subtitleOverlay = new chunkWRKO6Q42_cjs.SubtitleOverlay(overlayParent);
|
|
1059
1059
|
this.watchTextTracks(target);
|
|
1060
1060
|
const ctx = this.canvas.getContext("2d");
|
|
1061
1061
|
if (!ctx) throw new Error("video renderer: failed to acquire 2D context");
|
|
@@ -1520,6 +1520,10 @@ var AudioOutput = class {
|
|
|
1520
1520
|
if (this.ctx.state === "suspended") {
|
|
1521
1521
|
await this.ctx.resume();
|
|
1522
1522
|
}
|
|
1523
|
+
try {
|
|
1524
|
+
this.gain.connect(this.ctx.destination);
|
|
1525
|
+
} catch {
|
|
1526
|
+
}
|
|
1523
1527
|
if (this.state === "paused") {
|
|
1524
1528
|
this.ctxTimeAtAnchor = this.ctx.currentTime;
|
|
1525
1529
|
this.state = "playing";
|
|
@@ -1546,6 +1550,10 @@ var AudioOutput = class {
|
|
|
1546
1550
|
this.mediaTimeOfAnchor = this.now();
|
|
1547
1551
|
this.state = "paused";
|
|
1548
1552
|
if (this.noAudio) return;
|
|
1553
|
+
try {
|
|
1554
|
+
this.gain.disconnect();
|
|
1555
|
+
} catch {
|
|
1556
|
+
}
|
|
1549
1557
|
if (this.ctx.state === "running") {
|
|
1550
1558
|
await this.ctx.suspend();
|
|
1551
1559
|
}
|
|
@@ -1604,7 +1612,7 @@ async function startHybridDecoder(opts) {
|
|
|
1604
1612
|
const variant = chunkF3LQJKXK_cjs.pickLibavVariant(opts.context);
|
|
1605
1613
|
const libav = await chunkG4APZMCP_cjs.loadLibav(variant);
|
|
1606
1614
|
const bridge = await loadBridge();
|
|
1607
|
-
const { prepareLibavInput } = await import('./libav-http-reader-
|
|
1615
|
+
const { prepareLibavInput } = await import('./libav-http-reader-Q356EO2K.cjs');
|
|
1608
1616
|
const inputHandle = await prepareLibavInput(libav, opts.filename, opts.source, opts.transport);
|
|
1609
1617
|
const readPkt = await libav.av_packet_alloc();
|
|
1610
1618
|
const [fmt_ctx, streams] = await libav.ff_init_demuxer_file(opts.filename);
|
|
@@ -1757,13 +1765,13 @@ async function startHybridDecoder(opts) {
|
|
|
1757
1765
|
const audioPackets = audioStream ? packets[audioStream.index] : void 0;
|
|
1758
1766
|
if (videoPackets && videoTimeBase) {
|
|
1759
1767
|
for (const pkt of videoPackets) {
|
|
1760
|
-
const sec =
|
|
1768
|
+
const sec = chunkHZUVMXBN_cjs.packetPtsSec(pkt, videoTimeBase);
|
|
1761
1769
|
if (sec != null && sec > bufferedUntilSec) bufferedUntilSec = sec;
|
|
1762
1770
|
}
|
|
1763
1771
|
}
|
|
1764
1772
|
if (audioPackets && audioTimeBase) {
|
|
1765
1773
|
for (const pkt of audioPackets) {
|
|
1766
|
-
const sec =
|
|
1774
|
+
const sec = chunkHZUVMXBN_cjs.packetPtsSec(pkt, audioTimeBase);
|
|
1767
1775
|
if (sec != null && sec > bufferedUntilSec) bufferedUntilSec = sec;
|
|
1768
1776
|
}
|
|
1769
1777
|
}
|
|
@@ -1777,7 +1785,7 @@ async function startHybridDecoder(opts) {
|
|
|
1777
1785
|
const processed = await applyBSF(videoPackets);
|
|
1778
1786
|
for (const pkt of processed) {
|
|
1779
1787
|
if (myToken !== pumpToken || destroyed) return;
|
|
1780
|
-
|
|
1788
|
+
chunkHZUVMXBN_cjs.sanitizePacketTimestamp(pkt, () => {
|
|
1781
1789
|
const ts = syntheticVideoUs;
|
|
1782
1790
|
syntheticVideoUs += videoFrameStepUs;
|
|
1783
1791
|
return ts;
|
|
@@ -1856,7 +1864,7 @@ async function startHybridDecoder(opts) {
|
|
|
1856
1864
|
const frames = allFrames;
|
|
1857
1865
|
for (const f of frames) {
|
|
1858
1866
|
if (myToken !== pumpToken || destroyed) return;
|
|
1859
|
-
|
|
1867
|
+
chunkHZUVMXBN_cjs.sanitizeFrameTimestamp(
|
|
1860
1868
|
f,
|
|
1861
1869
|
() => {
|
|
1862
1870
|
const ts = syntheticAudioUs;
|
|
@@ -1867,7 +1875,7 @@ async function startHybridDecoder(opts) {
|
|
|
1867
1875
|
},
|
|
1868
1876
|
audioTimeBase
|
|
1869
1877
|
);
|
|
1870
|
-
const samples =
|
|
1878
|
+
const samples = chunkHZUVMXBN_cjs.libavFrameToInterleavedFloat32(f);
|
|
1871
1879
|
if (samples) {
|
|
1872
1880
|
opts.audio.schedule(samples.data, samples.channels, samples.sampleRate);
|
|
1873
1881
|
audioFramesDecoded++;
|
|
@@ -2274,7 +2282,7 @@ async function startDecoder(opts) {
|
|
|
2274
2282
|
const variant = "avbridge";
|
|
2275
2283
|
const libav = await chunkG4APZMCP_cjs.loadLibav(variant);
|
|
2276
2284
|
const bridge = await loadBridge2();
|
|
2277
|
-
const { prepareLibavInput } = await import('./libav-http-reader-
|
|
2285
|
+
const { prepareLibavInput } = await import('./libav-http-reader-Q356EO2K.cjs');
|
|
2278
2286
|
const inputHandle = await prepareLibavInput(libav, opts.filename, opts.source, opts.transport);
|
|
2279
2287
|
const readPkt = await libav.av_packet_alloc();
|
|
2280
2288
|
const [fmt_ctx, streams] = await libav.ff_init_demuxer_file(opts.filename);
|
|
@@ -2414,13 +2422,13 @@ async function startDecoder(opts) {
|
|
|
2414
2422
|
const audioPackets = audioStream ? packets[audioStream.index] : void 0;
|
|
2415
2423
|
if (videoPackets && videoTimeBase) {
|
|
2416
2424
|
for (const pkt of videoPackets) {
|
|
2417
|
-
const sec =
|
|
2425
|
+
const sec = chunkHZUVMXBN_cjs.packetPtsSec(pkt, videoTimeBase);
|
|
2418
2426
|
if (sec != null && sec > bufferedUntilSec) bufferedUntilSec = sec;
|
|
2419
2427
|
}
|
|
2420
2428
|
}
|
|
2421
2429
|
if (audioPackets && audioTimeBase) {
|
|
2422
2430
|
for (const pkt of audioPackets) {
|
|
2423
|
-
const sec =
|
|
2431
|
+
const sec = chunkHZUVMXBN_cjs.packetPtsSec(pkt, audioTimeBase);
|
|
2424
2432
|
if (sec != null && sec > bufferedUntilSec) bufferedUntilSec = sec;
|
|
2425
2433
|
}
|
|
2426
2434
|
}
|
|
@@ -2508,7 +2516,7 @@ async function startDecoder(opts) {
|
|
|
2508
2516
|
if (myToken !== pumpToken || destroyed) return;
|
|
2509
2517
|
for (const f of frames) {
|
|
2510
2518
|
if (myToken !== pumpToken || destroyed) return;
|
|
2511
|
-
|
|
2519
|
+
chunkHZUVMXBN_cjs.sanitizeFrameTimestamp(
|
|
2512
2520
|
f,
|
|
2513
2521
|
() => {
|
|
2514
2522
|
const ts = syntheticVideoUs;
|
|
@@ -2546,7 +2554,7 @@ async function startDecoder(opts) {
|
|
|
2546
2554
|
if (myToken !== pumpToken || destroyed) return;
|
|
2547
2555
|
for (const f of frames) {
|
|
2548
2556
|
if (myToken !== pumpToken || destroyed) return;
|
|
2549
|
-
|
|
2557
|
+
chunkHZUVMXBN_cjs.sanitizeFrameTimestamp(
|
|
2550
2558
|
f,
|
|
2551
2559
|
() => {
|
|
2552
2560
|
const ts = syntheticAudioUs;
|
|
@@ -2557,7 +2565,7 @@ async function startDecoder(opts) {
|
|
|
2557
2565
|
},
|
|
2558
2566
|
audioTimeBase
|
|
2559
2567
|
);
|
|
2560
|
-
const samples =
|
|
2568
|
+
const samples = chunkHZUVMXBN_cjs.libavFrameToInterleavedFloat32(f);
|
|
2561
2569
|
if (samples) {
|
|
2562
2570
|
opts.audio.schedule(samples.data, samples.channels, samples.sampleRate);
|
|
2563
2571
|
audioFramesDecoded++;
|
|
@@ -3003,9 +3011,9 @@ var UnifiedPlayer = class _UnifiedPlayer {
|
|
|
3003
3011
|
constructor(options, registry) {
|
|
3004
3012
|
this.options = options;
|
|
3005
3013
|
this.registry = registry;
|
|
3006
|
-
const { requestInit, fetchFn } = options;
|
|
3007
|
-
if (requestInit || fetchFn) {
|
|
3008
|
-
this.transport = { requestInit, fetchFn };
|
|
3014
|
+
const { requestInit, fetchFn, cacheBytes } = options;
|
|
3015
|
+
if (requestInit || fetchFn || cacheBytes !== void 0) {
|
|
3016
|
+
this.transport = { requestInit, fetchFn, cacheBytes };
|
|
3009
3017
|
}
|
|
3010
3018
|
}
|
|
3011
3019
|
options;
|
|
@@ -3045,7 +3053,7 @@ var UnifiedPlayer = class _UnifiedPlayer {
|
|
|
3045
3053
|
switchingPromise = Promise.resolve();
|
|
3046
3054
|
// Owns blob URLs created during sidecar discovery + SRT->VTT conversion.
|
|
3047
3055
|
// Revoked at destroy() so repeated source swaps don't leak.
|
|
3048
|
-
subtitleResources = new
|
|
3056
|
+
subtitleResources = new chunkWRKO6Q42_cjs.SubtitleResourceBag();
|
|
3049
3057
|
// Transport config extracted from CreatePlayerOptions. Threaded to probe,
|
|
3050
3058
|
// subtitle fetches, and strategy session creators. Not stored on MediaContext
|
|
3051
3059
|
// because it's runtime config, not media analysis.
|
|
@@ -3073,7 +3081,7 @@ var UnifiedPlayer = class _UnifiedPlayer {
|
|
|
3073
3081
|
const bootstrapStart = performance.now();
|
|
3074
3082
|
try {
|
|
3075
3083
|
chunkG4APZMCP_cjs.dbg.info("bootstrap", "start");
|
|
3076
|
-
const ctx = await chunkG4APZMCP_cjs.dbg.timed("probe", "probe", 3e3, () =>
|
|
3084
|
+
const ctx = await chunkG4APZMCP_cjs.dbg.timed("probe", "probe", 3e3, () => chunkHBHSUGNI_cjs.probe(this.options.source, this.transport));
|
|
3077
3085
|
chunkG4APZMCP_cjs.dbg.info(
|
|
3078
3086
|
"probe",
|
|
3079
3087
|
`container=${ctx.container} video=${ctx.videoTracks[0]?.codec ?? "-"} audio=${ctx.audioTracks[0]?.codec ?? "-"} probedBy=${ctx.probedBy}`
|
|
@@ -3091,7 +3099,7 @@ var UnifiedPlayer = class _UnifiedPlayer {
|
|
|
3091
3099
|
}
|
|
3092
3100
|
}
|
|
3093
3101
|
if (this.options.directory && this.options.source instanceof File) {
|
|
3094
|
-
const found = await
|
|
3102
|
+
const found = await chunkWRKO6Q42_cjs.discoverSidecars(this.options.source, this.options.directory);
|
|
3095
3103
|
for (const s of found) {
|
|
3096
3104
|
this.subtitleResources.track(s.url);
|
|
3097
3105
|
ctx.subtitleTracks.push({
|
|
@@ -3114,7 +3122,7 @@ var UnifiedPlayer = class _UnifiedPlayer {
|
|
|
3114
3122
|
reason: decision.reason
|
|
3115
3123
|
});
|
|
3116
3124
|
await this.startSession(decision.strategy, decision.reason);
|
|
3117
|
-
await
|
|
3125
|
+
await chunkWRKO6Q42_cjs.attachSubtitleTracks(
|
|
3118
3126
|
this.options.target,
|
|
3119
3127
|
ctx.subtitleTracks,
|
|
3120
3128
|
this.subtitleResources,
|
|
@@ -3543,5 +3551,5 @@ exports.NATIVE_VIDEO_CODECS = NATIVE_VIDEO_CODECS;
|
|
|
3543
3551
|
exports.UnifiedPlayer = UnifiedPlayer;
|
|
3544
3552
|
exports.classifyContext = classifyContext;
|
|
3545
3553
|
exports.createPlayer = createPlayer;
|
|
3546
|
-
//# sourceMappingURL=chunk-
|
|
3547
|
-
//# sourceMappingURL=chunk-
|
|
3554
|
+
//# sourceMappingURL=chunk-7EF4VTUS.cjs.map
|
|
3555
|
+
//# sourceMappingURL=chunk-7EF4VTUS.cjs.map
|