audio-snip 0.2.0 → 0.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/dist/cjs/core.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // ─── Types ───────────────────────────────────────────────────────────────────
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.audioSnip = exports.BasePlugin = void 0;
4
+ exports.audioSnip = exports.RemoteFile = exports.BasePlugin = void 0;
5
5
  exports.fetchRange = fetchRange;
6
6
  exports.fetchContentLength = fetchContentLength;
7
7
  exports.trimBySamples = trimBySamples;
@@ -16,32 +16,101 @@ async function fetchRange(url, start, end) {
16
16
  if (!resp.ok && resp.status !== 206) {
17
17
  throw new Error(`HTTP ${resp.status} fetching range ${start}-${end}`);
18
18
  }
19
- const full = new Uint8Array(await resp.arrayBuffer());
20
- // If server ignored Range header and returned full file (200 instead of 206),
21
- // slice to the requested range manually.
22
- if (resp.status === 200 && full.length > end - start + 1) {
23
- return full.slice(start, end + 1);
19
+ const data = new Uint8Array(await resp.arrayBuffer());
20
+ // If server ignored Range and returned full file, slice to requested range
21
+ if (resp.status === 200 && data.length > end - start + 1) {
22
+ return data.slice(start, end + 1);
24
23
  }
25
- return full;
24
+ return data;
26
25
  }
27
26
  async function fetchContentLength(url) {
28
- // Try HEAD first
29
27
  const headResp = await fetch(url, { method: 'HEAD' });
30
28
  const cl = headResp.headers.get('content-length');
31
29
  if (cl)
32
30
  return parseInt(cl, 10);
33
- // Fallback: GET with Range 0-0 and parse Content-Range
31
+ // Fallback: Range 0-0, parse Content-Range or Content-Length
34
32
  const rangeResp = await fetch(url, {
35
33
  headers: { Range: 'bytes=0-0' },
36
34
  });
37
35
  const cr = rangeResp.headers.get('content-range');
36
+ const cl2 = rangeResp.headers.get('content-length');
37
+ await rangeResp.arrayBuffer(); // consume body
38
38
  if (cr) {
39
39
  const match = cr.match(/\/(\d+)/);
40
40
  if (match)
41
41
  return parseInt(match[1], 10);
42
42
  }
43
+ if (cl2)
44
+ return parseInt(cl2, 10);
43
45
  return null;
44
46
  }
47
+ // ─── RemoteFile — per-operation file handle ──────────────────────────────────
48
+ /**
49
+ * Wraps a URL for efficient byte access. On the first getRange() call it probes
50
+ * whether the server supports HTTP Range requests. If the server returns 200
51
+ * (full file), the data is kept in memory and all subsequent getRange() calls
52
+ * are served locally — the file is never re-downloaded.
53
+ *
54
+ * Create one RemoteFile per decode() call, let it go when done.
55
+ */
56
+ class RemoteFile {
57
+ constructor(url) {
58
+ this.fullData = null;
59
+ this._size = null;
60
+ this._rangeSupported = null;
61
+ this.url = url;
62
+ }
63
+ get rangeSupported() {
64
+ return this._rangeSupported;
65
+ }
66
+ get size() {
67
+ return this._size;
68
+ }
69
+ /** Fetch content length via HEAD (does not download body). */
70
+ async fetchSize() {
71
+ if (this._size !== null)
72
+ return this._size;
73
+ if (this.fullData) {
74
+ this._size = this.fullData.length;
75
+ return this._size;
76
+ }
77
+ this._size = await fetchContentLength(this.url);
78
+ return this._size;
79
+ }
80
+ /** Read a byte range. Detects Range support on first call. */
81
+ async getRange(start, end) {
82
+ // Already have the whole file in memory — just slice
83
+ if (this.fullData) {
84
+ return this.fullData.slice(start, end + 1);
85
+ }
86
+ const resp = await fetch(this.url, {
87
+ headers: { Range: `bytes=${start}-${end}` },
88
+ });
89
+ if (!resp.ok && resp.status !== 206) {
90
+ throw new Error(`HTTP ${resp.status} fetching range ${start}-${end} from ${this.url}`);
91
+ }
92
+ const data = new Uint8Array(await resp.arrayBuffer());
93
+ if (resp.status === 206) {
94
+ this._rangeSupported = true;
95
+ // Pick up total size from Content-Range if we don't have it yet
96
+ if (this._size === null) {
97
+ const cr = resp.headers.get('content-range');
98
+ if (cr) {
99
+ const m = cr.match(/\/(\d+)/);
100
+ if (m)
101
+ this._size = parseInt(m[1], 10);
102
+ }
103
+ }
104
+ return data;
105
+ }
106
+ // Server returned 200 (full file) — keep it, never re-download
107
+ this._rangeSupported = false;
108
+ this.fullData = data;
109
+ this._size = data.length;
110
+ return data.slice(start, end + 1);
111
+ }
112
+ }
113
+ exports.RemoteFile = RemoteFile;
45
114
  function trimBySamples(ctx, buffer, startSample, endSample) {
46
115
  const start = Math.max(0, Math.round(startSample));
47
116
  const end = Math.min(buffer.length, Math.round(endSample));
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trimBySamples = exports.fetchContentLength = exports.fetchRange = exports.BasePlugin = exports.audioSnip = void 0;
3
+ exports.trimBySamples = exports.fetchContentLength = exports.fetchRange = exports.RemoteFile = exports.BasePlugin = exports.audioSnip = void 0;
4
4
  var core_js_1 = require("./core.js");
5
5
  Object.defineProperty(exports, "audioSnip", { enumerable: true, get: function () { return core_js_1.audioSnip; } });
6
6
  Object.defineProperty(exports, "BasePlugin", { enumerable: true, get: function () { return core_js_1.BasePlugin; } });
7
+ Object.defineProperty(exports, "RemoteFile", { enumerable: true, get: function () { return core_js_1.RemoteFile; } });
7
8
  Object.defineProperty(exports, "fetchRange", { enumerable: true, get: function () { return core_js_1.fetchRange; } });
8
9
  Object.defineProperty(exports, "fetchContentLength", { enumerable: true, get: function () { return core_js_1.fetchContentLength; } });
9
10
  Object.defineProperty(exports, "trimBySamples", { enumerable: true, get: function () { return core_js_1.trimBySamples; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAMmB;AALjB,oGAAA,SAAS,OAAA;AACT,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,6GAAA,kBAAkB,OAAA;AAClB,wGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAOmB;AANjB,oGAAA,SAAS,OAAA;AACT,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,6GAAA,kBAAkB,OAAA;AAClB,wGAAA,aAAa,OAAA"}
@@ -65,11 +65,7 @@ function parseFrameHeader(data, offset) {
65
65
  frameSize = Math.floor((12 * bitrate * 1000) / sampleRate + (padding ? 1 : 0)) * 4;
66
66
  }
67
67
  else {
68
- const slotSize = 1;
69
- const divisor = mpegVersion === 1 ? sampleRate : sampleRate * 2;
70
- frameSize = Math.floor((samplesPerFrame * bitrate * 1000) / (8 * divisor)) * 8 / 8 + (padding ? slotSize : 0);
71
- // Simplified: frameSize = floor(samplesPerFrame/8 * bitrate*1000 / sampleRate) + padding
72
- frameSize = Math.floor((samplesPerFrame * (bitrate * 1000) / 8) / sampleRate) + (padding ? slotSize : 0);
68
+ frameSize = Math.floor((samplesPerFrame * (bitrate * 1000) / 8) / sampleRate) + (padding ? 1 : 0);
73
69
  }
74
70
  // Side information size for Layer 3
75
71
  let sideInfoSize = 0;
@@ -104,7 +100,9 @@ function id3v2Size(data) {
104
100
  ((data[7] & 0x7F) << 14) |
105
101
  ((data[8] & 0x7F) << 7) |
106
102
  (data[9] & 0x7F);
107
- return size + 10; // 10-byte header not included in size field
103
+ const flags = data[5];
104
+ const hasFooter = (flags & 0x10) !== 0;
105
+ return size + 10 + (hasFooter ? 10 : 0); // 10-byte header + optional 10-byte footer
108
106
  }
109
107
  // ─── Find first frame sync after given offset ───────────────────────────────
110
108
  function findFrameSync(data, start) {
@@ -156,11 +154,10 @@ function parseXingVbri(data, frameOffset, header) {
156
154
  if (flags & 8) {
157
155
  pos += 4;
158
156
  }
159
- // LAME gapless info at xingOffset + 141 (relative to Xing tag start)
160
- // The LAME header starts 120 bytes after the Xing tag position
157
+ // LAME tag: encoder string at Xing+120, delay/padding at Xing+141
161
158
  let encoderDelay = 0;
162
159
  let encoderPadding = 0;
163
- const lameOffset = xingOffset + 120 + 21; // LAME encoder delays are at Xing+141
160
+ const lameOffset = xingOffset + 141;
164
161
  if (lameOffset + 3 <= data.length) {
165
162
  // Verify LAME tag exists (9 char encoder string at xingOffset+120)
166
163
  const lameTag = String.fromCharCode(data[xingOffset + 120], data[xingOffset + 121], data[xingOffset + 122], data[xingOffset + 123]);
@@ -224,17 +221,13 @@ class Mp3Plugin extends core_js_1.BasePlugin {
224
221
  this.paddingFrames = options.paddingFrames ?? 8;
225
222
  }
226
223
  canHandle(url) {
227
- try {
228
- const path = new URL(url, 'https://dummy').pathname.toLowerCase();
229
- return path.endsWith('.mp3');
230
- }
231
- catch {
232
- return url.toLowerCase().endsWith('.mp3');
233
- }
224
+ const path = url.split('?')[0].split('#')[0].toLowerCase();
225
+ return path.endsWith('.mp3');
234
226
  }
235
227
  async getInfo(url) {
236
- const { header, vbrInfo, fileSize, audioStart } = await this.fetchHeader(url);
237
- const duration = this.computeDuration(header, vbrInfo, fileSize, audioStart);
228
+ const file = new core_js_1.RemoteFile(url);
229
+ const { header, vbrInfo, fileSize, audioStart } = await this.fetchHeader(file);
230
+ const duration = this.computeDuration(header, vbrInfo, fileSize, audioStart, vbrInfo?.encoderDelay ?? 0, vbrInfo?.encoderPadding ?? 0);
238
231
  return {
239
232
  duration,
240
233
  sampleRate: header.sampleRate,
@@ -246,12 +239,13 @@ class Mp3Plugin extends core_js_1.BasePlugin {
246
239
  };
247
240
  }
248
241
  async decode(ctx, url, startTime, endTime) {
249
- const { header, vbrInfo, audioStart, fileSize } = await this.fetchHeader(url);
242
+ const file = new core_js_1.RemoteFile(url);
243
+ const { header, vbrInfo, audioStart, xingFrameStart, fileSize } = await this.fetchHeader(file);
250
244
  const sampleRate = header.sampleRate;
251
245
  const encoderDelay = vbrInfo?.encoderDelay ?? 0;
252
246
  const encoderPadding = vbrInfo?.encoderPadding ?? 0;
253
247
  const isVbr = vbrInfo?.isVbr ?? false;
254
- const duration = this.computeDuration(header, vbrInfo, fileSize, audioStart);
248
+ const duration = this.computeDuration(header, vbrInfo, fileSize, audioStart, encoderDelay, encoderPadding);
255
249
  // Compute byte range for the requested time segment
256
250
  let startByte;
257
251
  let endByte;
@@ -259,14 +253,11 @@ class Mp3Plugin extends core_js_1.BasePlugin {
259
253
  if (isVbr && vbrInfo?.toc && vbrInfo.totalBytes && duration) {
260
254
  const startFrac = Math.max(0, startTime / duration);
261
255
  const endFrac = Math.min(1, endTime / duration);
262
- startByte = audioStart + tocInterpolate(vbrInfo.toc, startFrac, vbrInfo.totalBytes);
263
- endByte = audioStart + tocInterpolate(vbrInfo.toc, endFrac, vbrInfo.totalBytes);
256
+ startByte = xingFrameStart + tocInterpolate(vbrInfo.toc, startFrac, vbrInfo.totalBytes);
257
+ endByte = xingFrameStart + tocInterpolate(vbrInfo.toc, endFrac, vbrInfo.totalBytes);
264
258
  }
265
259
  else {
266
- // CBR or VBR-without-TOC fallback: linear byte estimate
267
- if (isVbr && (!vbrInfo?.toc)) {
268
- console.warn('audio-snip: VBR file without TOC, using CBR byte estimate for Range request');
269
- }
260
+ // CBR or VBR-without-TOC: linear byte estimate
270
261
  const bytesPerSecond = (header.bitrate * 1000) / 8;
271
262
  startByte = audioStart + Math.floor(startTime * bytesPerSecond);
272
263
  endByte = audioStart + Math.ceil(endTime * bytesPerSecond);
@@ -277,7 +268,7 @@ class Mp3Plugin extends core_js_1.BasePlugin {
277
268
  // Add extra frames at end for safety
278
269
  const fetchEnd = Math.min((fileSize ?? endByte + paddingBytes * 2) - 1, endByte + paddingBytes * 2);
279
270
  // Fetch the segment
280
- const chunk = await (0, core_js_1.fetchRange)(url, fetchStart, fetchEnd);
271
+ const chunk = await file.getRange(fetchStart, fetchEnd);
281
272
  // Find first valid frame in fetched chunk
282
273
  const firstSync = findFrameSync(chunk, 0);
283
274
  if (firstSync === -1) {
@@ -317,22 +308,19 @@ class Mp3Plugin extends core_js_1.BasePlugin {
317
308
  return (0, core_js_1.trimBySamples)(ctx, decoded, startSample, endSample);
318
309
  }
319
310
  // ─── Internal helpers ────────────────────────────────────────────────────
320
- async fetchHeader(url) {
321
- const fileSize = await (0, core_js_1.fetchContentLength)(url);
322
- // First pass: fetch initial chunk
323
- let headData = await (0, core_js_1.fetchRange)(url, 0, HEAD_SIZE - 1);
324
- // Check for ID3v2 tag
311
+ async fetchHeader(file) {
312
+ const fileSize = await file.fetchSize();
313
+ let headData = await file.getRange(0, HEAD_SIZE - 1);
314
+ // Skip ID3v2 tag
325
315
  let audioStart = 0;
326
316
  const id3Size = id3v2Size(headData);
327
317
  if (id3Size > 0) {
328
318
  audioStart = id3Size;
329
- // If ID3 tag is larger than our initial fetch, re-fetch from after it
330
319
  if (id3Size >= HEAD_SIZE) {
331
- headData = await (0, core_js_1.fetchRange)(url, id3Size, id3Size + HEAD_SIZE - 1);
332
- audioStart = id3Size;
320
+ headData = await file.getRange(id3Size, id3Size + HEAD_SIZE - 1);
333
321
  }
334
322
  }
335
- // Find first frame sync
323
+ // Find first frame sync (search from 0 if we re-fetched past ID3, else from audioStart)
336
324
  const searchStart = id3Size >= HEAD_SIZE ? 0 : audioStart;
337
325
  const syncOffset = findFrameSync(headData, searchStart);
338
326
  if (syncOffset === -1) {
@@ -340,23 +328,22 @@ class Mp3Plugin extends core_js_1.BasePlugin {
340
328
  }
341
329
  const header = parseFrameHeader(headData, syncOffset);
342
330
  const absoluteFrameOffset = id3Size >= HEAD_SIZE ? id3Size + syncOffset : syncOffset;
343
- // Parse Xing/VBRI
344
331
  const vbrInfo = parseXingVbri(headData, syncOffset, header);
345
- // If there's a Xing/Info frame, the actual audio starts after it
346
- const firstFrameOffset = vbrInfo
332
+ // Audio starts after the Xing/Info frame (if present), or at the first frame
333
+ const audioDataStart = vbrInfo
347
334
  ? absoluteFrameOffset + header.frameSize
348
335
  : absoluteFrameOffset;
349
336
  return {
350
337
  header,
351
338
  vbrInfo,
352
- audioStart: firstFrameOffset,
353
- firstFrameOffset,
339
+ audioStart: audioDataStart,
340
+ xingFrameStart: absoluteFrameOffset,
354
341
  fileSize,
355
342
  };
356
343
  }
357
- computeDuration(header, vbrInfo, fileSize, audioStart) {
344
+ computeDuration(header, vbrInfo, fileSize, audioStart, encoderDelay = 0, encoderPadding = 0) {
358
345
  if (vbrInfo?.totalFrames) {
359
- const totalSamples = vbrInfo.totalFrames * header.samplesPerFrame;
346
+ const totalSamples = vbrInfo.totalFrames * header.samplesPerFrame - encoderDelay - encoderPadding;
360
347
  return totalSamples / header.sampleRate;
361
348
  }
362
349
  if (fileSize) {
@@ -1 +1 @@
1
- {"version":3,"file":"mp3.js","sourceRoot":"","sources":["../../../src/plugins/mp3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mp3.js","sourceRoot":"","sources":["../../../src/plugins/mp3.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Mp4Plugin = void 0;
7
7
  const core_js_1 = require("../core.js");
8
- // eslint-disable-next-line @typescript-eslint/no-require-imports
9
8
  const mp4box_1 = __importDefault(require("mp4box"));
10
- const MP4BoxLib = mp4box_1.default;
9
+ const MP4Box = mp4box_1.default;
10
+ const AAC_LC_PRIMING_SAMPLES = 2112;
11
+ const MOOV_TIMEOUT_MS = 30000;
12
+ const MOOV_INITIAL_BYTES = 2 * 1024 * 1024;
13
+ const RANGE_MERGE_GAP = 64 * 1024;
11
14
  // ─── ADTS header construction ────────────────────────────────────────────────
12
15
  function makeAdtsHeader(frameLength, audioObjectType, samplingFrequencyIndex, channelConfiguration) {
13
16
  const header = new Uint8Array(7);
@@ -45,21 +48,24 @@ function getSamplingFrequencyIndex(sampleRate) {
45
48
  // ─── Mp4Plugin ───────────────────────────────────────────────────────────────
46
49
  class Mp4Plugin extends core_js_1.BasePlugin {
47
50
  canHandle(url) {
48
- try {
49
- const path = new URL(url, 'https://dummy').pathname.toLowerCase();
50
- return (path.endsWith('.m4a') ||
51
- path.endsWith('.mp4') ||
52
- path.endsWith('.aac') ||
53
- path.endsWith('.m4b'));
54
- }
55
- catch {
56
- const lower = url.toLowerCase();
57
- return lower.endsWith('.m4a') || lower.endsWith('.mp4') || lower.endsWith('.aac') || lower.endsWith('.m4b');
58
- }
51
+ const path = url.split('?')[0].split('#')[0].toLowerCase();
52
+ return path.endsWith('.m4a') || path.endsWith('.mp4') || path.endsWith('.aac') || path.endsWith('.m4b');
59
53
  }
60
54
  async getInfo(url) {
61
- const { info, audioTrack } = await this.loadMoov(url);
55
+ const file = new core_js_1.RemoteFile(url);
56
+ const { info, audioTrack } = await this.loadMoovForDecode(file);
62
57
  const duration = info.duration / info.timescale;
58
+ // Parse encoder delay from edit list (elst atom)
59
+ let encoderDelay;
60
+ const edits = audioTrack.edits;
61
+ if (edits && edits.length > 0 && edits[0].media_time > 0) {
62
+ const mediaTime = edits[0].media_time;
63
+ encoderDelay = Math.round(mediaTime * audioTrack.audio.sample_rate / audioTrack.timescale);
64
+ }
65
+ else {
66
+ // Default priming for AAC-LC: 1024 * 2 + 64 = 2112
67
+ encoderDelay = AAC_LC_PRIMING_SAMPLES;
68
+ }
63
69
  return {
64
70
  duration,
65
71
  sampleRate: audioTrack.audio.sample_rate,
@@ -67,14 +73,25 @@ class Mp4Plugin extends core_js_1.BasePlugin {
67
73
  bitrate: audioTrack.bitrate,
68
74
  codec: audioTrack.codec,
69
75
  isVbr: true, // AAC is always VBR conceptually
70
- encoderDelay: 0,
76
+ encoderDelay,
71
77
  };
72
78
  }
73
79
  async decode(ctx, url, startTime, endTime) {
74
80
  // Step 1: Load moov atom only (a few MB) to get metadata + sample table
75
- const { audioTrack, mp4 } = await this.loadMoovForDecode(url);
81
+ const file = new core_js_1.RemoteFile(url);
82
+ const { audioTrack, mp4 } = await this.loadMoovForDecode(file);
76
83
  const sampleRate = audioTrack.audio.sample_rate;
77
84
  const timescale = audioTrack.timescale;
85
+ // Parse encoder delay from edit list
86
+ let encoderDelay;
87
+ const edits = audioTrack.edits;
88
+ if (edits && edits.length > 0 && edits[0].media_time > 0) {
89
+ const mediaTime = edits[0].media_time;
90
+ encoderDelay = Math.round(mediaTime * sampleRate / timescale);
91
+ }
92
+ else {
93
+ encoderDelay = AAC_LC_PRIMING_SAMPLES; // Default AAC-LC priming
94
+ }
78
95
  // Step 2: Use sample table to find which samples fall in [startTime, endTime]
79
96
  const allSamples = mp4.getTrackSamplesInfo(audioTrack.id);
80
97
  if (allSamples.length === 0) {
@@ -104,7 +121,7 @@ class Mp4Plugin extends core_js_1.BasePlugin {
104
121
  // We read sample data directly from the fetched bytes — no onSamples needed.
105
122
  const rangeData = new Map(); // range.start → data
106
123
  for (const range of ranges) {
107
- const data = await (0, core_js_1.fetchRange)(url, range.start, range.end);
124
+ const data = await file.getRange(range.start, range.end);
108
125
  rangeData.set(range.start, data);
109
126
  }
110
127
  // Step 5: Extract raw AAC frame data for each needed sample
@@ -118,8 +135,9 @@ class Mp4Plugin extends core_js_1.BasePlugin {
118
135
  for (const si of neededSamples) {
119
136
  // Find which fetched range contains this sample
120
137
  const rawData = this.readSampleFromRanges(si.offset, si.size, ranges, rangeData);
121
- if (!rawData)
122
- continue; // skip if data not available (shouldn't happen)
138
+ if (!rawData) {
139
+ throw new Error(`Failed to read sample at offset ${si.offset}, size ${si.size} — byte range not fetched`);
140
+ }
123
141
  const adtsHeader = makeAdtsHeader(rawData.length, audioObjectType, samplingFreqIndex, channelConfig);
124
142
  const frame = new Uint8Array(adtsHeader.length + rawData.length);
125
143
  frame.set(adtsHeader, 0);
@@ -141,7 +159,7 @@ class Mp4Plugin extends core_js_1.BasePlugin {
141
159
  const decodedRate = decoded.sampleRate;
142
160
  const rangeStartTime = neededSamples[0].cts / timescale;
143
161
  const trimStartSeconds = startTime - rangeStartTime;
144
- const trimStartSamples = Math.round(trimStartSeconds * decodedRate);
162
+ const trimStartSamples = Math.round(trimStartSeconds * decodedRate) + encoderDelay;
145
163
  const wantedSamples = Math.round((endTime - startTime) * decodedRate);
146
164
  const startSample = Math.max(0, trimStartSamples);
147
165
  const endSample = Math.min(decoded.length, startSample + wantedSamples);
@@ -176,7 +194,7 @@ class Mp4Plugin extends core_js_1.BasePlugin {
176
194
  const sampleStart = sorted[i].offset;
177
195
  const sampleEnd = sampleStart + sorted[i].size - 1;
178
196
  // Merge if gap is < 64KB (cheaper to over-fetch than make another request)
179
- if (sampleStart <= cur.end + 65536) {
197
+ if (sampleStart <= cur.end + RANGE_MERGE_GAP) {
180
198
  cur.end = Math.max(cur.end, sampleEnd);
181
199
  }
182
200
  else {
@@ -188,49 +206,68 @@ class Mp4Plugin extends core_js_1.BasePlugin {
188
206
  return ranges;
189
207
  }
190
208
  // ─── Internal helpers ────────────────────────────────────────────────────
191
- async loadMoov(url) {
192
- const { info, audioTrack } = await this.loadMoovForDecode(url);
193
- return { info, audioTrack };
194
- }
195
- async loadMoovForDecode(url) {
196
- const MP4Box = MP4BoxLib;
209
+ async loadMoovForDecode(file) {
197
210
  const mp4 = MP4Box.createFile();
198
- const fileSize = await (0, core_js_1.fetchContentLength)(url);
199
- const info = await new Promise((resolve, reject) => {
211
+ const fileSize = await file.fetchSize();
212
+ let timer;
213
+ const infoPromise = new Promise((resolve, reject) => {
200
214
  mp4.onReady = resolve;
201
215
  mp4.onError = reject;
202
- this.streamToMP4Box(mp4, url, fileSize).catch(reject);
216
+ this.streamToMP4Box(mp4, file, fileSize).catch(reject);
217
+ });
218
+ const timeout = new Promise((_, reject) => {
219
+ timer = setTimeout(() => reject(new Error('Timeout: could not parse MP4 metadata')), MOOV_TIMEOUT_MS);
203
220
  });
221
+ let info;
222
+ try {
223
+ info = await Promise.race([infoPromise, timeout]);
224
+ }
225
+ finally {
226
+ clearTimeout(timer);
227
+ }
204
228
  const audioTrack = info.tracks.find((t) => t.type === 'audio');
205
229
  if (!audioTrack)
206
230
  throw new Error('No audio track found in MP4');
207
231
  return { info, audioTrack, mp4 };
208
232
  }
209
- async streamToMP4Box(mp4, url, fileSize) {
233
+ async streamToMP4Box(mp4, file, fileSize) {
210
234
  const chunkSize = 256 * 1024;
211
- const totalSize = fileSize ?? 10 * 1024 * 1024; // fallback 10MB
235
+ if (!fileSize)
236
+ throw new Error('Cannot determine file size — needed for MP4 parsing');
237
+ // mp4box calls onReady when moov is parsed. We track that to stop early.
238
+ let moovFound = false;
239
+ const origOnReady = mp4.onReady;
240
+ mp4.onReady = (info) => {
241
+ moovFound = true;
242
+ origOnReady?.(info);
243
+ };
244
+ // Stream from start until moov is found or we hit MOOV_INITIAL_BYTES
212
245
  let offset = 0;
213
- while (offset < totalSize) {
214
- const end = Math.min(offset + chunkSize - 1, totalSize - 1);
215
- const data = await (0, core_js_1.fetchRange)(url, offset, end);
246
+ while (offset < fileSize && !moovFound) {
247
+ const end = Math.min(offset + chunkSize - 1, fileSize - 1);
248
+ const data = await file.getRange(offset, end);
216
249
  const ab = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
217
250
  ab.fileStart = offset;
218
251
  mp4.appendBuffer(ab);
219
252
  offset = end + 1;
220
- // Check if we have enough info - mp4box will call onReady
221
- // For large files, we may need to stop early once we have what we need
222
- if (offset > 2 * 1024 * 1024 && offset < totalSize - chunkSize) {
223
- // For the moov-at-end case, try the tail
253
+ // After reading MOOV_INITIAL_BYTES from start without finding moov,
254
+ // jump to the tail (moov-at-end layout)
255
+ if (!moovFound && offset >= MOOV_INITIAL_BYTES && offset < fileSize - chunkSize) {
224
256
  break;
225
257
  }
226
258
  }
227
- // If moov is at the end, fetch the tail
228
- if (fileSize && offset < fileSize) {
229
- const tailStart = Math.max(offset, fileSize - 2 * 1024 * 1024);
230
- const tailData = await (0, core_js_1.fetchRange)(url, tailStart, fileSize - 1);
231
- const ab = tailData.buffer.slice(tailData.byteOffset, tailData.byteOffset + tailData.byteLength);
232
- ab.fileStart = tailStart;
233
- mp4.appendBuffer(ab);
259
+ // If moov wasn't in the head, try the tail
260
+ if (!moovFound && offset < fileSize) {
261
+ const tailStart = Math.max(offset, fileSize - MOOV_INITIAL_BYTES);
262
+ let tailOffset = tailStart;
263
+ while (tailOffset < fileSize && !moovFound) {
264
+ const end = Math.min(tailOffset + chunkSize - 1, fileSize - 1);
265
+ const data = await file.getRange(tailOffset, end);
266
+ const ab = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
267
+ ab.fileStart = tailOffset;
268
+ mp4.appendBuffer(ab);
269
+ tailOffset = end + 1;
270
+ }
234
271
  }
235
272
  mp4.flush();
236
273
  }