@eleven-am/transcoder
Version:
High-performance HLS transcoding library with hardware acceleration, intelligent client management, and distributed processing support for Node.js
88 lines • 3.37 kB
TypeScript
import { RedisClientType } from 'redis';
import { SegmentClaim } from './interfaces';
/**
* Manages distributed segment claims using Redis
* Ensures only one worker processes each segment at a time
*/
export declare class RedisSegmentClaimManager {
private readonly redis;
private readonly workerId;
private readonly defaultTTL;
private readonly lockPrefix;
private readonly statusPrefix;
private readonly completedPrefix;
private readonly completedSegmentTTL;
constructor(redis: RedisClientType, workerId: string, defaultTTL?: number, // 60 seconds
completedSegmentTTL?: number);
/**
* Try to claim a segment for processing
*/
claimSegment(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number, outputPath?: string): Promise<SegmentClaim>;
/**
* Check if a segment is already completed
*/
isSegmentCompleted(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<boolean>;
/**
* Mark a segment as completed
*/
markSegmentCompleted(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<void>;
/**
* Get the status of a segment
*/
getSegmentStatus(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<string | null>;
/**
* Publish segment completion event
*/
publishSegmentComplete(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number): Promise<void>;
private createCompletionChannel;
private handleCompletionMessage;
private createUnsubscribeFunction;
private connectSubscriber;
private subscribeToChannel;
private disconnectSubscriber;
/**
* Subscribe to segment completion events
*/
subscribeToSegmentComplete(fileId: string, streamType: string, quality: string, streamIndex: number, segmentIndex: number, callback: () => void): Promise<() => Promise<void>>;
private getSegmentKey;
private createFailedClaim;
private createSuccessfulClaim;
private scanForLockKeys;
private scanForLockKeysTask;
private getLockValues;
private parseLockValue;
private processClaims;
/**
* Get all currently claimed segments with their metadata
* Used for work stealing detection
*/
getClaimedSegments(): Promise<Array<{
segmentKey: string;
workerId: string;
claimTime: number;
expiresAt: number;
outputPath: string;
}>>;
private buildForceClaimScript;
private buildLockKey;
private buildCompletedKey;
private executeForceClaimScript;
/**
* Force claim a segment, overriding existing claims
* Used for work stealing when a worker is unresponsive
*/
forceClaimSegment(segmentKey: string, newWorkerId: string, outputPath?: string): Promise<boolean>;
/**
* Parse a segment key to extract its components
*/
parseSegmentKey(segmentKey: string): {
fileId: string;
streamType: string;
quality: string;
streamIndex: number;
segmentIndex: number;
} | null;
private isValidWorkerId;
private validateAndSanitizeOutputPath;
}
//# sourceMappingURL=redisSegmentClaimManager.d.ts.map