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}") |