mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-02 05:13:50 +02:00
fix: two long-running HLS transcode issues (#355)
* fix: release targets from Output._targets on finalize Long-running HLS transcodes leak memory. Every finalized BufferTarget stays in _targets until the outer Output closes, pinning its buffer. Writer.finalize() already does this cleanup for writer-based flows; extend it to buffer-finalize paths via the public 'finalized' event. * fix: ReadOrchestrator LRU eviction picks only drained workers assert(pendingSlices.length === 0) fires under heavy concurrent reads (e.g. multi-rendition HLS decode from BlobSource). LRU filter only checked !running; workers with queued slices could be evicted. Add pendingSlices.length === 0 to the filter. * fix: export AppendOnlyStreamTarget from index Missing from the re-export; public docs import it by name. * fix: join HLS init segment path with root + playlist path Init path went through _getTarget bare; segments got joined with rootPath + playlist.path. Playlist-relative URI then can't resolve when the playlist lives in a subdirectory. * Fix targets not being cleaned up, fix paused workers with remaining pending slices, modify doc block, fixed isRoot not being changed on proxied requests --------- Co-authored-by: Vanilagy <[email protected]>
This commit is contained in:
co-authored by
Vanilagy
parent
7acae8dda1
commit
b05cdbe7e0
+12
-3
@@ -7,7 +7,6 @@
|
||||
*/
|
||||
|
||||
import type { FileHandle } from 'node:fs/promises';
|
||||
import { Output } from './output';
|
||||
import * as nodeAlias from './node';
|
||||
import { assert, EventEmitter, FilePath, MaybePromise } from './misc';
|
||||
|
||||
@@ -39,7 +38,7 @@ export type TargetEvents = {
|
||||
*/
|
||||
export abstract class Target extends EventEmitter<TargetEvents> {
|
||||
/** @internal */
|
||||
_output: Output | null = null;
|
||||
_writerAcquired = false;
|
||||
|
||||
/** @internal */
|
||||
_monotonicity: boolean | null = null; // null = unknown
|
||||
@@ -582,6 +581,17 @@ export class StreamTarget extends Target {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This target writes to a `WritableStream<Uint8Array>`, meaning all writes are necessarily append-only and involve no
|
||||
* seeking. Great for streaming data to a source that can only accept sequential data, like an HTTP server processing
|
||||
* an incoming upload.
|
||||
*
|
||||
* Note that using this target *requires* that the underlying format write data sequentially. Not all formats do this,
|
||||
* and this target will throw for the formats that don't. Check the guide for more.
|
||||
*
|
||||
* @group Output targets
|
||||
* @public
|
||||
*/
|
||||
export class AppendOnlyStreamTarget extends Target {
|
||||
/** @internal */
|
||||
_writable: WritableStream<Uint8Array>;
|
||||
@@ -787,7 +797,6 @@ export class RangedTarget extends Target {
|
||||
|
||||
this._baseTarget = baseTarget;
|
||||
this._offset = offset;
|
||||
this._output = baseTarget._output;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
||||
Reference in New Issue
Block a user