问题: - 每次点击摄像头都生成随机 streamId 并调用 ZLM addStreamProxy, 拉流代理在无人观看后也不会回收; - 长时间使用后 ZLM 累积大量 0 观众代理(现场最多 201 路), 占满 NVR 并发连接,新建流拉不到数据; - /api/v1/stream/stop 为空实现,停止播放时不会释放拉流; - 表现为预置位配置中点开设备树后视频黑屏,WebRTC 信令等待 15s 超时。 改动: - streamId 改为按摄像头确定性生成(htjc_ + cameraCode), 同一摄像头复用同一路拉流代理,避免重复拉流; - 建立代理前先用 getProxyInfo 判断,已存在则复用; - 实现 stop:delStreamProxy 删除代理后再 close_streams(force=1) 关闭媒体源,兼容 ZLM auto_close=0 的场景; - 增加 Redis 观看者计数,最后一个观看者退出时才真正关流; - 新增空闲流兜底回收:清理 htjc_ 前缀、无观众且空闲超过 120s 的代理, 在取流时异步触发并做 30s 节流; - 补充 ZLM API 常量及代理 key(vhost/app/stream)构造。