140 lines
5.2 KiB
Python
140 lines
5.2 KiB
Python
![]() |
#!/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}")
|