UNPKG

@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
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