/**
* Buffer and Synchronization Manager
*
* Advanced buffering and synchronization strategies for multimedia streams:
* - Adaptive buffering with predictive algorithms
* - Multi-stream synchronization with sub-frame accuracy
* - Jitter buffer management
* - Clock synchronization across agents
* - Quality-aware buffer management
*/
///
import { EventEmitter } from "events";
import { MultiModalChunk, BufferingStrategy, SynchronizationConfig, NetworkConditions } from "../types/streaming.js";
export interface BufferMetrics {
currentLevel: number;
targetLevel: number;
underrunCount: number;
overrunCount: number;
averageLatency: number;
jitter: number;
throughput: number;
efficiency: number;
}
export interface SyncPoint {
timestamp: number;
streamId: string;
chunkId: string;
priority: number;
tolerance: number;
dependencies: string[];
}
export interface BufferPool {
id: string;
type: "audio" | "video" | "data";
capacity: number;
chunks: MultiModalChunk[];
watermarks: {
low: number;
high: number;
critical: number;
};
strategy: BufferingStrategy;
metrics: BufferMetrics;
}
export interface ClockReference {
id: string;
type: "local" | "network" | "master";
frequency: number;
drift: number;
offset: number;
accuracy: number;
lastSync: number;
}
export declare class BufferSyncManager extends EventEmitter {
private logger;
private bufferPools;
private syncPoints;
private clockReferences;
private masterClock;
private syncConfig;
private adaptiveAlgorithm;
private jitterBuffer;
private performanceMonitor;
constructor(syncConfig: SynchronizationConfig);
/**
* Create a new buffer pool for a stream
*/
createBufferPool(streamId: string, type: "audio" | "video" | "data", strategy: BufferingStrategy): BufferPool;
/**
* Add chunk to buffer with intelligent positioning
*/
addChunk(streamId: string, chunk: MultiModalChunk): Promise;
/**
* Retrieve next chunk for playback
*/
getNextChunk(streamId: string, currentTime: number): MultiModalChunk | null;
/**
* Synchronize multiple streams to a common timeline
*/
synchronizeStreams(streamIds: string[], referenceTime: number): Promise;
/**
* Adapt buffering strategy based on network conditions
*/
adaptToConditions(streamId: string, conditions: NetworkConditions): void;
/**
* Get comprehensive buffer statistics
*/
getBufferStatistics(streamId?: string): Map;
/**
* Predict optimal buffer size based on conditions
*/
predictOptimalBufferSize(type: "audio" | "video" | "data", conditions: NetworkConditions, qualityLevel: string): number;
/**
* Flush buffer pool
*/
flushBuffer(streamId: string): number;
/**
* Calculate optimal buffer capacity based on stream type and strategy
*/
private calculateOptimalCapacity;
/**
* Calculate buffer watermarks
*/
private calculateWatermarks;
/**
* Check if buffer has capacity for new chunk
*/
private hasCapacity;
/**
* Evict chunks to make space
*/
private evictChunks;
/**
* Find correct insertion position for chunk
*/
private findInsertPosition;
/**
* Update buffer metrics
*/
private updateBufferMetrics;
/**
* Add synchronization point
*/
private addSyncPoint;
/**
* Check for buffer underrun
*/
private checkForUnderrun;
/**
* Calculate synchronization adjustments
*/
private calculateSyncAdjustments;
/**
* Apply synchronization adjustment to stream
*/
private applySyncAdjustment;
/**
* Verify synchronization accuracy
*/
private verifySynchronization;
/**
* Check if buffering strategy should be updated
*/
private shouldUpdateStrategy;
/**
* Update buffering strategy for pool
*/
private updateBufferingStrategy;
/**
* Initialize master clock reference
*/
private initializeMasterClock;
/**
* Start synchronization loop
*/
private startSynchronizationLoop;
/**
* Perform synchronization cycle
*/
private performSynchronizationCycle;
/**
* Update network clock
*/
private updateNetworkClock;
/**
* Process synchronization points
*/
private processSyncPoints;
/**
* Process individual sync point
*/
private processSyncPoint;
/**
* Clean up resources
*/
cleanup(): void;
}
//# sourceMappingURL=buffer-sync-manager.d.ts.map