avbridge 2.3.0 → 2.6.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 (111) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/dist/{chunk-6UUT4BEA.cjs → chunk-2IJ66NTD.cjs} +13 -20
  3. package/dist/chunk-2IJ66NTD.cjs.map +1 -0
  4. package/dist/{chunk-XKPSTC34.cjs → chunk-2XW2O3YI.cjs} +5 -20
  5. package/dist/chunk-2XW2O3YI.cjs.map +1 -0
  6. package/dist/chunk-5KVLE6YI.js +167 -0
  7. package/dist/chunk-5KVLE6YI.js.map +1 -0
  8. package/dist/{chunk-7RGG6ME7.cjs → chunk-6SOFJV44.cjs} +422 -688
  9. package/dist/chunk-6SOFJV44.cjs.map +1 -0
  10. package/dist/{chunk-2PGRFCWB.js → chunk-CPJLFFCC.js} +8 -18
  11. package/dist/chunk-CPJLFFCC.js.map +1 -0
  12. package/dist/chunk-CPZ7PXAM.cjs +240 -0
  13. package/dist/chunk-CPZ7PXAM.cjs.map +1 -0
  14. package/dist/{chunk-QQXBPW72.js → chunk-E76AMWI4.js} +4 -18
  15. package/dist/chunk-E76AMWI4.js.map +1 -0
  16. package/dist/chunk-LUFA47FP.js +19 -0
  17. package/dist/chunk-LUFA47FP.js.map +1 -0
  18. package/dist/{chunk-NV7ILLWH.js → chunk-OGYHFY6K.js} +404 -665
  19. package/dist/chunk-OGYHFY6K.js.map +1 -0
  20. package/dist/chunk-Q2VUO52Z.cjs +374 -0
  21. package/dist/chunk-Q2VUO52Z.cjs.map +1 -0
  22. package/dist/chunk-QDJLQR53.cjs +22 -0
  23. package/dist/chunk-QDJLQR53.cjs.map +1 -0
  24. package/dist/chunk-S4WAZC2T.cjs +173 -0
  25. package/dist/chunk-S4WAZC2T.cjs.map +1 -0
  26. package/dist/chunk-SMH6IOP2.js +368 -0
  27. package/dist/chunk-SMH6IOP2.js.map +1 -0
  28. package/dist/chunk-SR3MPV4D.js +237 -0
  29. package/dist/chunk-SR3MPV4D.js.map +1 -0
  30. package/dist/chunk-X2K3GIWE.js +235 -0
  31. package/dist/chunk-X2K3GIWE.js.map +1 -0
  32. package/dist/chunk-ZCUXHW55.cjs +242 -0
  33. package/dist/chunk-ZCUXHW55.cjs.map +1 -0
  34. package/dist/element-browser.js +883 -492
  35. package/dist/element-browser.js.map +1 -1
  36. package/dist/element.cjs +88 -6
  37. package/dist/element.cjs.map +1 -1
  38. package/dist/element.d.cts +51 -1
  39. package/dist/element.d.ts +51 -1
  40. package/dist/element.js +87 -5
  41. package/dist/element.js.map +1 -1
  42. package/dist/index.cjs +523 -393
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.cts +2 -2
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +494 -366
  47. package/dist/index.js.map +1 -1
  48. package/dist/libav-demux-H2GS46GH.cjs +27 -0
  49. package/dist/libav-demux-H2GS46GH.cjs.map +1 -0
  50. package/dist/libav-demux-OWZ4T2YW.js +6 -0
  51. package/dist/libav-demux-OWZ4T2YW.js.map +1 -0
  52. package/dist/{libav-import-GST2AMPL.cjs → libav-import-2ZVKV2E7.cjs} +2 -2
  53. package/dist/{libav-import-GST2AMPL.cjs.map → libav-import-2ZVKV2E7.cjs.map} +1 -1
  54. package/dist/{libav-import-2JURFHEW.js → libav-import-6MGLCXVQ.js} +2 -2
  55. package/dist/{libav-import-2JURFHEW.js.map → libav-import-6MGLCXVQ.js.map} +1 -1
  56. package/dist/{player-B6WB74RD.d.ts → player-DGXeCNfD.d.cts} +41 -1
  57. package/dist/{player-B6WB74RD.d.cts → player-DGXeCNfD.d.ts} +41 -1
  58. package/dist/player.cjs +731 -472
  59. package/dist/player.cjs.map +1 -1
  60. package/dist/player.d.cts +229 -120
  61. package/dist/player.d.ts +229 -120
  62. package/dist/player.js +710 -451
  63. package/dist/player.js.map +1 -1
  64. package/dist/remux-OBSMIENG.cjs +35 -0
  65. package/dist/remux-OBSMIENG.cjs.map +1 -0
  66. package/dist/remux-WBYIZBBX.js +10 -0
  67. package/dist/remux-WBYIZBBX.js.map +1 -0
  68. package/dist/source-4TZ6KMNV.js +4 -0
  69. package/dist/{source-F656KYYV.js.map → source-4TZ6KMNV.js.map} +1 -1
  70. package/dist/source-7YLO6E7X.cjs +29 -0
  71. package/dist/{source-73CAH6HW.cjs.map → source-7YLO6E7X.cjs.map} +1 -1
  72. package/dist/source-MTX5ELUZ.js +4 -0
  73. package/dist/{source-QJR3OHTW.js.map → source-MTX5ELUZ.js.map} +1 -1
  74. package/dist/source-VFLXLOCN.cjs +29 -0
  75. package/dist/{source-VB74JQ7Z.cjs.map → source-VFLXLOCN.cjs.map} +1 -1
  76. package/dist/subtitles-4T74JRGT.js +4 -0
  77. package/dist/subtitles-4T74JRGT.js.map +1 -0
  78. package/dist/subtitles-QUH4LPI4.cjs +29 -0
  79. package/dist/subtitles-QUH4LPI4.cjs.map +1 -0
  80. package/package.json +1 -1
  81. package/src/convert/remux.ts +1 -35
  82. package/src/convert/transcode-libav.ts +691 -0
  83. package/src/convert/transcode.ts +12 -4
  84. package/src/element/avbridge-player.ts +100 -0
  85. package/src/element/avbridge-video.ts +140 -3
  86. package/src/element/player-styles.ts +12 -0
  87. package/src/errors.ts +6 -0
  88. package/src/player.ts +15 -16
  89. package/src/strategies/fallback/decoder.ts +96 -173
  90. package/src/strategies/fallback/index.ts +46 -2
  91. package/src/strategies/fallback/libav-import.ts +9 -1
  92. package/src/strategies/fallback/video-renderer.ts +107 -0
  93. package/src/strategies/hybrid/decoder.ts +88 -180
  94. package/src/strategies/hybrid/index.ts +35 -2
  95. package/src/strategies/native.ts +6 -3
  96. package/src/strategies/remux/index.ts +14 -2
  97. package/src/strategies/remux/pipeline.ts +72 -12
  98. package/src/subtitles/render.ts +8 -0
  99. package/src/types.ts +32 -0
  100. package/src/util/libav-demux.ts +405 -0
  101. package/src/util/time-ranges.ts +40 -0
  102. package/dist/chunk-2PGRFCWB.js.map +0 -1
  103. package/dist/chunk-6UUT4BEA.cjs.map +0 -1
  104. package/dist/chunk-7RGG6ME7.cjs.map +0 -1
  105. package/dist/chunk-NV7ILLWH.js.map +0 -1
  106. package/dist/chunk-QQXBPW72.js.map +0 -1
  107. package/dist/chunk-XKPSTC34.cjs.map +0 -1
  108. package/dist/source-73CAH6HW.cjs +0 -28
  109. package/dist/source-F656KYYV.js +0 -3
  110. package/dist/source-QJR3OHTW.js +0 -3
  111. package/dist/source-VB74JQ7Z.cjs +0 -28
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var chunkQ2VUO52Z_cjs = require('./chunk-Q2VUO52Z.cjs');
4
+ require('./chunk-ZCUXHW55.cjs');
5
+ require('./chunk-2IJ66NTD.cjs');
6
+ require('./chunk-QDJLQR53.cjs');
7
+ require('./chunk-CPZ7PXAM.cjs');
8
+ require('./chunk-Z33SBWL5.cjs');
9
+ require('./chunk-G4APZMCP.cjs');
10
+ require('./chunk-F3LQJKXK.cjs');
11
+
12
+
13
+
14
+ Object.defineProperty(exports, "createOutputFormat", {
15
+ enumerable: true,
16
+ get: function () { return chunkQ2VUO52Z_cjs.createOutputFormat; }
17
+ });
18
+ Object.defineProperty(exports, "generateFilename", {
19
+ enumerable: true,
20
+ get: function () { return chunkQ2VUO52Z_cjs.generateFilename; }
21
+ });
22
+ Object.defineProperty(exports, "mimeForFormat", {
23
+ enumerable: true,
24
+ get: function () { return chunkQ2VUO52Z_cjs.mimeForFormat; }
25
+ });
26
+ Object.defineProperty(exports, "remux", {
27
+ enumerable: true,
28
+ get: function () { return chunkQ2VUO52Z_cjs.remux; }
29
+ });
30
+ Object.defineProperty(exports, "validateRemuxEligibility", {
31
+ enumerable: true,
32
+ get: function () { return chunkQ2VUO52Z_cjs.validateRemuxEligibility; }
33
+ });
34
+ //# sourceMappingURL=remux-OBSMIENG.cjs.map
35
+ //# sourceMappingURL=remux-OBSMIENG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"remux-OBSMIENG.cjs"}
@@ -0,0 +1,10 @@
1
+ export { createOutputFormat, generateFilename, mimeForFormat, remux, validateRemuxEligibility } from './chunk-SMH6IOP2.js';
2
+ import './chunk-SR3MPV4D.js';
3
+ import './chunk-CPJLFFCC.js';
4
+ import './chunk-LUFA47FP.js';
5
+ import './chunk-X2K3GIWE.js';
6
+ import './chunk-DCSOQH2N.js';
7
+ import './chunk-5DMTJVIU.js';
8
+ import './chunk-5YAWWKA3.js';
9
+ //# sourceMappingURL=remux-WBYIZBBX.js.map
10
+ //# sourceMappingURL=remux-WBYIZBBX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"remux-WBYIZBBX.js"}
@@ -0,0 +1,4 @@
1
+ export { isInMemorySource, normalizeSource, sniffContainer, sniffContainerFromBytes, sniffNormalizedSource } from './chunk-CPJLFFCC.js';
2
+ import './chunk-LUFA47FP.js';
3
+ //# sourceMappingURL=source-4TZ6KMNV.js.map
4
+ //# sourceMappingURL=source-4TZ6KMNV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"source-F656KYYV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"source-4TZ6KMNV.js"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var chunk2XW2O3YI_cjs = require('./chunk-2XW2O3YI.cjs');
4
+ require('./chunk-QDJLQR53.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "isInMemorySource", {
9
+ enumerable: true,
10
+ get: function () { return chunk2XW2O3YI_cjs.isInMemorySource; }
11
+ });
12
+ Object.defineProperty(exports, "normalizeSource", {
13
+ enumerable: true,
14
+ get: function () { return chunk2XW2O3YI_cjs.normalizeSource; }
15
+ });
16
+ Object.defineProperty(exports, "sniffContainer", {
17
+ enumerable: true,
18
+ get: function () { return chunk2XW2O3YI_cjs.sniffContainer; }
19
+ });
20
+ Object.defineProperty(exports, "sniffContainerFromBytes", {
21
+ enumerable: true,
22
+ get: function () { return chunk2XW2O3YI_cjs.sniffContainerFromBytes; }
23
+ });
24
+ Object.defineProperty(exports, "sniffNormalizedSource", {
25
+ enumerable: true,
26
+ get: function () { return chunk2XW2O3YI_cjs.sniffNormalizedSource; }
27
+ });
28
+ //# sourceMappingURL=source-7YLO6E7X.cjs.map
29
+ //# sourceMappingURL=source-7YLO6E7X.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"source-73CAH6HW.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"source-7YLO6E7X.cjs"}
@@ -0,0 +1,4 @@
1
+ export { isInMemorySource, normalizeSource, sniffContainer, sniffContainerFromBytes, sniffNormalizedSource } from './chunk-E76AMWI4.js';
2
+ import './chunk-LUFA47FP.js';
3
+ //# sourceMappingURL=source-MTX5ELUZ.js.map
4
+ //# sourceMappingURL=source-MTX5ELUZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"source-QJR3OHTW.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"source-MTX5ELUZ.js"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var chunk2IJ66NTD_cjs = require('./chunk-2IJ66NTD.cjs');
4
+ require('./chunk-QDJLQR53.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "isInMemorySource", {
9
+ enumerable: true,
10
+ get: function () { return chunk2IJ66NTD_cjs.isInMemorySource; }
11
+ });
12
+ Object.defineProperty(exports, "normalizeSource", {
13
+ enumerable: true,
14
+ get: function () { return chunk2IJ66NTD_cjs.normalizeSource; }
15
+ });
16
+ Object.defineProperty(exports, "sniffContainer", {
17
+ enumerable: true,
18
+ get: function () { return chunk2IJ66NTD_cjs.sniffContainer; }
19
+ });
20
+ Object.defineProperty(exports, "sniffContainerFromBytes", {
21
+ enumerable: true,
22
+ get: function () { return chunk2IJ66NTD_cjs.sniffContainerFromBytes; }
23
+ });
24
+ Object.defineProperty(exports, "sniffNormalizedSource", {
25
+ enumerable: true,
26
+ get: function () { return chunk2IJ66NTD_cjs.sniffNormalizedSource; }
27
+ });
28
+ //# sourceMappingURL=source-VFLXLOCN.cjs.map
29
+ //# sourceMappingURL=source-VFLXLOCN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"source-VB74JQ7Z.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"source-VFLXLOCN.cjs"}
@@ -0,0 +1,4 @@
1
+ export { SubtitleOverlay, SubtitleResourceBag, attachSubtitleTracks, discoverSidecars, srtToVtt } from './chunk-5KVLE6YI.js';
2
+ import './chunk-LUFA47FP.js';
3
+ //# sourceMappingURL=subtitles-4T74JRGT.js.map
4
+ //# sourceMappingURL=subtitles-4T74JRGT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"subtitles-4T74JRGT.js"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var chunkS4WAZC2T_cjs = require('./chunk-S4WAZC2T.cjs');
4
+ require('./chunk-QDJLQR53.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "SubtitleOverlay", {
9
+ enumerable: true,
10
+ get: function () { return chunkS4WAZC2T_cjs.SubtitleOverlay; }
11
+ });
12
+ Object.defineProperty(exports, "SubtitleResourceBag", {
13
+ enumerable: true,
14
+ get: function () { return chunkS4WAZC2T_cjs.SubtitleResourceBag; }
15
+ });
16
+ Object.defineProperty(exports, "attachSubtitleTracks", {
17
+ enumerable: true,
18
+ get: function () { return chunkS4WAZC2T_cjs.attachSubtitleTracks; }
19
+ });
20
+ Object.defineProperty(exports, "discoverSidecars", {
21
+ enumerable: true,
22
+ get: function () { return chunkS4WAZC2T_cjs.discoverSidecars; }
23
+ });
24
+ Object.defineProperty(exports, "srtToVtt", {
25
+ enumerable: true,
26
+ get: function () { return chunkS4WAZC2T_cjs.srtToVtt; }
27
+ });
28
+ //# sourceMappingURL=subtitles-QUH4LPI4.cjs.map
29
+ //# sourceMappingURL=subtitles-QUH4LPI4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"subtitles-QUH4LPI4.cjs"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "avbridge",
3
- "version": "2.3.0",
3
+ "version": "2.6.0",
4
4
  "description": "Play and convert arbitrary video files in the browser. Native, remux, hybrid, fallback, and transcode — one API.",
