/** * Real-time Quality Adaptation Engine * * Advanced algorithms for dynamic quality adjustment based on: * - Network conditions monitoring * - Device capabilities assessment * - User preferences optimization * - Machine learning predictions * - Multi-stream coordination */ /// import { EventEmitter } from "events"; import { StreamQuality, NetworkConditions, QualityAdaptationRule } from "../types/streaming.js"; export interface AdaptationContext { streamId: string; streamType: "video" | "audio" | "data"; currentQuality: StreamQuality; targetQuality?: StreamQuality; networkConditions: NetworkConditions; deviceCapabilities: DeviceCapabilities; userPreferences: UserPreferences; sessionMetrics: SessionMetrics; constraints: QualityConstraints; } export interface DeviceCapabilities { cpu: { cores: number; usage: number; maxFrequency: number; architecture: string; }; memory: { total: number; available: number; usage: number; }; display: { resolution: { width: number; height: number; }; refreshRate: number; colorDepth: number; hdr: boolean; }; network: { type: "3g" | "4g" | "5g" | "wifi" | "ethernet"; speed: { upload: number; download: number; }; reliability: number; }; hardware: { videoDecoding: string[]; audioProcessing: string[]; acceleration: boolean; }; } export interface UserPreferences { qualityPriority: "battery" | "quality" | "data" | "balanced"; maxBitrate: number; autoAdjust: boolean; preferredResolution: { width: number; height: number; }; latencyTolerance: number; dataUsageLimit: number; adaptationSpeed: "slow" | "medium" | "fast"; } export interface SessionMetrics { duration: number; totalBytes: number; qualityChanges: number; bufferHealth: number; userSatisfaction: number; errorRate: number; rebufferingEvents: number; averageLatency: number; } export interface QualityConstraints { minBitrate: number; maxBitrate: number; minResolution: { width: number; height: number; }; maxResolution: { width: number; height: number; }; minFramerate: number; maxFramerate: number; latencyBudget: number; powerBudget: number; } export interface AdaptationDecision { streamId: string; action: "upgrade" | "downgrade" | "maintain" | "emergency"; reason: string; confidence: number; newQuality: StreamQuality; estimatedImpact: { latency: number; bandwidth: number; cpu: number; battery: number; userExperience: number; }; timeline: number; rollbackPlan?: StreamQuality; } export interface MLModel { type: "linear_regression" | "neural_network" | "decision_tree" | "ensemble"; features: string[]; accuracy: number; lastTrained: number; predictions: Map; } export declare class QualityAdaptationEngine extends EventEmitter { private logger; private adaptationRules; private contexts; private adaptationHistory; private mlModels; private qualityLadder; private networkMonitor; private deviceMonitor; private predictionEngine; private decisionEngine; private metricsCollector; constructor(); /** * Initialize adaptation for a stream */ initializeStream(streamId: string, streamType: "video" | "audio" | "data", initialQuality: StreamQuality, userPreferences: UserPreferences, constraints: QualityConstraints): void; /** * Evaluate and potentially adapt stream quality */ evaluateAdaptation(streamId: string): Promise; /** * Force quality change (user-initiated or emergency) */ forceQualityChange(streamId: string, targetQuality: StreamQuality, reason: string): Promise; /** * Get optimal quality for current conditions */ getOptimalQuality(streamId: string, conditions?: NetworkConditions): StreamQuality | null; /** * Add custom adaptation rule */ addAdaptationRule(rule: QualityAdaptationRule): void; /** * Get adaptation statistics */ getAdaptationStatistics(streamId?: string): any; /** * Update context with latest conditions */ private updateContext; /** * Generate adaptation decision based on context */ private generateAdaptationDecision; /** * Check if adaptation should be considered */ private shouldConsiderAdaptation; /** * Apply adaptation decision */ private applyAdaptationDecision; /** * Validate adaptation decision against constraints */ private validateDecision; /** * Generate quality ladder for stream */ private generateQualityLadder; /** * Calculate optimal bitrate for resolution */ private calculateOptimalBitrate; /** * Select quality using rule-based approach */ private selectQualityByRules; /** * Check if device can handle quality level */ private canDeviceHandle; /** * Estimate impact of quality change */ private estimateImpact; /** * Initialize default adaptation rules */ private initializeAdaptationRules; /** * Initialize ML models */ private initializeMLModels; /** * Update ML models with new data */ private updateMLModels; /** * Start monitoring systems */ private startMonitoring; /** * Evaluate adaptation for all active streams */ private evaluateAllStreams; /** * Clean up stream context */ removeStream(streamId: string): void; /** * Clean up resources */ cleanup(): void; } //# sourceMappingURL=quality-adaptation-engine.d.ts.map