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.
Files changed (91) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/{avi-B5CQYB7L.cjs → avi-EQE6AR75.cjs} +4 -4
  3. package/dist/{avi-2ILLBNPQ.cjs.map → avi-EQE6AR75.cjs.map} +1 -1
  4. package/dist/{avi-RWWPN2PR.js → avi-NNHH4AAA.js} +3 -3
  5. package/dist/{avi-JXU4GQL2.js.map → avi-NNHH4AAA.js.map} +1 -1
  6. package/dist/{avi-JXU4GQL2.js → avi-S7EY54YA.js} +3 -3
  7. package/dist/{avi-RWWPN2PR.js.map → avi-S7EY54YA.js.map} +1 -1
  8. package/dist/{avi-2ILLBNPQ.cjs → avi-Y3N325WZ.cjs} +4 -4
  9. package/dist/{avi-B5CQYB7L.cjs.map → avi-Y3N325WZ.cjs.map} +1 -1
  10. package/dist/{chunk-GYIJU44C.js → chunk-2LNXMGT6.js} +5 -5
  11. package/dist/{chunk-GYIJU44C.js.map → chunk-2LNXMGT6.js.map} +1 -1
  12. package/dist/{chunk-DCSOQH2N.js → chunk-3AI5WFFN.js} +40 -16
  13. package/dist/chunk-3AI5WFFN.js.map +1 -0
  14. package/dist/{chunk-2NSOOMXW.js → chunk-3YKWU4FM.js} +3 -3
  15. package/dist/{chunk-2NSOOMXW.js.map → chunk-3YKWU4FM.js.map} +1 -1
  16. package/dist/{chunk-CL6UEUQF.js → chunk-5Y5BTB5D.js} +5 -5
  17. package/dist/{chunk-CL6UEUQF.js.map → chunk-5Y5BTB5D.js.map} +1 -1
  18. package/dist/{chunk-NQULEIA3.cjs → chunk-7EF4VTUS.cjs} +36 -28
  19. package/dist/chunk-7EF4VTUS.cjs.map +1 -0
  20. package/dist/{chunk-5KVLE6YI.js → chunk-EDDWAN2L.js} +3 -2
  21. package/dist/chunk-EDDWAN2L.js.map +1 -0
  22. package/dist/{chunk-OTFS7DC4.cjs → chunk-GJBNLPGI.cjs} +14 -14
  23. package/dist/{chunk-OTFS7DC4.cjs.map → chunk-GJBNLPGI.cjs.map} +1 -1
  24. package/dist/{chunk-BYGZN4Z5.cjs → chunk-HBHSUGNI.cjs} +5 -5
  25. package/dist/{chunk-BYGZN4Z5.cjs.map → chunk-HBHSUGNI.cjs.map} +1 -1
  26. package/dist/{chunk-L7A3ECI2.cjs → chunk-HZUVMXBN.cjs} +4 -4
  27. package/dist/{chunk-L7A3ECI2.cjs.map → chunk-HZUVMXBN.cjs.map} +1 -1
  28. package/dist/{chunk-S4WAZC2T.cjs → chunk-WRKO6Q42.cjs} +3 -2
  29. package/dist/chunk-WRKO6Q42.cjs.map +1 -0
  30. package/dist/{chunk-Z33SBWL5.cjs → chunk-YPZFGJV3.cjs} +40 -16
  31. package/dist/chunk-YPZFGJV3.cjs.map +1 -0
  32. package/dist/{chunk-3GKM5DFM.js → chunk-Z26PXRUY.js} +18 -10
  33. package/dist/chunk-Z26PXRUY.js.map +1 -0
  34. package/dist/element-browser.js +65 -19
  35. package/dist/element-browser.js.map +1 -1
  36. package/dist/element.cjs +21 -8
  37. package/dist/element.cjs.map +1 -1
  38. package/dist/element.d.cts +1 -1
  39. package/dist/element.d.ts +1 -1
  40. package/dist/element.js +20 -7
  41. package/dist/element.js.map +1 -1
  42. package/dist/index.cjs +23 -23
  43. package/dist/index.d.cts +2 -2
  44. package/dist/index.d.ts +2 -2
  45. package/dist/index.js +10 -10
  46. package/dist/{libav-demux-3N5Y3VQA.cjs → libav-demux-575OYCT2.cjs} +9 -9
  47. package/dist/{libav-demux-3N5Y3VQA.cjs.map → libav-demux-575OYCT2.cjs.map} +1 -1
  48. package/dist/{libav-demux-JXD4OTLM.js → libav-demux-SXZDLC7W.js} +4 -4
  49. package/dist/{libav-demux-JXD4OTLM.js.map → libav-demux-SXZDLC7W.js.map} +1 -1
  50. package/dist/libav-http-reader-2S5HAHW4.js +3 -0
  51. package/dist/{libav-http-reader-WXG3Z7AI.js.map → libav-http-reader-2S5HAHW4.js.map} +1 -1
  52. package/dist/libav-http-reader-Q356EO2K.cjs +16 -0
  53. package/dist/{libav-http-reader-AZLE7YFS.cjs.map → libav-http-reader-Q356EO2K.cjs.map} +1 -1
  54. package/dist/{player-DDdNVFDv.d.cts → player-bQ6n4hVp.d.cts} +15 -0
  55. package/dist/{player-DDdNVFDv.d.ts → player-bQ6n4hVp.d.ts} +15 -0
  56. package/dist/player.cjs +166 -33
  57. package/dist/player.cjs.map +1 -1
  58. package/dist/player.d.cts +36 -0
  59. package/dist/player.d.ts +36 -0
  60. package/dist/player.js +162 -29
  61. package/dist/player.js.map +1 -1
  62. package/dist/remux-7TA4FKTY.js +10 -0
  63. package/dist/{remux-56V7LDAD.js.map → remux-7TA4FKTY.js.map} +1 -1
  64. package/dist/remux-VPKCLHHM.cjs +35 -0
  65. package/dist/{remux-KUS5GIL6.cjs.map → remux-VPKCLHHM.cjs.map} +1 -1
  66. package/dist/subtitles-5H24MEBJ.js +4 -0
  67. package/dist/{subtitles-4T74JRGT.js.map → subtitles-5H24MEBJ.js.map} +1 -1
  68. package/dist/subtitles-HMVGWTU2.cjs +29 -0
  69. package/dist/{subtitles-QUH4LPI4.cjs.map → subtitles-HMVGWTU2.cjs.map} +1 -1
  70. package/package.json +1 -1
  71. package/src/element/avbridge-player.ts +128 -18
  72. package/src/element/avbridge-subtitles.ts +273 -0
  73. package/src/element/avbridge-video.ts +21 -1
  74. package/src/element/player-styles.ts +13 -1
  75. package/src/player.ts +3 -3
  76. package/src/strategies/fallback/audio-output.ts +10 -0
  77. package/src/subtitles/index.ts +2 -0
  78. package/src/types.ts +15 -0
  79. package/src/util/libav-http-reader.ts +58 -19
  80. package/dist/chunk-3GKM5DFM.js.map +0 -1
  81. package/dist/chunk-5KVLE6YI.js.map +0 -1
  82. package/dist/chunk-DCSOQH2N.js.map +0 -1
  83. package/dist/chunk-NQULEIA3.cjs.map +0 -1
  84. package/dist/chunk-S4WAZC2T.cjs.map +0 -1
  85. package/dist/chunk-Z33SBWL5.cjs.map +0 -1
  86. package/dist/libav-http-reader-AZLE7YFS.cjs +0 -16
  87. package/dist/libav-http-reader-WXG3Z7AI.js +0 -3
  88. package/dist/remux-56V7LDAD.js +0 -10
  89. package/dist/remux-KUS5GIL6.cjs +0 -35
  90. package/dist/subtitles-4T74JRGT.js +0 -4
  91. package/dist/subtitles-QUH4LPI4.cjs +0 -29
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkS4WAZC2T_cjs = require('./chunk-S4WAZC2T.cjs');
4
- var chunkBYGZN4Z5_cjs = require('./chunk-BYGZN4Z5.cjs');
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 chunkL7A3ECI2_cjs = require('./chunk-L7A3ECI2.cjs');
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 = chunkBYGZN4Z5_cjs.avbridgeVideoToMediabunny(videoTrackInfo.codec);
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 chunkBYGZN4Z5_cjs.buildMediabunnySourceFromInput(mb, ctx.source),
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 = chunkBYGZN4Z5_cjs.avbridgeAudioToMediabunny(trackInfo.codec);
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 chunkS4WAZC2T_cjs.SubtitleOverlay(overlayParent);
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-AZLE7YFS.cjs');
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 = chunkL7A3ECI2_cjs.packetPtsSec(pkt, videoTimeBase);
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 = chunkL7A3ECI2_cjs.packetPtsSec(pkt, audioTimeBase);
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
- chunkL7A3ECI2_cjs.sanitizePacketTimestamp(pkt, () => {
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
- chunkL7A3ECI2_cjs.sanitizeFrameTimestamp(
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 = chunkL7A3ECI2_cjs.libavFrameToInterleavedFloat32(f);
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-AZLE7YFS.cjs');
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 = chunkL7A3ECI2_cjs.packetPtsSec(pkt, videoTimeBase);
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 = chunkL7A3ECI2_cjs.packetPtsSec(pkt, audioTimeBase);
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
- chunkL7A3ECI2_cjs.sanitizeFrameTimestamp(
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
- chunkL7A3ECI2_cjs.sanitizeFrameTimestamp(
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 = chunkL7A3ECI2_cjs.libavFrameToInterleavedFloat32(f);
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 chunkS4WAZC2T_cjs.SubtitleResourceBag();
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, () => chunkBYGZN4Z5_cjs.probe(this.options.source, this.transport));
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 chunkS4WAZC2T_cjs.discoverSidecars(this.options.source, this.options.directory);
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 chunkS4WAZC2T_cjs.attachSubtitleTracks(
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-NQULEIA3.cjs.map
3547
- //# sourceMappingURL=chunk-NQULEIA3.cjs.map
3554
+ //# sourceMappingURL=chunk-7EF4VTUS.cjs.map
3555
+ //# sourceMappingURL=chunk-7EF4VTUS.cjs.map