背景
店里的监控买的百家齐放,有“云看看”、“小鹰看看”、“小翼管家”、“早期的小米”,而且都是家用级别,都是用手机看的。太low了,所以要弄下统一查看+电脑本地回放。
最后查了下发现只有小鹰看看能有PC端软件支持,可以在电脑做本地回放(夸克可以5倍速回放),其他的只能用安卓模拟器挂着了。
虽然对比云看看、小翼管家之类的多了PC端支持,但是还要吐槽下下载地址不好找,软件不好用。
最后更新于2025年8月2日08:24:26
问题列表
问题 | 解决方案 |
---|---|
PC端单次播放只有10分钟 | bat脚本+AutoHotkey |
小鹰看看软件本身本地回放有bug,拖动会卡死 | 导出mp4后用夸克回放 |
每次重开后软件音量过大 | 未解决,下载了EarTrumpet(音量合成器)可以快速调整软件音量 |
2025年6月后经常画面卡死 | 临时:用Windows自带防火墙屏蔽了部分ip 抽空重启摄像头后恢复正常 |
重连会出现黑屏 | 未解决 |
主要记录下bat脚本跟屏蔽ip的事吧。
SuperIPCam监控脚本.bat
脚本主体用DeepSeek写的,勿喷
老版本可以针对固定端口做监控,新版本变成随机端口了。
至于CPU、流量之类的用bat不好监控,容易误报,最后选择用内存大小做监控。
在任务计划里设置61秒执行一次bat,或者可以再改改脚本做成全后台的几秒检测一下可以更加好用点。
已知问题:
- 刚打开软件在64M后面会逐步减少到39M左右,部分情况会降到20M多,所以还是需要人工干预下。
- 软件进行重连/重启有概率会黑屏,但是还有SD卡还可以进行回放,所以还能接受,也就暂时保持这个逻辑了。
比如如下情况,就是检测内存已经临近10分钟关闭了,先触发软件内的继续播放(存在黑屏或者重启软件依旧黑屏的问题),等内存逐步减少到临界值进行重启,这个值还能再做调整,但是不如让厂家优化下软件吧。
在11:08:13十分钟到期(10:58:12开始),关闭监控。
脚本在11:08:22触发内存过低进行软件重启,但是因为bug软件黑屏了,并且内存没有到临界值在两分钟11:10:24触发重启操作后依旧因为bug黑屏,在第三分钟11:11:28再次重启操作后恢复正常。
@echo off
REM ================================================
REM 文件名:SuperIPCam监控脚本.bat
REM 功能:监控SuperIPCam进程状态,检测内存使用量
REM 自动重启异常进程,并记录运行日志
REM 版本:3.0
REM 修改记录:
REM 1. 调整阈值使软件更加稳定
REM ================================================
REM 配置区(可根据需要修改)
set LOG_FILE="D:\店里备份\监控\监控.log"
set CAM_PATH="C:\Program Files (x86)\小鹰看看\SuperIPCam.exe"
set AHK_SCRIPT="D:\店里备份\监控\resize_window.ahk"
set AHK_SCRIPT3="D:\店里备份\监控\resize_window3.ahk"
set MaxMemoryKB=37000
REM 工作阈值40MB (40*1024)
set MinValidMemoryKB=9000
REM 最小有效内存10MB
REM 初始化环境
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%a in ("%date%") do (
set LOG_DATE=%%a-%%b-%%c
)
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
REM 主程序入口
call :DetectAndHandlePort
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [info] 脚本执行完毕。>> %LOG_FILE%
exit /b
REM ================================================
REM 函数:CheckMemory
REM 功能:增强版内存使用量检测
REM 返回码:
REM 0 - 内存正常
REM 1 - 内存低于阈值
REM 2 - 检测失败
REM ================================================
:CheckMemory
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
timeout /t 2 /nobreak >nul
echo %TIMESTAMP% [info] 延迟2秒执行 >> %LOG_FILE%
set mem_value=0
set valid_data=0
REM 使用 typeperf 获取内存(Working Set),并处理小数
for /f "tokens=2 delims=," %%a in (
'typeperf "\Process(SuperIPCam)\Working Set - Private" -sc 1 2^>nul ^| find ":"'
) do (
REM 移除引号,并截取整数部分(去掉 .000)
for /f "tokens=1 delims=." %%b in ("%%~a") do (
set "mem_value=%%b"
set "valid_data=1"
)
)
REM 验证数据有效性
if !valid_data! equ 0 (
echo %TIMESTAMP% [error] 内存检测失败,typeperf无有效数据>> %LOG_FILE%
exit /b 2
)
REM 转换为KB(整数运算)
set /a mem_value_kb=!mem_value!/1024
echo %mem_value_kb%
REM 后续逻辑保持不变...
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [debug] 内存=!mem_value_kb!KB 阈值=[!MinValidMemoryKB!KB,!MaxMemoryKB!KB]>> %LOG_FILE%
if !mem_value_kb! LEQ 0 (
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [error] 内存检测异常:0KB>> %LOG_FILE%
exit /b 2
) else if !mem_value_kb! LSS !MinValidMemoryKB! (
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [warning] 内存过低!mem_value_kb!KB<最小阈值!MinValidMemoryKB!KB>> %LOG_FILE%
exit /b 1
) else if !mem_value_kb! LEQ !MaxMemoryKB! (
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [warning] 内存!mem_value_kb!KB≤工作阈值!MaxMemoryKB!KB>> %LOG_FILE%
exit /b 2
) else (
set LOG_TIME=%time:~0,8%
set "TIMESTAMP=[%LOG_DATE% %LOG_TIME%]"
echo %TIMESTAMP% [info] 内存状态正常>> %LOG_FILE%
exit /b 0
)
REM ================================================
REM 函数:DetectAndHandlePort
REM 功能:增强版进程状态检测
REM ================================================
:DetectAndHandlePort
set "PID="
REM 获取进程PID
for /f "tokens=2" %%i in (
'tasklist /FI "IMAGENAME eq SuperIPCam.exe" 2^>nul ^| findstr /i "SuperIPCam"'
) do set "PID=%%i"
if not defined PID (
echo %TIMESTAMP% [error] SuperIPCam.exe 未运行!>> %LOG_FILE%
if exist %CAM_PATH% (
start "" %CAM_PATH%
echo %TIMESTAMP% [info] 正在启动SuperIPCam...>> %LOG_FILE%
timeout /t 8 /nobreak >nul
if exist %AHK_SCRIPT% (
call %AHK_SCRIPT%
echo %TIMESTAMP% [info] 已执行窗口调整脚本>> %LOG_FILE%
) else (
echo %TIMESTAMP% [error] AHK脚本不存在!>> %LOG_FILE%
)
) else (
echo %TIMESTAMP% [critical] SuperIPCam.exe 不存在于指定路径!>> %LOG_FILE%
)
goto :eof
)
echo %TIMESTAMP% [info] 检测到进程 PID: !PID!>> %LOG_FILE%
REM 执行内存检测
call :CheckMemory
if errorlevel 2 (
echo %TIMESTAMP% [critical] 内存检测故障,建议人工检查>> %LOG_FILE%
echo %TIMESTAMP% [warning] 内存异常,尝试恢复...>> %LOG_FILE%
call :ReloadSuperIPCam
) else if errorlevel 1 (
echo %TIMESTAMP% [warning] 内存异常,尝试恢复...>> %LOG_FILE%
call :ReloadSuperIPCam
)
goto :eof
REM ================================================
REM 函数:ReloadSuperIPCam
REM 功能:增强版恢复流程
REM ================================================
:ReloadSuperIPCam
echo %TIMESTAMP% [action] 执行恢复流程>> %LOG_FILE%
if exist %AHK_SCRIPT3% (
call %AHK_SCRIPT3%
if errorlevel 1 (
echo %TIMESTAMP% [error] 恢复脚本执行失败>> %LOG_FILE%
)
) else (
echo %TIMESTAMP% [error] 恢复脚本不存在>> %LOG_FILE%
)
timeout /t 3 /nobreak >nul
REM 再次检测内存状态
set MaxMemoryKB=25000
call :CheckMemory
if errorlevel 1 (
echo %TIMESTAMP% [action] 恢复失败,准备完全重启>> %LOG_FILE%
call :RestartSuperIPCam
) else if errorlevel 2 (
echo %TIMESTAMP% [action] 恢复失败,准备完全重启>> %LOG_FILE%
call :RestartSuperIPCam
)
goto :eof
REM ================================================
REM 函数:RestartSuperIPCam
REM 功能:完整的进程重启流程
REM ================================================
:RestartSuperIPCam
echo %TIMESTAMP% [action] 开始强制重启流程>> %LOG_FILE%
REM 尝试正常结束进程
taskkill /T /IM "SuperIPCam.exe" >> %LOG_FILE% 2>&1
timeout /t 2 /nobreak >nul
REM 强制终止进程
taskkill /T /F /IM "SuperIPCam.exe" >> %LOG_FILE% 2>&1
::timeout /t 1 /nobreak >nul
REM 重新启动程序
if exist %CAM_PATH% (
start "" %CAM_PATH%
echo %TIMESTAMP% [info] 程序已重启>> %LOG_FILE%
timeout /t 8 /nobreak >nul
if exist %AHK_SCRIPT% (
start "" %AHK_SCRIPT%
)
) else (
echo %TIMESTAMP% [critical] 程序文件不存在!>> %LOG_FILE%
)
goto :eof
屏蔽异常ip
现象:重连几秒之后黑屏
临时解决屏蔽下IP
建议还是抽空去重启摄像头,重启大法真好使!
用软件(如NetLimiter)查看Superipcam软件下面异常连接,然后给他deny了
在这里插入图片描述