#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 内存优化配置文件 用于配置WebSocket视频流的内存使用参数 """ # ==================== 前端内存优化配置 ==================== # 帧率控制 MAX_FPS = 15 # 最大帧率,降低可减少内存使用 FRAME_SKIP_THRESHOLD = 2 # 跳帧阈值,每N+1帧显示1帧 # 内存监控 MEMORY_CHECK_INTERVAL_MS = 10000 # 内存检查间隔(毫秒) MAX_MEMORY_USAGE_PERCENT = 80 # 内存使用率阈值(%),超过则自动清理 # 图像缓存 ENABLE_IMAGE_CACHE = True # 是否启用图像缓存优化 FORCE_GC_INTERVAL = 100 # 强制垃圾回收间隔(帧数) # ==================== 后端内存优化配置 ==================== # 帧处理 BACKEND_FRAME_SKIP_RATIO = 3 # 后端跳帧比例,每N帧处理1帧 MAX_FRAME_WIDTH = 320 # 最大帧宽度 MAX_FRAME_HEIGHT = 240 # 最大帧高度 # 内存限制 MAX_BACKEND_MEMORY_MB = 100 # 后端最大内存使用(MB) BACKEND_MEMORY_CHECK_INTERVAL = 50 # 后端内存检查间隔(帧数) # JPEG编码优化 JPEG_QUALITY = 50 # JPEG质量(1-100),越低内存使用越少 JPEG_PROGRESSIVE = False # 是否启用渐进式JPEG JPEG_OPTIMIZE = True # 是否启用JPEG优化 # 队列管理 FRAME_QUEUE_SIZE = 1 # 帧队列大小,设为1确保实时性 MAX_FRAME_RATE = 20 # 最大帧率限制 # ==================== 调试和监控配置 ==================== # 日志级别 MEMORY_LOG_LEVEL = 'INFO' # DEBUG, INFO, WARNING, ERROR ENABLE_MEMORY_LOGGING = True # 是否启用内存使用日志 # 性能监控 ENABLE_PERFORMANCE_MONITORING = True # 是否启用性能监控 PERFORMANCE_LOG_INTERVAL = 60 # 性能日志间隔(秒) # ==================== 自适应优化配置 ==================== # 自适应帧率 ENABLE_ADAPTIVE_FRAMERATE = True # 是否启用自适应帧率 MIN_FPS = 5 # 最小帧率 MAX_ADAPTIVE_FPS = 30 # 最大自适应帧率 # 自适应质量 ENABLE_ADAPTIVE_QUALITY = True # 是否启用自适应质量 MIN_JPEG_QUALITY = 30 # 最小JPEG质量 MAX_JPEG_QUALITY = 80 # 最大JPEG质量 # 内存压力阈值 MEMORY_PRESSURE_LEVELS = { 'low': 50, # 低压力阈值(%) 'medium': 70, # 中等压力阈值(%) 'high': 85, # 高压力阈值(%) 'critical': 95 # 临界压力阈值(%) } # ==================== 辅助函数 ==================== def get_memory_config(): """获取内存配置字典""" return { 'frontend': { 'max_fps': MAX_FPS, 'frame_skip_threshold': FRAME_SKIP_THRESHOLD, 'memory_check_interval': MEMORY_CHECK_INTERVAL_MS, 'max_memory_percent': MAX_MEMORY_USAGE_PERCENT, 'enable_cache': ENABLE_IMAGE_CACHE, 'force_gc_interval': FORCE_GC_INTERVAL }, 'backend': { 'frame_skip_ratio': BACKEND_FRAME_SKIP_RATIO, 'max_frame_size': (MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT), 'max_memory_mb': MAX_BACKEND_MEMORY_MB, 'memory_check_interval': BACKEND_MEMORY_CHECK_INTERVAL, 'jpeg_quality': JPEG_QUALITY, 'jpeg_progressive': JPEG_PROGRESSIVE, 'jpeg_optimize': JPEG_OPTIMIZE, 'queue_size': FRAME_QUEUE_SIZE, 'max_frame_rate': MAX_FRAME_RATE }, 'monitoring': { 'log_level': MEMORY_LOG_LEVEL, 'enable_memory_logging': ENABLE_MEMORY_LOGGING, 'enable_performance_monitoring': ENABLE_PERFORMANCE_MONITORING, 'performance_log_interval': PERFORMANCE_LOG_INTERVAL }, 'adaptive': { 'enable_adaptive_framerate': ENABLE_ADAPTIVE_FRAMERATE, 'min_fps': MIN_FPS, 'max_adaptive_fps': MAX_ADAPTIVE_FPS, 'enable_adaptive_quality': ENABLE_ADAPTIVE_QUALITY, 'min_jpeg_quality': MIN_JPEG_QUALITY, 'max_jpeg_quality': MAX_JPEG_QUALITY, 'memory_pressure_levels': MEMORY_PRESSURE_LEVELS } } def apply_memory_config(config_dict): """应用内存配置""" global MAX_FPS, FRAME_SKIP_THRESHOLD, MAX_MEMORY_USAGE_PERCENT global BACKEND_FRAME_SKIP_RATIO, MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT global MAX_BACKEND_MEMORY_MB, JPEG_QUALITY if 'frontend' in config_dict: frontend = config_dict['frontend'] MAX_FPS = frontend.get('max_fps', MAX_FPS) FRAME_SKIP_THRESHOLD = frontend.get('frame_skip_threshold', FRAME_SKIP_THRESHOLD) MAX_MEMORY_USAGE_PERCENT = frontend.get('max_memory_percent', MAX_MEMORY_USAGE_PERCENT) if 'backend' in config_dict: backend = config_dict['backend'] BACKEND_FRAME_SKIP_RATIO = backend.get('frame_skip_ratio', BACKEND_FRAME_SKIP_RATIO) if 'max_frame_size' in backend: MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT = backend['max_frame_size'] MAX_BACKEND_MEMORY_MB = backend.get('max_memory_mb', MAX_BACKEND_MEMORY_MB) JPEG_QUALITY = backend.get('jpeg_quality', JPEG_QUALITY) if __name__ == '__main__': # 测试配置 config = get_memory_config() print("当前内存优化配置:") for category, settings in config.items(): print(f"\n{category.upper()}:") for key, value in settings.items(): print(f" {key}: {value}")