mediabunny 1.5.0 → 1.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 (198) hide show
  1. package/README.md +7 -0
  2. package/dist/bundles/mediabunny.cjs +60 -31
  3. package/dist/bundles/mediabunny.min.cjs +3 -3
  4. package/dist/bundles/mediabunny.min.mjs +3 -3
  5. package/dist/bundles/mediabunny.mjs +60 -31
  6. package/dist/modules/shared/mp3-misc.d.ts.map +1 -0
  7. package/dist/modules/src/codec-data.d.ts.map +1 -0
  8. package/dist/modules/src/codec.d.ts.map +1 -0
  9. package/dist/modules/src/conversion.d.ts.map +1 -0
  10. package/dist/modules/{conversion.js → src/conversion.js} +1 -1
  11. package/dist/modules/src/custom-coder.d.ts.map +1 -0
  12. package/dist/modules/{custom-coder.js → src/custom-coder.js} +24 -4
  13. package/dist/modules/src/demuxer.d.ts.map +1 -0
  14. package/dist/modules/src/index.d.ts.map +1 -0
  15. package/dist/modules/src/input-format.d.ts.map +1 -0
  16. package/dist/modules/{input-format.js → src/input-format.js} +1 -1
  17. package/dist/modules/src/input-track.d.ts.map +1 -0
  18. package/dist/modules/src/input.d.ts.map +1 -0
  19. package/dist/modules/src/isobmff/isobmff-boxes.d.ts.map +1 -0
  20. package/dist/modules/src/isobmff/isobmff-demuxer.d.ts.map +1 -0
  21. package/dist/modules/src/isobmff/isobmff-misc.d.ts.map +1 -0
  22. package/dist/modules/src/isobmff/isobmff-muxer.d.ts.map +1 -0
  23. package/dist/modules/src/isobmff/isobmff-reader.d.ts.map +1 -0
  24. package/dist/modules/src/matroska/ebml.d.ts.map +1 -0
  25. package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -0
  26. package/dist/modules/src/matroska/matroska-misc.d.ts.map +1 -0
  27. package/dist/modules/src/matroska/matroska-muxer.d.ts.map +1 -0
  28. package/dist/modules/src/media-sink.d.ts.map +1 -0
  29. package/dist/modules/src/media-source.d.ts.map +1 -0
  30. package/dist/modules/{media-source.js → src/media-source.js} +32 -25
  31. package/dist/modules/src/misc.d.ts.map +1 -0
  32. package/dist/modules/{mp3 → src/mp3}/mp3-demuxer.d.ts +1 -1
  33. package/dist/modules/src/mp3/mp3-demuxer.d.ts.map +1 -0
  34. package/dist/modules/{mp3 → src/mp3}/mp3-demuxer.js +1 -1
  35. package/dist/modules/src/mp3/mp3-muxer.d.ts.map +1 -0
  36. package/dist/modules/{mp3 → src/mp3}/mp3-muxer.js +1 -1
  37. package/dist/modules/{mp3 → src/mp3}/mp3-reader.d.ts +1 -1
  38. package/dist/modules/src/mp3/mp3-reader.d.ts.map +1 -0
  39. package/dist/modules/{mp3 → src/mp3}/mp3-reader.js +1 -1
  40. package/dist/modules/src/mp3/mp3-writer.d.ts.map +1 -0
  41. package/dist/modules/{mp3 → src/mp3}/mp3-writer.js +1 -1
  42. package/dist/modules/src/muxer.d.ts.map +1 -0
  43. package/dist/modules/src/ogg/ogg-demuxer.d.ts.map +1 -0
  44. package/dist/modules/src/ogg/ogg-misc.d.ts.map +1 -0
  45. package/dist/modules/src/ogg/ogg-muxer.d.ts.map +1 -0
  46. package/dist/modules/src/ogg/ogg-reader.d.ts.map +1 -0
  47. package/dist/modules/src/output-format.d.ts.map +1 -0
  48. package/dist/modules/src/output.d.ts.map +1 -0
  49. package/dist/modules/{output.js → src/output.js} +2 -2
  50. package/dist/modules/src/packet.d.ts.map +1 -0
  51. package/dist/modules/src/pcm.d.ts.map +1 -0
  52. package/dist/modules/src/reader.d.ts.map +1 -0
  53. package/dist/modules/src/sample.d.ts.map +1 -0
  54. package/dist/modules/src/source.d.ts.map +1 -0
  55. package/dist/modules/src/subtitles.d.ts.map +1 -0
  56. package/dist/modules/src/target.d.ts.map +1 -0
  57. package/dist/modules/src/tsconfig.tsbuildinfo +1 -0
  58. package/dist/modules/src/wave/riff-reader.d.ts.map +1 -0
  59. package/dist/modules/src/wave/riff-writer.d.ts.map +1 -0
  60. package/dist/modules/src/wave/wave-demuxer.d.ts.map +1 -0
  61. package/dist/modules/src/wave/wave-muxer.d.ts.map +1 -0
  62. package/dist/modules/src/writer.d.ts.map +1 -0
  63. package/package.json +17 -9
  64. package/src/conversion.ts +1 -1
  65. package/src/custom-coder.ts +32 -4
  66. package/src/input-format.ts +1 -1
  67. package/src/media-source.ts +36 -25
  68. package/src/mp3/mp3-demuxer.ts +1 -1
  69. package/src/mp3/mp3-muxer.ts +1 -1
  70. package/src/mp3/mp3-reader.ts +1 -1
  71. package/src/mp3/mp3-writer.ts +1 -1
  72. package/src/output.ts +2 -2
  73. package/src/tsconfig.json +5 -2
  74. package/dist/modules/codec-data.d.ts.map +0 -1
  75. package/dist/modules/codec.d.ts.map +0 -1
  76. package/dist/modules/conversion.d.ts.map +0 -1
  77. package/dist/modules/custom-coder.d.ts.map +0 -1
  78. package/dist/modules/demuxer.d.ts.map +0 -1
  79. package/dist/modules/index.d.ts.map +0 -1
  80. package/dist/modules/input-format.d.ts.map +0 -1
  81. package/dist/modules/input-track.d.ts.map +0 -1
  82. package/dist/modules/input.d.ts.map +0 -1
  83. package/dist/modules/isobmff/isobmff-boxes.d.ts.map +0 -1
  84. package/dist/modules/isobmff/isobmff-demuxer.d.ts.map +0 -1
  85. package/dist/modules/isobmff/isobmff-misc.d.ts.map +0 -1
  86. package/dist/modules/isobmff/isobmff-muxer.d.ts.map +0 -1
  87. package/dist/modules/isobmff/isobmff-reader.d.ts.map +0 -1
  88. package/dist/modules/matroska/ebml.d.ts.map +0 -1
  89. package/dist/modules/matroska/matroska-demuxer.d.ts.map +0 -1
  90. package/dist/modules/matroska/matroska-misc.d.ts.map +0 -1
  91. package/dist/modules/matroska/matroska-muxer.d.ts.map +0 -1
  92. package/dist/modules/media-sink.d.ts.map +0 -1
  93. package/dist/modules/media-source.d.ts.map +0 -1
  94. package/dist/modules/misc.d.ts.map +0 -1
  95. package/dist/modules/mp3/mp3-demuxer.d.ts.map +0 -1
  96. package/dist/modules/mp3/mp3-misc.d.ts.map +0 -1
  97. package/dist/modules/mp3/mp3-muxer.d.ts.map +0 -1
  98. package/dist/modules/mp3/mp3-reader.d.ts.map +0 -1
  99. package/dist/modules/mp3/mp3-writer.d.ts.map +0 -1
  100. package/dist/modules/muxer.d.ts.map +0 -1
  101. package/dist/modules/ogg/ogg-demuxer.d.ts.map +0 -1
  102. package/dist/modules/ogg/ogg-misc.d.ts.map +0 -1
  103. package/dist/modules/ogg/ogg-muxer.d.ts.map +0 -1
  104. package/dist/modules/ogg/ogg-reader.d.ts.map +0 -1
  105. package/dist/modules/output-format.d.ts.map +0 -1
  106. package/dist/modules/output.d.ts.map +0 -1
  107. package/dist/modules/packet.d.ts.map +0 -1
  108. package/dist/modules/pcm.d.ts.map +0 -1
  109. package/dist/modules/reader.d.ts.map +0 -1
  110. package/dist/modules/sample.d.ts.map +0 -1
  111. package/dist/modules/source.d.ts.map +0 -1
  112. package/dist/modules/subtitles.d.ts.map +0 -1
  113. package/dist/modules/target.d.ts.map +0 -1
  114. package/dist/modules/wave/riff-reader.d.ts.map +0 -1
  115. package/dist/modules/wave/riff-writer.d.ts.map +0 -1
  116. package/dist/modules/wave/wave-demuxer.d.ts.map +0 -1
  117. package/dist/modules/wave/wave-muxer.d.ts.map +0 -1
  118. package/dist/modules/writer.d.ts.map +0 -1
  119. package/src/mp3/mp3-misc.ts +0 -158
  120. /package/dist/modules/{mp3 → shared}/mp3-misc.d.ts +0 -0
  121. /package/dist/modules/{mp3 → shared}/mp3-misc.js +0 -0
  122. /package/dist/modules/{codec-data.d.ts → src/codec-data.d.ts} +0 -0
  123. /package/dist/modules/{codec-data.js → src/codec-data.js} +0 -0
  124. /package/dist/modules/{codec.d.ts → src/codec.d.ts} +0 -0
  125. /package/dist/modules/{codec.js → src/codec.js} +0 -0
  126. /package/dist/modules/{conversion.d.ts → src/conversion.d.ts} +0 -0
  127. /package/dist/modules/{custom-coder.d.ts → src/custom-coder.d.ts} +0 -0
  128. /package/dist/modules/{demuxer.d.ts → src/demuxer.d.ts} +0 -0
  129. /package/dist/modules/{demuxer.js → src/demuxer.js} +0 -0
  130. /package/dist/modules/{index.d.ts → src/index.d.ts} +0 -0
  131. /package/dist/modules/{index.js → src/index.js} +0 -0
  132. /package/dist/modules/{input-format.d.ts → src/input-format.d.ts} +0 -0
  133. /package/dist/modules/{input-track.d.ts → src/input-track.d.ts} +0 -0
  134. /package/dist/modules/{input-track.js → src/input-track.js} +0 -0
  135. /package/dist/modules/{input.d.ts → src/input.d.ts} +0 -0
  136. /package/dist/modules/{input.js → src/input.js} +0 -0
  137. /package/dist/modules/{isobmff → src/isobmff}/isobmff-boxes.d.ts +0 -0
  138. /package/dist/modules/{isobmff → src/isobmff}/isobmff-boxes.js +0 -0
  139. /package/dist/modules/{isobmff → src/isobmff}/isobmff-demuxer.d.ts +0 -0
  140. /package/dist/modules/{isobmff → src/isobmff}/isobmff-demuxer.js +0 -0
  141. /package/dist/modules/{isobmff → src/isobmff}/isobmff-misc.d.ts +0 -0
  142. /package/dist/modules/{isobmff → src/isobmff}/isobmff-misc.js +0 -0
  143. /package/dist/modules/{isobmff → src/isobmff}/isobmff-muxer.d.ts +0 -0
  144. /package/dist/modules/{isobmff → src/isobmff}/isobmff-muxer.js +0 -0
  145. /package/dist/modules/{isobmff → src/isobmff}/isobmff-reader.d.ts +0 -0
  146. /package/dist/modules/{isobmff → src/isobmff}/isobmff-reader.js +0 -0
  147. /package/dist/modules/{matroska → src/matroska}/ebml.d.ts +0 -0
  148. /package/dist/modules/{matroska → src/matroska}/ebml.js +0 -0
  149. /package/dist/modules/{matroska → src/matroska}/matroska-demuxer.d.ts +0 -0
  150. /package/dist/modules/{matroska → src/matroska}/matroska-demuxer.js +0 -0
  151. /package/dist/modules/{matroska → src/matroska}/matroska-misc.d.ts +0 -0
  152. /package/dist/modules/{matroska → src/matroska}/matroska-misc.js +0 -0
  153. /package/dist/modules/{matroska → src/matroska}/matroska-muxer.d.ts +0 -0
  154. /package/dist/modules/{matroska → src/matroska}/matroska-muxer.js +0 -0
  155. /package/dist/modules/{media-sink.d.ts → src/media-sink.d.ts} +0 -0
  156. /package/dist/modules/{media-sink.js → src/media-sink.js} +0 -0
  157. /package/dist/modules/{media-source.d.ts → src/media-source.d.ts} +0 -0
  158. /package/dist/modules/{misc.d.ts → src/misc.d.ts} +0 -0
  159. /package/dist/modules/{misc.js → src/misc.js} +0 -0
  160. /package/dist/modules/{mp3 → src/mp3}/mp3-muxer.d.ts +0 -0
  161. /package/dist/modules/{mp3 → src/mp3}/mp3-writer.d.ts +0 -0
  162. /package/dist/modules/{muxer.d.ts → src/muxer.d.ts} +0 -0
  163. /package/dist/modules/{muxer.js → src/muxer.js} +0 -0
  164. /package/dist/modules/{ogg → src/ogg}/ogg-demuxer.d.ts +0 -0
  165. /package/dist/modules/{ogg → src/ogg}/ogg-demuxer.js +0 -0
  166. /package/dist/modules/{ogg → src/ogg}/ogg-misc.d.ts +0 -0
  167. /package/dist/modules/{ogg → src/ogg}/ogg-misc.js +0 -0
  168. /package/dist/modules/{ogg → src/ogg}/ogg-muxer.d.ts +0 -0
  169. /package/dist/modules/{ogg → src/ogg}/ogg-muxer.js +0 -0
  170. /package/dist/modules/{ogg → src/ogg}/ogg-reader.d.ts +0 -0
  171. /package/dist/modules/{ogg → src/ogg}/ogg-reader.js +0 -0
  172. /package/dist/modules/{output-format.d.ts → src/output-format.d.ts} +0 -0
  173. /package/dist/modules/{output-format.js → src/output-format.js} +0 -0
  174. /package/dist/modules/{output.d.ts → src/output.d.ts} +0 -0
  175. /package/dist/modules/{packet.d.ts → src/packet.d.ts} +0 -0
  176. /package/dist/modules/{packet.js → src/packet.js} +0 -0
  177. /package/dist/modules/{pcm.d.ts → src/pcm.d.ts} +0 -0
  178. /package/dist/modules/{pcm.js → src/pcm.js} +0 -0
  179. /package/dist/modules/{reader.d.ts → src/reader.d.ts} +0 -0
  180. /package/dist/modules/{reader.js → src/reader.js} +0 -0
  181. /package/dist/modules/{sample.d.ts → src/sample.d.ts} +0 -0
  182. /package/dist/modules/{sample.js → src/sample.js} +0 -0
  183. /package/dist/modules/{source.d.ts → src/source.d.ts} +0 -0
  184. /package/dist/modules/{source.js → src/source.js} +0 -0
  185. /package/dist/modules/{subtitles.d.ts → src/subtitles.d.ts} +0 -0
  186. /package/dist/modules/{subtitles.js → src/subtitles.js} +0 -0
  187. /package/dist/modules/{target.d.ts → src/target.d.ts} +0 -0
  188. /package/dist/modules/{target.js → src/target.js} +0 -0
  189. /package/dist/modules/{wave → src/wave}/riff-reader.d.ts +0 -0
  190. /package/dist/modules/{wave → src/wave}/riff-reader.js +0 -0
  191. /package/dist/modules/{wave → src/wave}/riff-writer.d.ts +0 -0
  192. /package/dist/modules/{wave → src/wave}/riff-writer.js +0 -0
  193. /package/dist/modules/{wave → src/wave}/wave-demuxer.d.ts +0 -0
  194. /package/dist/modules/{wave → src/wave}/wave-demuxer.js +0 -0
  195. /package/dist/modules/{wave → src/wave}/wave-muxer.d.ts +0 -0
  196. /package/dist/modules/{wave → src/wave}/wave-muxer.js +0 -0
  197. /package/dist/modules/{writer.d.ts → src/writer.d.ts} +0 -0
  198. /package/dist/modules/{writer.js → src/writer.js} +0 -0