5
5
  "license": "MIT",
6
6
  "author": "Keishi Hattori",
@@ -18,6 +18,7 @@ import {
18
18
  buildMediabunnySourceFromInput,
19
19
  } from "../probe/mediabunny.js";
20
20
  import { normalizeSource } from "../util/source.js";
21
+ import { sanitizePacketTimestamp } from "../util/libav-demux.js";
21
22
  import { prepareLibavInput, type LibavInputHandle } from "../util/libav-http-reader.js";
22
23
  import type {
23
24
  MediaInput,
@@ -385,41 +386,6 @@ async function doLibavRemux(
385
386
  };
386
387
  }
387
388
 
388
- // ── Packet timestamp sanitizer (from hybrid/decoder.ts) ─────────────────────
389
-
390
- function sanitizePacketTimestamp(
391
- pkt: LibavPacket,
392
- nextUs: () => number,
393
- fallbackTimeBase?: [number, number],
394
- ): void {
395
- const lo = pkt.pts ?? 0;
396
- const hi = pkt.ptshi ?? 0;
397
- const isInvalid = (hi === -2147483648 && lo === 0) || !Number.isFinite(lo);
398
- if (isInvalid) {
399
- const us = nextUs();
400
- pkt.pts = us;
401
- pkt.ptshi = 0;
402
- pkt.time_base_num = 1;
403
- pkt.time_base_den = 1_000_000;
404
- return;
405
- }
406
- const tb = fallbackTimeBase ?? [1, 1_000_000];
407
- const pts64 = hi * 0x100000000 + lo;
408
- const us = Math.round((pts64 * 1_000_000 * tb[0]) / tb[1]);
409
- if (Number.isFinite(us) && Math.abs(us) <= Number.MAX_SAFE_INTEGER) {
410
- pkt.pts = us;
411
- pkt.ptshi = us < 0 ? -1 : 0;
412
- pkt.time_base_num = 1;
413
- pkt.time_base_den = 1_000_000;
414
- return;
415
- }
416
- const fallback = nextUs();
417
- pkt.pts = fallback;
418
- pkt.ptshi = 0;
419
- pkt.time_base_num = 1;
420
- pkt.time_base_den = 1_000_000;
421
- }
422
-
423
389
  // ── Helpers ─────────────────────────────────────────────────────────────────
424
390
 
425
391
  /** @internal Exported for use by transcode(). */