playsvideo 0.0.8 → 0.0.10

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/README.md CHANGED
@@ -31,13 +31,13 @@ Video file (MKV, MP4, AVI, …)
31
31
  → keyframe-aligned segment plan
32
32
  → per segment:
33
33
  video passed through or transcoded if needed
34
- audio transcoded only if needed (AC-3/DTS/FLAC → AAC)
34
+ audio transcoded only if needed (AC-3/DTS/MP3/FLAC/Opus → AAC)
35
35
  muxed to fMP4
36
36
  → hls.js plays segments on demand
37
37
  → subtitles extracted to WebVTT
38
38
  ```
39
39
 
40
- Video transcode is almost never needed — browsers natively decode the vast majority of video codecs. When audio transcode is needed, a lightweight 1.5 MB ffmpeg.wasm build is lazy-loaded entirely in-browser. No SharedArrayBuffer required — works on any host without special CORS headers.
40
+ Video transcode is almost never needed — browsers natively decode the vast majority of video codecs. When audio transcode is needed, a lightweight 1.8 MB ffmpeg.wasm build is lazy-loaded entirely in-browser. No SharedArrayBuffer required — works on any host without special CORS headers.
41
41
 
42
42
  ### Under the hood
43
43
 
@@ -74,20 +74,23 @@ See [engine API docs](docs/engine-api.md) for events, properties, and full usage
74
74
 
75
75
  ### Roadmap
76
76
 
77
- - **WebCodecs** — replace ffmpeg.wasm audio transcode with `AudioDecoder`/`AudioEncoder` (smaller bundle, lower latency)
78
- - **Video transcode** — hardware-accelerated decode via `VideoDecoder` for edge-case codecs
77
+ See [docs/roadmap.md](docs/roadmap.md) for the full list. Highlights:
78
+
79
+ - **User-imported subtitles** — load external `.srt`/`.vtt` files alongside the video
80
+ - **WebCodecs** — replace ffmpeg.wasm with hardware-accelerated `AudioDecoder`/`AudioEncoder` and `VideoDecoder`/`VideoEncoder`
79
81
 
80
82
  <details>
81
83
  <summary><strong>Development</strong></summary>
82
84
 
83
85
  ```bash
84
- npm run setup # install deps + download ffmpeg-core.wasm
85
- npm run dev # vite dev server
86
- npm run typecheck # tsc --noEmit
87
- npm run test:unit # fast unit tests
88
- npm run lint # biome lint
89
- npm run format # biome format
90
- npm run test:integration # requires test fixtures in tests/fixtures/
86
+ pnpm run setup # install deps + download ffmpeg-core.wasm
87
+ pnpm run dev # vite dev server (simple player)
88
+ pnpm run typecheck # tsc --noEmit
89
+ pnpm run test:unit # fast unit tests
90
+ pnpm run lint # biome lint
91
+ pnpm run format # biome format
92
+ pnpm run test:integration # requires test fixtures in tests/fixtures/
93
+ pnpm --filter app dev # media player dev server (React app)
91
94
  ```
92
95
 
93
96
  ```