package/README.md CHANGED
@@ -49,10 +49,17 @@ Core features include:
49
49
 
50
50
  ### Installation
51
51
 
52
+ Install it via npm:
53
+
52
54
  ```bash
53
55
  npm install mediabunny
54
56
  ```
55
57
 
58
+ Alternatively, include it directly with a script tag using one of the [builds](https://github.com/Vanilagy/mediabunny/releases). Doing so exposes a global `Mediabunny` object.
59
+ ```html
60
+ <script src="mediabunny.cjs"></script>
61
+ ```
62
+
56
63
  Requires any JavaScript environment that can run ECMAScript 2021 or later. Mediabunny is expected to be run in modern browsers. For types, TypeScript 5.7 or later is required.
57
64
 
58
65
  ### Read file metadata
@@ -586,18 +586,38 @@ var Mediabunny = (() => {
586
586
  var customAudioEncoders = [];
587
587
  var registerDecoder = (decoder) => {
588
588
  if (decoder.prototype instanceof CustomVideoDecoder) {
589
- customVideoDecoders.push(decoder);
589
+ const casted = decoder;
590
+ if (customVideoDecoders.includes(casted)) {
591
+ console.warn("Video decoder already registered.");
592
+ return;
593
+ }
594
+ customVideoDecoders.push(casted);
590
595
  } else if (decoder.prototype instanceof CustomAudioDecoder) {
591
- customAudioDecoders.push(decoder);
596
+ const casted = decoder;
597
+ if (customAudioDecoders.includes(casted)) {
598
+ console.warn("Audio decoder already registered.");
599
+ return;
600
+ }
601
+ customAudioDecoders.push(casted);
592
602
  } else {
593
603
  throw new TypeError("Decoder must be a CustomVideoDecoder or CustomAudioDecoder.");
594
604
  }
595
605
  };
596
606
  var registerEncoder = (encoder) => {
597
607
  if (encoder.prototype instanceof CustomVideoEncoder) {
598
- customVideoEncoders.push(encoder);
608
+ const casted = encoder;
609
+ if (customVideoEncoders.includes(casted)) {
610
+ console.warn("Video encoder already registered.");
611
+ return;
612
+ }
613
+ customVideoEncoders.push(casted);
599
614
  } else if (encoder.prototype instanceof CustomAudioEncoder) {
600
- customAudioEncoders.push(encoder);
615
+ const casted = encoder;
616
+ if (customAudioEncoders.includes(casted)) {
617
+ console.warn("Audio encoder already registered.");
618
+ return;
619
+ }
620
+ customAudioEncoders.push(casted);
601
621
  } else {
602
622
  throw new TypeError("Encoder must be a CustomVideoEncoder or CustomAudioEncoder.");
603
623
  }
@@ -6427,7 +6447,7 @@ ${cue.notes ?? ""}`;
6427
6447
  }
6428
6448
  };
6429
6449
 
6430
- // src/mp3/mp3-misc.ts
6450
+ // shared/mp3-misc.ts
6431
6451
  var FRAME_HEADER_SIZE = 4;
6432
6452
  var MPEG_V1_BITRATES = {
6433
6453
  // Layer 3
@@ -10562,7 +10582,8 @@ ${cue.notes ?? ""}`;
10562
10582
  async _start() {
10563
10583
  }
10564
10584
  /** @internal */
10565
- async _flushAndClose() {
10585
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10586
+ async _flushAndClose(forceClose) {
10566
10587
  }
10567
10588
  /**
10568
10589
  * Closes this source. This prevents future samples from being added and signals to the output file that no further
@@ -10581,7 +10602,7 @@ ${cue.notes ?? ""}`;
10581
10602
  throw new Error("Cannot call close before output has been started.");
10582
10603
  }
10583
10604
  this._closingPromise = (async () => {
10584
- await this._flushAndClose();
10605
+ await this._flushAndClose(false);
10585
10606
  this._closed = true;
10586
10607
  if (connectedTrack.output.state === "finalizing" || connectedTrack.output.state === "finalized") {
10587
10608
  return;
@@ -10590,11 +10611,11 @@ ${cue.notes ?? ""}`;
10590
10611
  })();
10591
10612
  }
10592
10613
  /** @internal */
10593
- async _flushOrWaitForClose() {
10614
+ async _flushOrWaitForOngoingClose(forceClose) {
10594
10615
  if (this._closingPromise) {
10595
10616
  return this._closingPromise;
10596
10617
  } else {
10597
- return this._flushAndClose();
10618
+ return this._flushAndClose(forceClose);
10598
10619
  }
10599
10620
  }
10600
10621
  };
@@ -10819,13 +10840,17 @@ ${cue.notes ?? ""}`;
10819
10840
  this.encoderInitialized = true;
10820
10841
  })();
10821
10842
  }
10822
- async flushAndClose() {
10843
+ async flushAndClose(forceClose) {
10823
10844
  this.checkForEncoderError();
10824
10845
  if (this.customEncoder) {
10825
- void this.customEncoderCallSerializer.call(() => this.customEncoder.flush());
10846
+ if (!forceClose) {
10847
+ void this.customEncoderCallSerializer.call(() => this.customEncoder.flush());
10848
+ }
10826
10849
  await this.customEncoderCallSerializer.call(() => this.customEncoder.close());
10827
10850
  } else if (this.encoder) {
10828
- await this.encoder.flush();
10851
+ if (!forceClose) {
10852
+ await this.encoder.flush();
10853
+ }
10829
10854
  this.encoder.close();
10830
10855
  }
10831
10856
  this.checkForEncoderError();
@@ -10863,8 +10888,8 @@ ${cue.notes ?? ""}`;
10863
10888
  return this._encoder.add(videoSample, false, encodeOptions);
10864
10889
  }
10865
10890
  /** @internal */
10866
- _flushAndClose() {
10867
- return this._encoder.flushAndClose();
10891
+ _flushAndClose(forceClose) {
10892
+ return this._encoder.flushAndClose(forceClose);
10868
10893
  }
10869
10894
  };
10870
10895
  var CanvasSource = class extends VideoSource {
@@ -10897,8 +10922,8 @@ ${cue.notes ?? ""}`;
10897
10922
  return this._encoder.add(sample, true, encodeOptions);
10898
10923
  }
10899
10924
  /** @internal */
10900
- _flushAndClose() {
10901
- return this._encoder.flushAndClose();
10925
+ _flushAndClose(forceClose) {
10926
+ return this._encoder.flushAndClose(forceClose);
10902
10927
  }
10903
10928
  };
10904
10929
  var MediaStreamVideoTrackSource = class extends VideoSource {
@@ -11004,7 +11029,7 @@ ${cue.notes ?? ""}`;
11004
11029
  }
11005
11030
  }
11006
11031
  /** @internal */
11007
- async _flushAndClose() {
11032
+ async _flushAndClose(forceClose) {
11008
11033
  if (this._abortController) {
11009
11034
  this._abortController.abort();
11010
11035
  this._abortController = null;
@@ -11028,7 +11053,7 @@ ${cue.notes ?? ""}`;
11028
11053
  mediaStreamTrackProcessorWorker.addEventListener("message", listener);
11029
11054
  });
11030
11055
  }
11031
- await this._encoder.flushAndClose();
11056
+ await this._encoder.flushAndClose(forceClose);
11032
11057
  }
11033
11058
  };
11034
11059
  var AudioSource = class extends MediaSource {
@@ -11392,13 +11417,17 @@ ${cue.notes ?? ""}`;
11392
11417
  ;
11393
11418
  }
11394
11419
  }
11395
- async flushAndClose() {
11420
+ async flushAndClose(forceClose) {
11396
11421
  this.checkForEncoderError();
11397
11422
  if (this.customEncoder) {
11398
- void this.customEncoderCallSerializer.call(() => this.customEncoder.flush());
11423
+ if (!forceClose) {
11424
+ void this.customEncoderCallSerializer.call(() => this.customEncoder.flush());
11425
+ }
11399
11426
  await this.customEncoderCallSerializer.call(() => this.customEncoder.close());
11400
11427
  } else if (this.encoder) {
11401
- await this.encoder.flush();
11428
+ if (!forceClose) {
11429
+ await this.encoder.flush();
11430
+ }
11402
11431
  this.encoder.close();
11403
11432
  }
11404
11433
  this.checkForEncoderError();
@@ -11438,8 +11467,8 @@ ${cue.notes ?? ""}`;
11438
11467
  return this._encoder.add(audioSample, false);
11439
11468
  }
11440
11469
  /** @internal */
11441
- _flushAndClose() {
11442
- return this._encoder.flushAndClose();
11470
+ _flushAndClose(forceClose) {
11471
+ return this._encoder.flushAndClose(forceClose);
11443
11472
  }
11444
11473
  };
11445
11474
  var AudioBufferSource = class extends AudioSource {
@@ -11468,8 +11497,8 @@ ${cue.notes ?? ""}`;
11468
11497
  return Promise.all(promises);
11469
11498
  }
11470
11499
  /** @internal */
11471
- _flushAndClose() {
11472
- return this._encoder.flushAndClose();
11500
+ _flushAndClose(forceClose) {
11501
+ return this._encoder.flushAndClose(forceClose);
11473
11502
  }
11474
11503
  };
11475
11504
  var MediaStreamAudioTrackSource = class extends AudioSource {
@@ -11574,7 +11603,7 @@ ${cue.notes ?? ""}`;
11574
11603
  }
11575
11604
  }
11576
11605
  /** @internal */
11577
- async _flushAndClose() {
11606
+ async _flushAndClose(forceClose) {
11578
11607
  if (this._abortController) {
11579
11608
  this._abortController.abort();
11580
11609
  this._abortController = null;
@@ -11584,13 +11613,13 @@ ${cue.notes ?? ""}`;
11584
11613
  this._scriptProcessorNode.disconnect();
11585
11614
  await this._audioContext.suspend();
11586
11615
  }
11587
- await this._encoder.flushAndClose();
11616
+ await this._encoder.flushAndClose(forceClose);
11588
11617
  }
11589
11618
  };
11590
11619
  var mediaStreamTrackProcessorWorkerCode = () => {
11591
11620
  const sendMessage = (message, transfer) => {
11592
11621
  if (transfer) {
11593
- self.postMessage(message, transfer);
11622
+ self.postMessage(message, { transfer });
11594
11623
  } else {
11595
11624
  self.postMessage(message);
11596
11625
  }
@@ -11944,7 +11973,7 @@ ${cue.notes ?? ""}`;
11944
11973
  return this._cancelPromise = (async () => {
11945
11974
  this.state = "canceled";
11946
11975
  const release = await this._mutex.acquire();
11947
- const promises = this._tracks.map((x) => x.source._flushOrWaitForClose());
11976
+ const promises = this._tracks.map((x) => x.source._flushOrWaitForOngoingClose(true));
11948
11977
  await Promise.all(promises);
11949
11978
  await this._writer.close();
11950
11979
  release();
@@ -11968,7 +11997,7 @@ ${cue.notes ?? ""}`;
11968
11997
  return this._finalizePromise = (async () => {
11969
11998
  this.state = "finalizing";
11970
11999
  const release = await this._mutex.acquire();
11971
- const promises = this._tracks.map((x) => x.source._flushOrWaitForClose());
12000
+ const promises = this._tracks.map((x) => x.source._flushOrWaitForOngoingClose(false));
11972
12001
  await Promise.all(promises);
11973
12002
  await this._muxer.finalize();
11974
12003
  await this._writer.flush();
@@ -17031,7 +17060,7 @@ ${cue.notes ?? ""}`;
17031
17060
  await Promise.all(this._trackPromises);
17032
17061
  } catch (error) {
17033
17062
  if (!this._canceled) {
17034
- await this.cancel();
17063
+ void this.cancel();
17035
17064
  }
17036
17065
  throw error;
17037
17066
  }