# Quick Sync - Adaptive Streaming ## Overview Quick Sync is an adaptive streaming system that automatically adjusts audio quality based on network speed and system resources for optimal playback experience. ## Features ### Adaptive Quality Selection - **Auto Mode**: Automatically selects optimal quality based on network and system - **Manual Modes**: Low (64kbps), Medium (128kbps), High (256kbps), Ultra (320kbps) - **Real-time Monitoring**: Continuous network speed and system resource monitoring - **Smart Buffer Management**: Dynamic buffer sizing based on connection quality ### Network Speed Detection - Measures download speed using CDN test file - Caches results for 5 minutes to reduce overhead - Speed thresholds: - Ultra: 5+ Mbps - High: 2-5 Mbps - Medium: 1-2 Mbps - Low: 0.5-1 Mbps ### System Resource Monitoring - CPU usage monitoring - Memory usage tracking - Automatic quality adjustment under high system load - Prevents playback issues during heavy resource usage ### Smart Preferences - **Prefer Quality**: Upgrades quality when system resources allow - **Adapt to System**: Downgrades quality under heavy CPU/memory load - **Apply to Downloads**: Uses Quick Sync settings for downloaded audio ## Architecture ### Backend Components #### QuickSyncService (`audio/quick_sync_service.py`) Core service for adaptive streaming logic. **Key Methods:** ```python get_system_resources() -> Dict Returns CPU, memory, disk usage measure_network_speed(test_url: str, timeout: int) -> float Measures download speed in Mbps get_recommended_quality(user_preferences: Dict) -> Tuple[str, Dict] Returns quality level and settings based on network/system get_buffer_settings(quality: str, network_speed: float) -> Dict Returns optimal buffer configuration get_quick_sync_status(user_preferences: Dict) -> Dict Complete status with network, system, quality info ``` **Quality Presets:** ```python QUALITY_PRESETS = { 'low': {'bitrate': 64, 'buffer_size': 5, 'preload': 'metadata'}, 'medium': {'bitrate': 128, 'buffer_size': 10, 'preload': 'auto'}, 'high': {'bitrate': 256, 'buffer_size': 15, 'preload': 'auto'}, 'ultra': {'bitrate': 320, 'buffer_size': 20, 'preload': 'auto'}, 'auto': {'bitrate': 0, 'buffer_size': 0, 'preload': 'auto'}, } ``` #### API Views (`audio/views_quick_sync.py`) **QuickSyncStatusView** - GET `/api/audio/quick-sync/status/` - Returns current status and user preferences **QuickSyncPreferencesView** - GET/POST `/api/audio/quick-sync/preferences/` - Manage user Quick Sync preferences **QuickSyncTestView** - POST `/api/audio/quick-sync/test/` - Run manual network speed test **QuickSyncQualityPresetsView** - GET `/api/audio/quick-sync/presets/` - Get available quality presets and thresholds ### Frontend Components #### QuickSyncContext (`context/QuickSyncContext.tsx`) React context providing Quick Sync state management. **Provided Values:** ```typescript interface QuickSyncContextType { status: QuickSyncStatus | null; preferences: QuickSyncPreferences | null; loading: boolean; updatePreferences: (prefs: Partial) => Promise; runSpeedTest: () => Promise; refreshStatus: () => Promise; } ``` **Status Interface:** ```typescript interface QuickSyncStatus { network: { speed_mbps: number; status: 'excellent' | 'good' | 'fair' | 'poor'; }; system: { cpu_percent: number; memory_percent: number; status: 'low_load' | 'moderate_load' | 'high_load'; }; quality: { level: 'low' | 'medium' | 'high' | 'ultra' | 'auto'; bitrate: number; description: string; auto_selected: boolean; }; buffer: { buffer_size: number; preload: string; max_buffer_size: number; rebuffer_threshold: number; }; } ``` #### QuickSyncSettings Component (`components/QuickSyncSettings.tsx`) Settings page UI for Quick Sync configuration. **Features:** - Real-time network speed and system resource display - Quality mode selector (Auto/Ultra/High/Medium/Low) - Preference toggles (prefer quality, adapt to system, apply to downloads) - Manual speed test button - Buffer settings information - Visual status indicators with color-coded alerts ## Usage ### Backend Setup 1. Install dependencies: ```bash pip install psutil>=5.9.0 ``` 2. URLs are automatically included in `audio/urls.py` ### Frontend Setup 1. Wrap app with QuickSyncProvider in `main.tsx`: ```tsx import { QuickSyncProvider } from './context/QuickSyncContext'; ``` 2. Import QuickSyncSettings in SettingsPage: ```tsx import QuickSyncSettings from '../components/QuickSyncSettings'; ``` ### Using Quick Sync in Audio Player ```tsx import { useQuickSync } from '../context/QuickSyncContext'; const Player = () => { const { status, preferences } = useQuickSync(); // Use recommended quality const quality = status?.quality.level || 'medium'; const bitrate = status?.quality.bitrate || 128; // Use buffer settings const bufferSize = status?.buffer.buffer_size || 10; const preload = status?.buffer.preload || 'auto'; return (