@@ -97,6 +100,7 @@ src/adapters/ Platform adapters (ffmpeg.wasm for browser, node-ffmpeg for
97
100
  src/worker.ts Web worker — demux + on-demand segment processing
98
101
  src/engine.ts PlaysVideoEngine class (worker, hls.js, subtitles)
99
102
  src/pwa-player.ts Browser entry — file picker, drag-and-drop
103
+ app/ React media player — library management, folder picker, playlists
100
104
  tests/ Unit, integration, and e2e (Playwright) tests
101
105
  ```
102
106
 
package/dist/engine.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- import type { SubtitleTrackInfo } from './pipeline/types.js';
1
+ import type { Source } from 'mediabunny';
2
+ import type { FfmpegRunner, KeyframeIndex, SubtitleTrackInfo } from './pipeline/types.js';
2
3
  export type EnginePhase = 'idle' | 'demuxing' | 'ready' | 'error';
3
4
  export interface ReadyDetail {
4
5
  totalSegments: number;
5
6
  durationSec: number;
6
7
  subtitleTracks: SubtitleTrackInfo[];
8
+ passthrough?: boolean;
7
9
  }
8
10
  export interface ErrorDetail {
9
11
  message: string;
@@ -32,20 +34,60 @@ export declare class PlaysVideoEngine extends EventTarget {
32
34
  private _phase;
33
35
  private _totalSegments;
34
36
  private _durationSec;
37
+ private _passthrough;
38
+ private _blobUrl;
39
+ private _pendingFileType;
40
+ private _keyframeIndex;
41
+ private _source;
42
+ private _sourceDemux;
43
+ private _sourcePlan;
44
+ private _sourceDoTranscode;
45
+ private _sourceAudioDecoderConfig;
46
+ private _sourceInitSegment;
47
+ private _sourceFfmpeg;
48
+ private _sourceTargetSegDuration;
49
+ private _sourceSegmentAbort;
35
50
  get phase(): EnginePhase;
36
51
  get loading(): boolean;
37
52
  get totalSegments(): number;
38
53
  get durationSec(): number;
39
54
  get subtitleTracks(): SubtitleTrackInfo[];
55
+ get passthrough(): boolean;
40
56
  constructor(video: HTMLVideoElement);
41
- loadFile(file: File): void;
42
- loadUrl(url: string): void;
43
- private resetAndCreateWorker;
57
+ loadFile(file: File, opts?: {
58
+ keyframeIndex?: KeyframeIndex;
59
+ }): void;
60
+ loadUrl(url: string, opts?: {
61
+ keyframeIndex?: KeyframeIndex;
62
+ }): void;
63
+ /**
64
+ * Load from an external Source (e.g. TorrentSource).
65
+ *
66
+ * Runs the pipeline on the main thread (no worker) because external Sources
67
+ * typically need access to objects on the main thread.
68
+ *
69
+ * If the Source implements AbortableSource, the pipeline will call
70
+ * setCurrentSignal() before each segment so the Source can abort in-flight
71
+ * reads on seek.
72
+ */
73
+ loadSource(source: Source, opts?: {
74
+ keyframeIndex?: KeyframeIndex;
75
+ ffmpeg?: FfmpegRunner;
76
+ targetSegmentDuration?: number;
77
+ }): void;
78
+ private reset;
79
+ private createWorker;
44
80
  destroy(): void;
45
81
  addEventListener<K extends keyof EngineEventMap>(type: K, listener: (ev: EngineEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
46
82
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
83
+ private checkNativePlayback;
84
+ private startPassthrough;
47
85
  private handleWorkerMessage;
48
86
  private requestSegment;
87
+ private cancelSegment;
88
+ private startSourcePipeline;
89
+ private makeSourceProcessorConfig;
90
+ private requestSourceSegment;
49
91
  private startHls;
50
92
  private addSubtitleTrack;
51
93
  private removeSubtitleTracks;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAChC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CACrC;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,GAAG,CAAoB;IAG/B,OAAO,CAAC,eAAe,CAGnB;IAGJ,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAGH;IAChB,OAAO,CAAC,eAAe,CAGP;IAEhB,OAAO,CAAC,mBAAmB,CAA6B;IAGxD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAA2B;IAGlD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAK;IAEzB,IAAI,KAAK,IAAI,WAAW,CAEvB;IACD,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,aAAa,IAAI,MAAM,CAE1B;IACD,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAExC;gBAEW,KAAK,EAAE,gBAAgB;IAKnC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAM1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM1B,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,IAAI,IAAI;IAkBf,gBAAgB,CAAC,CAAC,SAAS,MAAM,cAAc,EAC7C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI;IACP,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI;IASP,OAAO,CAAC,mBAAmB;IAiF3B,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,QAAQ;IAkKhB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,oBAAoB;CAK7B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/engine.js CHANGED
@@ -1,4 +1,10 @@
1
1
  import Hls from 'hls.js';
2
+ import { audioNeedsTranscode, createBrowserProber } from './pipeline/codec-probe.js';
3
+ import { demuxSource, getKeyframeIndex } from './pipeline/demux.js';
4
+ import { generateVodPlaylist } from './pipeline/playlist.js';
5
+ import { buildSegmentPlan } from './pipeline/segment-plan.js';
6
+ import { processSegmentWithAbort } from './pipeline/segment-processor.js';
7
+ import { isAbortableSource } from './pipeline/source-signal.js';
2
8
  export class PlaysVideoEngine extends EventTarget {
3
9
  video;
4
10
  worker = null;
@@ -18,6 +24,22 @@ export class PlaysVideoEngine extends EventTarget {
18
24
  _phase = 'idle';
19
25
  _totalSegments = 0;
20
26
  _durationSec = 0;
27
+ // Passthrough state
28
+ _passthrough = false;
29
+ _blobUrl = null;
30
+ _pendingFileType = null;
31
+ // Pre-built keyframe index (e.g. from MKV cues) to skip mediabunny scan
32
+ _keyframeIndex = null;
33
+ // Main-thread pipeline state (used by loadSource)
34
+ _source = null;
35
+ _sourceDemux = null;
36
+ _sourcePlan = [];
37
+ _sourceDoTranscode = false;
38
+ _sourceAudioDecoderConfig = null;
39
+ _sourceInitSegment = null;
40
+ _sourceFfmpeg = null;
41
+ _sourceTargetSegDuration = 4;
42
+ _sourceSegmentAbort = null;
21
43
  get phase() {
22
44
  return this._phase;
23
45
  }
@@ -33,27 +55,67 @@ export class PlaysVideoEngine extends EventTarget {
33
55
  get subtitleTracks() {
34
56
  return this._subtitleTracks;
35
57
  }
58
+ get passthrough() {
59
+ return this._passthrough;
60
+ }
36
61
  constructor(video) {
37
62
  super();
38
63
  this.video = video;
39
64
  }
40
- loadFile(file) {
41
- this.resetAndCreateWorker({ file });
65
+ loadFile(file, opts) {
66
+ this.reset({ file });
67
+ this._pendingFileType = file.type || null;
68
+ this._blobUrl = URL.createObjectURL(file);
69
+ this._keyframeIndex = opts?.keyframeIndex ?? null;
70
+ this.createWorker();
42
71
  this.worker.postMessage({ type: 'open', file });
43
- mlog(`open file=${file.name} size=${(file.size / 1024 / 1024).toFixed(1)}MB`);
72
+ mlog(`open file=${file.name} size=${(file.size / 1024 / 1024).toFixed(1)}MB type=${file.type}`);
44
73
  }
45
- loadUrl(url) {
46
- this.resetAndCreateWorker({ url });
74
+ loadUrl(url, opts) {
75
+ this.reset({ url });
76
+ this._keyframeIndex = opts?.keyframeIndex ?? null;
77
+ this.createWorker();
47
78
  this.worker.postMessage({ type: 'open-url', url });
48
79
  mlog(`open url=${url}`);
49
80
  }
50
- resetAndCreateWorker(detail) {
81
+ /**
82
+ * Load from an external Source (e.g. TorrentSource).
83
+ *
84
+ * Runs the pipeline on the main thread (no worker) because external Sources
85
+ * typically need access to objects on the main thread.
86
+ *
87
+ * If the Source implements AbortableSource, the pipeline will call
88
+ * setCurrentSignal() before each segment so the Source can abort in-flight
89
+ * reads on seek.
90
+ */
91
+ loadSource(source, opts) {
92
+ this.reset({});
93
+ this._keyframeIndex = opts?.keyframeIndex ?? null;
94
+ this._source = source;
95
+ this._sourcePlan = [];
96
+ this._sourceDoTranscode = false;
97
+ this._sourceAudioDecoderConfig = null;
98
+ this._sourceInitSegment = null;
99
+ this._sourceFfmpeg = opts?.ffmpeg ?? null;
100
+ this._sourceTargetSegDuration = opts?.targetSegmentDuration ?? 4;
101
+ this.startSourcePipeline(source);
102
+ }
103
+ reset(detail) {
51
104
  if (this.hls) {
52
105
  this.hls.destroy();
53
106
  this.hls = null;
54
107
  }
55
108
  if (this.worker) {
56
109
  this.worker.terminate();
110
+ this.worker = null;
111
+ }
112
+ if (this._blobUrl) {
113
+ URL.revokeObjectURL(this._blobUrl);
114
+ this._blobUrl = null;
115
+ }
116
+ if (this._passthrough) {
117
+ this.video.removeAttribute('src');
118
+ this.video.load();
57
119
  }
58
120
  this.playlist = null;
59
121
  this.initData = null;
@@ -67,8 +129,33 @@ export class PlaysVideoEngine extends EventTarget {
67
129
  this._totalSegments = 0;
68
130
  this._durationSec = 0;
69
131
  this._subtitleTracks = [];
132
+ this._passthrough = false;
133
+ this._pendingFileType = null;
134
+ this._keyframeIndex = null;
135
+ // Source pipeline cleanup
136
+ if (this._sourceSegmentAbort) {
137
+ this._sourceSegmentAbort.abort();
138
+ this._sourceSegmentAbort = null;
139
+ }
140
+ if (this._source && isAbortableSource(this._source)) {
141
+ this._source.setCurrentSignal(null);
142
+ }
143
+ this._source = null;
144
+ this._sourceDemux?.dispose();
145
+ this._sourceDemux = null;
146
+ this._sourcePlan = [];
147
+ this._sourceDoTranscode = false;
148
+ this._sourceAudioDecoderConfig = null;
149
+ this._sourceInitSegment = null;
150
+ this._sourceFfmpeg = null;
70
151
  this.dispatchEvent(new CustomEvent('loading', { detail }));
71
- this.worker = new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' });
152
+ }
153
+ createWorker() {
154
+ // Variable indirection prevents Vite/Rollup from statically detecting this as a
155
+ // worker entry point. Consumers that only use loadSource() don't need the worker,
156
+ // but without this, bundlers try to resolve & bundle worker.js (which isn't in dist).
157
+ const workerPath = './worker.js';
158
+ this.worker = new Worker(new URL(workerPath, import.meta.url), { type: 'module' });
72
159
  this.worker.onmessage = (e) => this.handleWorkerMessage(e);
73
160
  this.worker.onerror = (e) => {
74
161
  this._phase = 'error';
@@ -84,6 +171,14 @@ export class PlaysVideoEngine extends EventTarget {
84
171
  this.worker.terminate();
85
172
  this.worker = null;
86
173
  }
174
+ if (this._blobUrl) {
175
+ URL.revokeObjectURL(this._blobUrl);
176
+ this._blobUrl = null;
177
+ }
178
+ if (this._passthrough) {
179
+ this.video.removeAttribute('src');
180
+ this.video.load();
181
+ }
87
182
  for (const url of this.subtitleBlobUrls)
88
183
  URL.revokeObjectURL(url);
89
184
  this.subtitleBlobUrls = [];
@@ -91,13 +186,76 @@ export class PlaysVideoEngine extends EventTarget {
91
186
  this.pendingSegments.clear();
92
187
  this.segmentRequestTimes.clear();
93
188
  this._phase = 'idle';
189
+ this._passthrough = false;
94
190
  }
95
191
  addEventListener(type, listener, options) {
96
192
  super.addEventListener(type, listener, options);
97
193
  }
194
+ checkNativePlayback(videoCodec, audioCodec) {
195
+ const mime = this._pendingFileType;
196
+ if (!mime)
197
+ return false;
198
+ const codecs = audioCodec ? `${videoCodec}, ${audioCodec}` : videoCodec;
199
+ const fullMime = `${mime}; codecs="${codecs}"`;
200
+ const result = this.video.canPlayType(fullMime);
201
+ mlog(`canPlayType("${fullMime}") = "${result}"`);
202
+ return result === 'probably' || result === 'maybe';
203
+ }
204
+ startPassthrough(src) {
205
+ this._passthrough = true;
206
+ this._totalSegments = 0;
207
+ if (src.startsWith('blob:')) {
208
+ this._blobUrl = src;
209
+ }
210
+ this.video.src = src;
211
+ const fireReady = () => {
212
+ this._durationSec = this.video.duration;
213
+ this._phase = 'ready';
214
+ mlog(`passthrough ready dur=${this._durationSec.toFixed(1)}s`);
215
+ this.dispatchEvent(new CustomEvent('ready', {
216
+ detail: {
217
+ totalSegments: 0,
218
+ durationSec: this._durationSec,
219
+ subtitleTracks: [],
220
+ passthrough: true,
221
+ },
222
+ }));
223
+ };
224
+ if (this.video.readyState >= 1) {
225
+ fireReady();
226
+ }
227
+ else {
228
+ this.video.addEventListener('loadedmetadata', fireReady, { once: true });
229
+ }
230
+ }
98
231
  handleWorkerMessage(event) {
99
232
  const msg = event.data;
100
- if (msg.type === 'ready') {
233
+ if (msg.type === 'probed') {
234
+ // Worker finished demux — decide passthrough vs pipeline
235
+ const canPlay = this.checkNativePlayback(msg.videoCodec, msg.audioCodec);
236
+ this._subtitleTracks = msg.subtitleTracks ?? [];
237
+ if (canPlay && this._blobUrl) {
238
+ mlog(`passthrough: canPlayType accepted codecs=${msg.videoCodec}/${msg.audioCodec}`);
239
+ this.startPassthrough(this._blobUrl);
240
+ this.worker.postMessage({ type: 'passthrough-pipeline' });
241
+ for (const track of this._subtitleTracks) {
242
+ mlog(`requesting subtitle track=${track.index} lang=${track.language} codec=${track.codec}`);
243
+ this.worker.postMessage({ type: 'subtitle', trackIndex: track.index });
244
+ }
245
+ }
246
+ else {
247
+ if (this._blobUrl) {
248
+ URL.revokeObjectURL(this._blobUrl);
249
+ this._blobUrl = null;
250
+ }
251
+ mlog(`pipeline: canPlayType rejected, proceeding with remux pipeline`);
252
+ const remuxMsg = { type: 'remux-pipeline' };
253
+ if (this._keyframeIndex)
254
+ remuxMsg.keyframeIndex = this._keyframeIndex;
255
+ this.worker.postMessage(remuxMsg);
256
+ }
257
+ }
258
+ else if (msg.type === 'ready') {
101
259
  this.playlist = msg.playlist;
102
260
  this.initData = msg.initData;
103
261
  this._totalSegments = msg.totalSegments;
@@ -179,6 +337,125 @@ export class PlaysVideoEngine extends EventTarget {
179
337
  this.worker.postMessage({ type: 'segment', index });
180
338
  });
181
339
  }
340
+ cancelSegment(index) {
341
+ const pending = this.pendingSegments.get(index);
342
+ if (pending) {
343
+ mlog(`cancel seg ${index}`);
344
+ pending.reject(new DOMException('Segment aborted', 'AbortError'));
345
+ this.pendingSegments.delete(index);
346
+ this.segmentRequestTimes.delete(index);
347
+ this.worker?.postMessage({ type: 'cancel', index });
348
+ }
349
+ }
350
+ async startSourcePipeline(source) {
351
+ try {
352
+ mlog('source pipeline: demuxing');
353
+ this._sourceDemux = await demuxSource(source);
354
+ const demux = this._sourceDemux;
355
+ // Build keyframe index
356
+ let index;
357
+ if (this._keyframeIndex) {
358
+ index = this._keyframeIndex;
359
+ mlog(`source pipeline: pre-built keyframes=${index.keyframes.length}`);
360
+ }
361
+ else {
362
+ index = await getKeyframeIndex(demux.videoSink, demux.duration);
363
+ mlog(`source pipeline: keyframe-index keyframes=${index.keyframes.length}`);
364
+ }
365
+ // Build segment plan
366
+ this._sourcePlan = buildSegmentPlan({
367
+ keyframeTimestampsSec: index.keyframes.map((k) => k.timestamp),
368
+ durationSec: index.duration,
369
+ targetSegmentDurationSec: this._sourceTargetSegDuration,
370
+ });
371
+ // Check transcode
372
+ const codecProber = createBrowserProber();
373
+ this._sourceDoTranscode =
374
+ demux.audioCodec !== null &&
375
+ audioNeedsTranscode(codecProber, demux.audioCodec, demux.audioDecoderConfig?.codec);
376
+ this._sourceAudioDecoderConfig = demux.audioDecoderConfig;
377
+ // Pre-process segment 0
378
+ const seg0Result = await processSegmentWithAbort(this.makeSourceProcessorConfig(), 0);
379
+ if (seg0Result.initSegment) {
380
+ this._sourceInitSegment = seg0Result.initSegment;
381
+ }
382
+ if (seg0Result.audioDecoderConfig) {
383
+ this._sourceAudioDecoderConfig = seg0Result.audioDecoderConfig;
384
+ }
385
+ // Build playlist
386
+ const playlist = generateVodPlaylist({
387
+ targetDuration: Math.ceil(Math.max(...this._sourcePlan.map((s) => s.durationSec))),
388
+ mediaSequence: 0,
389
+ mapUri: 'init.mp4',
390
+ entries: this._sourcePlan.map((s) => ({
391
+ uri: `seg-${s.sequence}.m4s`,
392
+ durationSec: s.durationSec,
393
+ })),
394
+ endList: true,
395
+ });
396
+ this.playlist = playlist;
397
+ this.initData = this._sourceInitSegment.buffer.slice(this._sourceInitSegment.byteOffset, this._sourceInitSegment.byteOffset + this._sourceInitSegment.byteLength);
398
+ this._totalSegments = this._sourcePlan.length;
399
+ this._durationSec = demux.duration;
400
+ this._subtitleTracks = demux.subtitleTracks;
401
+ this._phase = 'ready';
402
+ mlog(`source pipeline: ready segments=${this._totalSegments} dur=${this._durationSec.toFixed(1)}s`);
403
+ this.dispatchEvent(new CustomEvent('ready', {
404
+ detail: {
405
+ totalSegments: this._totalSegments,
406
+ durationSec: this._durationSec,
407
+ subtitleTracks: this._subtitleTracks,
408
+ },
409
+ }));
410
+ this.startHls();
411
+ }
412
+ catch (err) {
413
+ this._phase = 'error';
414
+ this.dispatchEvent(new CustomEvent('error', { detail: { message: String(err) } }));
415
+ }
416
+ }
417
+ makeSourceProcessorConfig() {
418
+ const demux = this._sourceDemux;
419
+ return {
420
+ videoSink: demux.videoSink,
421
+ audioSink: demux.audioSink,
422
+ videoCodec: demux.videoCodec,
423
+ audioCodec: demux.audioCodec,
424
+ videoDecoderConfig: demux.videoDecoderConfig,
425
+ audioDecoderConfig: this._sourceAudioDecoderConfig,
426
+ plan: this._sourcePlan,
427
+ doTranscode: this._sourceDoTranscode,
428
+ ffmpeg: this._sourceFfmpeg ?? {
429
+ run: async () => ({ exitCode: 1, stderr: 'no ffmpeg' }),
430
+ writeInput: async () => { },
431
+ readOutput: async () => new Uint8Array(),
432
+ },
433
+ sourceCodec: demux.audioCodec ?? undefined,
434
+ log: mlog,
435
+ };
436
+ }
437
+ async requestSourceSegment(index) {
438
+ // Cancel previous in-flight segment if any
439
+ if (this._sourceSegmentAbort) {
440
+ this._sourceSegmentAbort.abort();
441
+ }
442
+ const controller = new AbortController();
443
+ this._sourceSegmentAbort = controller;
444
+ // Set signal on source for abort-aware Sources (e.g. TorrentSource)
445
+ if (this._source && isAbortableSource(this._source)) {
446
+ this._source.setCurrentSignal(controller.signal);
447
+ }
448
+ const result = await processSegmentWithAbort(this.makeSourceProcessorConfig(), index, controller.signal);
449
+ this._sourceSegmentAbort = null;
450
+ // Update mutable state
451
+ if (!this._sourceInitSegment && result.initSegment) {
452
+ this._sourceInitSegment = result.initSegment;
453
+ }
454
+ if (result.audioDecoderConfig) {
455
+ this._sourceAudioDecoderConfig = result.audioDecoderConfig;
456
+ }
457
+ return result.mediaData.buffer.slice(result.mediaData.byteOffset, result.mediaData.byteOffset + result.mediaData.byteLength);
458
+ }
182
459
  startHls() {
183
460
  if (!Hls.isSupported()) {
184
461
  this._phase = 'error';
@@ -219,6 +496,7 @@ export class PlaysVideoEngine extends EventTarget {
219
496
  class PipelineFragmentLoader {
220
497
  context = null;
221
498
  stats = makeStats();
499
+ currentSegmentIndex = null;
222
500
  load(context, _config, callbacks) {
223
501
  this.context = context;
224
502
  const url = context.url;
@@ -258,19 +536,42 @@ export class PlaysVideoEngine extends EventTarget {
258
536
  }
259
537
  }
260
538
  loadSegment(index, context, callbacks) {
261
- engine
262
- .requestSegment(index)
539
+ this.currentSegmentIndex = index;
540
+ const segmentPromise = engine._source
541
+ ? engine.requestSourceSegment(index)
542
+ : engine.requestSegment(index);
543
+ segmentPromise
263
544
  .then((data) => {
545
+ this.currentSegmentIndex = null;
264
546
  this.stats.loaded = data.byteLength;
265
547
  this.stats.loading.end = performance.now();
266
548
  callbacks.onSuccess({ url: context.url, data }, this.stats, context, null);
267
549
  })
268
550
  .catch((err) => {
551
+ this.currentSegmentIndex = null;
552
+ if (err instanceof DOMException && err.name === 'AbortError') {
553
+ this.stats.aborted = true;
554
+ return;
555
+ }
269
556
  callbacks.onError({ code: 0, text: err.message }, context, null, this.stats);
270
557
  });
271
558
  }
272
- abort() { }
273
- destroy() { }
559
+ abort() {
560
+ if (this.currentSegmentIndex !== null) {
561
+ if (engine._source) {
562
+ // Source mode: abort the in-flight main-thread processing
563
+ engine._sourceSegmentAbort?.abort();
564
+ }
565
+ else {
566
+ // Worker mode: cancel via worker message
567
+ engine.cancelSegment(this.currentSegmentIndex);
568
+ }
569
+ this.currentSegmentIndex = null;
570
+ }
571
+ }
572
+ destroy() {
573
+ this.abort();
574
+ }
274
575
  }
275
576
  this.hls = new Hls({
276
577
  pLoader: PipelinePlaylistLoader,
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export { PlaysVideoEngine } from './engine.js';
2
2
  export type { EnginePhase, ReadyDetail, ErrorDetail, LoadingDetail } from './engine.js';
3
- export type { SubtitleTrackInfo } from './pipeline/types.js';
3
+ export type { KeyframeEntry, KeyframeIndex, SubtitleTrackInfo } from './pipeline/types.js';
4
+ export type { AbortableSource } from './pipeline/source-signal.js';
5
+ export { isAbortableSource, checkAbort } from './pipeline/source-signal.js';
6
+ export { demuxSource } from './pipeline/demux.js';
7
+ export { Source } from 'mediabunny';
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxF,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3F,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,5 @@
1
1
  export { PlaysVideoEngine } from './engine.js';
2
+ export { isAbortableSource, checkAbort } from './pipeline/source-signal.js';
3
+ export { demuxSource } from './pipeline/demux.js';
4
+ export { Source } from 'mediabunny';
2
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
@@ -50,8 +50,8 @@ export function createBrowserProber() {
50
50
  },
51
51
  };
52
52
  }
53
- /** Conservative static whitelist for Node.js / tests. Matches prior behavior. */
54
- const NODE_SAFE_AUDIO = new Set(['aac', 'mp3']);
53
+ /** Conservative static whitelist for Node.js / tests. Only AAC is universally safe in fMP4. */
54
+ const NODE_SAFE_AUDIO = new Set(['aac']);
55
55
  const NODE_SAFE_VIDEO = new Set(['avc', 'hevc']);
56
56
  export function createNodeProber() {
57
57
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"codec-probe.js","sourceRoot":"","sources":["../../src/pipeline/codec-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oEAAoE;AACpE,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,aAAa;IAClB,IAAI,EAAE,iBAAiB;IACvB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,eAAe;CACrB,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEzC,SAAS,WAAW,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,YAAY,CAAC,UAAU,EAAE,eAAe;YACtC,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,WAAW,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,YAAY,CAAC,UAAU,EAAE,eAAe;YACtC,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,WAAW,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAChD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,CAAC,UAAU;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,YAAY,CAAC,UAAU;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CACjC,MAAmB,EACnB,UAAkB,EAClB,eAAwB;IAExB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"codec-probe.js","sourceRoot":"","sources":["../../src/pipeline/codec-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oEAAoE;AACpE,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,aAAa;IAClB,IAAI,EAAE,iBAAiB;IACvB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,eAAe;CACrB,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEzC,SAAS,WAAW,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,YAAY,CAAC,UAAU,EAAE,eAAe;YACtC,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,WAAW,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,YAAY,CAAC,UAAU,EAAE,eAAe;YACtC,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,WAAW,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,CAAC,UAAU;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,YAAY,CAAC,UAAU;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CACjC,MAAmB,EACnB,UAAkB,EAClB,eAAwB;IAExB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type EncodedPacket, EncodedPacketSink, Input, type InputAudioTrack, type InputVideoTrack } from 'mediabunny';
1
+ import { type EncodedPacket, EncodedPacketSink, Input, type InputAudioTrack, type InputVideoTrack, type Source } from 'mediabunny';
2
2
  import type { KeyframeIndex, SubtitleTrackInfo } from './types.js';
3
3
  export interface DemuxResult {
4
4
  input: Input;
@@ -17,6 +17,7 @@ export interface DemuxResult {
17
17
  export declare function demuxFile(filePath: string): Promise<DemuxResult>;
18
18
  export declare function demuxBlob(blob: Blob): Promise<DemuxResult>;
19
19
  export declare function demuxUrl(url: string): Promise<DemuxResult>;
20
+ export declare function demuxSource(source: Source): Promise<DemuxResult>;
20
21
  export declare function getKeyframeIndex(videoSink: EncodedPacketSink, duration: number): Promise<KeyframeIndex>;
21
22
  export declare function collectPacketsInRange(sink: EncodedPacketSink, startSec: number, endSec: number, opts?: {
22
23
  startFromKeyframe?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"demux.d.ts","sourceRoot":"","sources":["../../src/pipeline/demux.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,iBAAiB,EAEjB,KAAK,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAiB,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEtE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAEhE;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEhE;AAqDD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAiBxB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B"}
1
+ {"version":3,"file":"demux.d.ts","sourceRoot":"","sources":["../../src/pipeline/demux.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,iBAAiB,EAEjB,KAAK,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,MAAM,EAEZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAiB,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEtE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAEhE;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEhE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEtE;AAqDD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAuBxB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B"}
@@ -9,6 +9,9 @@ export async function demuxBlob(blob) {
9
9
  export async function demuxUrl(url) {
10
10
  return demuxInput(new Input({ formats: ALL_FORMATS, source: new UrlSource(url) }));
11
11
  }
12
+ export async function demuxSource(source) {
13
+ return demuxInput(new Input({ formats: ALL_FORMATS, source }));
14
+ }
12
15
  async function demuxInput(input) {
13
16
  const videoTrack = await input.getPrimaryVideoTrack();
14
17
  if (!videoTrack) {
@@ -54,7 +57,14 @@ async function demuxInput(input) {
54
57
  }
55
58
  export async function getKeyframeIndex(videoSink, duration) {
56
59
  const keyframes = [];
60
+ // getKeyPacket(0) returns null if the first keyframe has PTS > 0 (non-zero
61
+ // initial offset). Fall back to getFirstPacket() which always works.
57
62
  let packet = await videoSink.getKeyPacket(0, { metadataOnly: true });
63
+ if (!packet) {
64
+ const first = await videoSink.getFirstPacket();
65
+ if (first?.type === 'key')
66
+ packet = first;
67
+ }
58
68
  while (packet) {
59
69
  const ts = packet.timestamp;
60
70
  if (Number.isFinite(ts) && ts >= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"demux.js","sourceRoot":"","sources":["../../src/pipeline/demux.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,UAAU,EAEV,iBAAiB,EACjB,cAAc,EACd,KAAK,EAGL,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAkBtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU;IACxC,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAY;IACpC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,GAA2B,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAE5D,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAC/D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,kBAAkB,GAA8B,IAAI,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,kBAAkB,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO;QACL,KAAK;QACL,QAAQ;QACR,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU,EAAE,UAAU,EAAE,KAAK,IAAI,IAAI;QACrC,kBAAkB;QAClB,kBAAkB;QAClB,SAAS;QACT,SAAS;QACT,cAAc;QACd,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA4B,EAC5B,QAAgB;IAEhB,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,OAAO,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACpD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,MAAM;QAClE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAuB,EACvB,QAAgB,EAChB,MAAc,EACd,IAAsC;IAEtC,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAE5B,wCAAwC;IACxC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM;YAAE,MAAM;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,MAAM;QAClE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"demux.js","sourceRoot":"","sources":["../../src/pipeline/demux.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,UAAU,EAEV,iBAAiB,EACjB,cAAc,EACd,KAAK,EAIL,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAkBtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU;IACxC,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAY;IACpC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,GAA2B,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAE5D,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAC/D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,kBAAkB,GAA8B,IAAI,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,kBAAkB,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO;QACL,KAAK;QACL,QAAQ;QACR,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU,EAAE,UAAU,EAAE,KAAK,IAAI,IAAI;QACrC,kBAAkB;QAClB,kBAAkB;QAClB,SAAS;QACT,SAAS;QACT,cAAc;QACd,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA4B,EAC5B,QAAgB;IAEhB,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,KAAK,EAAE,IAAI,KAAK,KAAK;YAAE,MAAM,GAAG,KAAK,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACpD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,MAAM;QAClE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAuB,EACvB,QAAgB,EAChB,MAAc,EACd,IAAsC;IAEtC,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAE5B,wCAAwC;IACxC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM;YAAE,MAAM;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,MAAM;QAClE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mux.d.ts","sourceRoot":"","sources":["../../src/pipeline/mux.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAaD,wBAAsB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAuDnE"}
1
+ {"version":3,"file":"mux.d.ts","sourceRoot":"","sources":["../../src/pipeline/mux.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAMnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAaD,wBAAsB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAuDnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"mux.js","sourceRoot":"","sources":["../../src/pipeline/mux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mux.js","sourceRoot":"","sources":["../../src/pipeline/mux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { EncodedPacketSink } from 'mediabunny';
2
+ import type { FfmpegRunner, PlannedSegment } from './types.js';
3
+ export interface SegmentProcessorConfig {
4
+ videoSink: EncodedPacketSink;
5
+ audioSink: EncodedPacketSink | null;
6
+ videoCodec: string;
7
+ audioCodec: string | null;
8
+ videoDecoderConfig: VideoDecoderConfig;
9
+ audioDecoderConfig: AudioDecoderConfig | null;
10
+ plan: PlannedSegment[];
11
+ doTranscode: boolean;
12
+ ffmpeg: FfmpegRunner;
13
+ sourceCodec?: string;
14
+ log?: (msg: string) => void;
15
+ }
16
+ export interface SegmentProcessorResult {
17
+ mediaData: Uint8Array;
18
+ initSegment: Uint8Array | null;
19
+ /** Updated audioDecoderConfig if transcode changed it */
20
+ audioDecoderConfig: AudioDecoderConfig | null;
21
+ }
22
+ /**
23
+ * Processes a single segment through the pipeline: collect packets → transcode → mux.
24
+ *
25
+ * Accepts an AbortSignal and checks it between stages. If aborted, throws AbortError.
26
+ * Does NOT modify any shared mutable state — returns all results.
27
+ */
28
+ export declare function processSegmentWithAbort(config: SegmentProcessorConfig, index: number, signal?: AbortSignal): Promise<SegmentProcessorResult>;
29
+ //# sourceMappingURL=segment-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment-processor.d.ts","sourceRoot":"","sources":["../../src/pipeline/segment-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC/C;AAMD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,CAAC,CA8EjC"}
@@ -0,0 +1,81 @@
1
+ import { transcodeAudioSegment } from './audio-transcode.js';
2
+ import { collectPacketsInRange } from './demux.js';
3
+ import { muxToFmp4 } from './mux.js';
4
+ import { checkAbort } from './source-signal.js';
5
+ function elapsed(start) {
6
+ return `${(performance.now() - start).toFixed(1)}ms`;
7
+ }
8
+ /**
9
+ * Processes a single segment through the pipeline: collect packets → transcode → mux.
10
+ *
11
+ * Accepts an AbortSignal and checks it between stages. If aborted, throws AbortError.
12
+ * Does NOT modify any shared mutable state — returns all results.
13
+ */
14
+ export async function processSegmentWithAbort(config, index, signal) {
15
+ const log = config.log ?? (() => { });
16
+ const seg = config.plan[index];
17
+ if (!seg)
18
+ throw new Error(`Invalid segment index: ${index}`);
19
+ const endSec = seg.startSec + seg.durationSec;
20
+ log(`seg ${index} start range=[${seg.startSec.toFixed(2)},${endSec.toFixed(2)})`);
21
+ checkAbort(signal);
22
+ // Stage 1: Collect video packets
23
+ const tVid = performance.now();
24
+ const videoPackets = await collectPacketsInRange(config.videoSink, seg.startSec, endSec, {
25
+ startFromKeyframe: true,
26
+ });
27
+ log(`seg ${index} video-collect ${elapsed(tVid)} pkts=${videoPackets.length}`);
28
+ checkAbort(signal);
29
+ // Stage 2: Collect audio packets
30
+ const tAud = performance.now();
31
+ let audioPackets = config.audioSink
32
+ ? await collectPacketsInRange(config.audioSink, seg.startSec, endSec)
33
+ : [];
34
+ log(`seg ${index} audio-collect ${elapsed(tAud)} pkts=${audioPackets.length}`);
35
+ checkAbort(signal);
36
+ // Stage 3: Transcode audio if needed (slow — ffmpeg.wasm)
37
+ let audioDecoderConfig = config.audioDecoderConfig;
38
+ if (config.doTranscode && audioPackets.length > 0) {
39
+ const sampleRate = config.audioDecoderConfig?.sampleRate ?? 48000;
40
+ const transcoded = await transcodeAudioSegment({
41
+ packets: audioPackets,
42
+ sampleRate,
43
+ audioStartSec: audioPackets[0].timestamp,
44
+ ffmpeg: config.ffmpeg,
45
+ sourceCodec: config.sourceCodec,
46
+ });
47
+ const m = transcoded.metrics;
48
+ const speed = m.ffmpegSpeed !== null ? ` speed=${m.ffmpegSpeed}x` : '';
49
+ log(`seg ${index} transcode ${m.totalMs.toFixed(1)}ms audio=${m.audioDurationSec.toFixed(2)}s ratio=${m.realtimeRatio.toFixed(4)}x ffmpeg=${m.ffmpegMs.toFixed(1)}ms${speed}`);
50
+ audioPackets = transcoded.packets;
51
+ if (!audioDecoderConfig || audioDecoderConfig.codec !== 'mp4a.40.2') {
52
+ audioDecoderConfig = transcoded.decoderConfig;
53
+ }
54
+ }
55
+ checkAbort(signal);
56
+ // Stage 4: Mux to fMP4 (fast)
57
+ const tMux = performance.now();
58
+ const muxResult = await muxToFmp4({
59
+ videoPackets,
60
+ audioPackets,
61
+ videoCodec: config.videoCodec,
62
+ audioCodec: config.doTranscode ? 'aac' : (config.audioCodec ?? 'aac'),
63
+ videoDecoderConfig: config.videoDecoderConfig,
64
+ audioDecoderConfig,
65
+ });
66
+ log(`seg ${index} mux ${elapsed(tMux)}`);
67
+ // Concatenate media fragments
68
+ const totalLen = muxResult.media.reduce((s, c) => s + c.byteLength, 0);
69
+ const mediaData = new Uint8Array(totalLen);
70
+ let offset = 0;
71
+ for (const chunk of muxResult.media) {
72
+ mediaData.set(chunk, offset);
73
+ offset += chunk.byteLength;
74
+ }
75
+ return {
76
+ mediaData,
77
+ initSegment: muxResult.init,
78
+ audioDecoderConfig,
79
+ };
80
+ }
81
+ //# sourceMappingURL=segment-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment-processor.js","sourceRoot":"","sources":["../../src/pipeline/segment-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Interface for Sources that support per-segment abort signals.
3
+ *
4
+ * The pipeline sets a signal before each segment via setCurrentSignal().
5
+ * Sources that implement this can use it to cancel in-flight async reads
6
+ * (e.g., abort torrent piece downloads on seek).
7
+ *
8
+ * mediabunny's Source._read(start, end) doesn't pass AbortSignal,
9
+ * so this is the mechanism for threading abort to external Sources.
10
+ */
11
+ export interface AbortableSource {
12
+ setCurrentSignal(signal: AbortSignal | null): void;
13
+ }
14
+ export declare function isAbortableSource(source: unknown): source is AbortableSource;
15
+ /**
16
+ * Throws AbortError if the signal has been aborted.
17
+ * Call between pipeline stages to bail out early.
18
+ */
19
+ export declare function checkAbort(signal?: AbortSignal): void;
20
+ //# sourceMappingURL=source-signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-signal.d.ts","sourceRoot":"","sources":["../../src/pipeline/source-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;CACpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,eAAe,CAM5E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAIrD"}
@@ -0,0 +1,15 @@
1
+ export function isAbortableSource(source) {
2
+ return (source !== null &&
3
+ typeof source === 'object' &&
4
+ typeof source.setCurrentSignal === 'function');
5
+ }
6
+ /**
7
+ * Throws AbortError if the signal has been aborted.
8
+ * Call between pipeline stages to bail out early.
9
+ */
10
+ export function checkAbort(signal) {
11
+ if (signal?.aborted) {
12
+ throw new DOMException('Segment processing aborted', 'AbortError');
13
+ }
14
+ }
15
+ //# sourceMappingURL=source-signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-signal.js","sourceRoot":"","sources":["../../src/pipeline/source-signal.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,OAAO,CACL,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAQ,MAA0B,CAAC,gBAAgB,KAAK,UAAU,CACnE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playsvideo",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "Play any video file in the browser — client-side remuxing and audio transcode, no server required.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,11 +35,11 @@
35
35
  "lint": "biome lint .",
36
36
  "check": "biome check --write .",
37
37
  "download:ffmpeg-core": "node scripts/download-ffmpeg-core.mjs",
38
- "setup": "npm install && npm run download:ffmpeg-core",
38
+ "setup": "pnpm install && pnpm run download:ffmpeg-core",
39
39
  "deploy:worker": "cd worker && npx wrangler deploy",
40
- "deploy:site": "npm run build && bash scripts/deploy.sh",
41
- "deploy": "npm run deploy:site && npm run deploy:worker",
42
- "prepublishOnly": "npm run build:lib"
40
+ "deploy:site": "pnpm run build && pnpm --filter app build && bash scripts/deploy.sh",
41
+ "deploy": "pnpm run deploy:site && pnpm run deploy:worker",
42
+ "prepublishOnly": "pnpm run build:lib"
43
43
  },
44
44
  "dependencies": {
45
45
  "@ffmpeg/ffmpeg": "^0.12.15",