server: port: 8081 spring: application: name: inspect-nvr profiles: active: dev redis: host: localhost port: 6379 password: # MySQL业务库:dynamic-datasource 使用Druid作为连接池 datasource: dynamic: primary: master strict: true datasource: master: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://192.168.1.116:4406/inspect_shaoxing_260511?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true" username: root password: atia2018 druid: initial-size: 1 min-idle: 1 max-active: 10 max-wait: 60000 validation-query: SELECT 1 test-while-idle: true test-on-borrow: false test-on-return: false filters: stat,wall,slf4j mybatis: mapper-locations: classpath*:mapper/**/*.xml configuration: map-underscore-to-camel-case: true mode: retryTimes: 5 delayTime: 5000 retryMode: 0 # Browser playback service settings. NVR devices and cameras are read only from the business database. hik: playback: hls: idle-session-millis: ${HIK_NVR_HLS_IDLE_SESSION_MILLIS:120000} startup-timeout-millis: ${HIK_NVR_HLS_STARTUP_TIMEOUT_MILLIS:30000} no-data-timeout-millis: ${HIK_NVR_HLS_NO_DATA_TIMEOUT_MILLIS:20000} max-concurrent-sessions: ${HIK_NVR_HLS_MAX_SESSIONS:1} # 服务端调用 ZLMediaKit API 确认流是否已注册;密钥为空时实时预览会直接返回配置错误。 api-base-url: "${ZLM_API_BASE_URL:http://127.0.0.1:18081}" api-secret: "${ZLM_API_SECRET:}" # 实时预览:FFmpeg 拉取 NVR 的 RTSP 子码流并推送到 ZLMediaKit。 live: # 单路实时流从启动到明确成功或失败的总时限(毫秒);后台任务仍按此时限继续尝试。 startup-timeout-millis: ${HIK_NVR_LIVE_STARTUP_TIMEOUT_MILLIS:10000} # 首次起流时阻塞等待并直接返回播放结果的最长时间(毫秒)。 # 页面只给起流请求 8 秒,超过就弹“系统接口请求超时”,因此这里必须明显小于 8 秒; # 超时后返回 STARTING,后台继续起流,播放地址仍随响应返回。 response-wait-millis: ${HIK_NVR_LIVE_RESPONSE_WAIT_MILLIS:6000} # 同一台 NVR 相邻 RTSP 握手的最小间隔(毫秒),避免设备瞬时并发 SETUP 被拒。 start-spacing-millis: ${HIK_NVR_LIVE_START_SPACING_MILLIS:600} # 每台 NVR 等待起流的最大任务数,不含正在执行的任务。 max-start-queue-size: ${HIK_NVR_LIVE_MAX_START_QUEUE_SIZE:8} # 同一台 NVR 允许同时进行的起流任务数。握手间隔仍由 start-spacing-millis 保证, # 本项只让“等待设备出流”的几路重叠,用于缩短一次打开多画面时最后一路的等待时间; # 远程高延迟设备可适当调大,出现起流被拒时调回 1。 max-concurrent-starts-per-nvr: ${HIK_NVR_LIVE_MAX_CONCURRENT_STARTS_PER_NVR:2} # 单次 ZLMediaKit API 连接和读取超时(毫秒)。 zlm-api-timeout-millis: ${HIK_NVR_LIVE_ZLM_API_TIMEOUT_MILLIS:300} # 设备端在 SETUP 阶段拒绝建立实时流时允许的退避重试次数。 max-attempts: ${HIK_NVR_LIVE_MAX_ATTEMPTS:3} # 重试前等待设备释放上一次 RTSP 会话的时间(毫秒),按尝试序号线性递增。 retry-release-wait-millis: ${HIK_NVR_LIVE_RETRY_RELEASE_WAIT_MILLIS:1500} retry-release-wait-max-millis: ${HIK_NVR_LIVE_RETRY_RELEASE_WAIT_MAX_MILLIS:5000} # 停流时等待 FFmpeg 优雅退出(发送 RTSP TEARDOWN)的最长时间(毫秒)。 stop-grace-millis: ${HIK_NVR_LIVE_STOP_GRACE_MILLIS:2000} # 单个取流设备允许同时播放的实时流上限,0 表示不限制;请按设备远程预览预算调整。 # 统计粒度是"实际拉取的设备":直连摄像机时为相机 IP,经转发时为 NVR/CVR IP。 max-sessions-per-nvr: ${HIK_NVR_LIVE_MAX_SESSIONS_PER_NVR:8} # 长时间无人观看(ZLMediaKit 观众数为 0)时回收实时流,避免浏览器异常退出后占住 NVR 会话。 idle-reap-enabled: ${HIK_NVR_LIVE_IDLE_REAP_ENABLED:true} idle-reader-timeout-millis: ${HIK_NVR_LIVE_IDLE_READER_TIMEOUT_MILLIS:600000} # 空闲回收扫描间隔(毫秒)。 idle-reap-interval-millis: ${HIK_NVR_LIVE_IDLE_REAP_INTERVAL_MILLIS:60000} # 实时预览是否优先直连摄像机取流:CVR(中心存储)等设备的远程转发额度很小, # 直连摄像机可绕开该瓶颈;地址缺失、端口不可达或鉴权失败时自动回退 NVR。 prefer-camera-direct: ${HIK_NVR_LIVE_PREFER_CAMERA_DIRECT:true} # 直连摄像机使用的 RTSP 端口。 camera-rtsp-port: ${HIK_NVR_LIVE_CAMERA_RTSP_PORT:554} # 直连摄像机的账号密码;留空表示沿用所属 NVR 在数据库中的凭据。 camera-username: "${HIK_NVR_LIVE_CAMERA_USERNAME:}" camera-password: "${HIK_NVR_LIVE_CAMERA_PASSWORD:}" # 直连摄像机 RTSP 端口连通性探测超时(毫秒)。 camera-probe-timeout-millis: ${HIK_NVR_LIVE_CAMERA_PROBE_TIMEOUT_MILLIS:500} # 台账 basedata_eqpbook_channel.channel_type=ir(红外热成像)对应的相机内通道号。 # 台账里 vl=可见光、ir=热成像,是镜头类型的权威来源;默认 ir 用相机通道 2, # 即 1=可见光、2=热成像。现场若两个镜头画面互换,只改这里即可整体反转。 ir-camera-channel: ${HIK_NVR_LIVE_IR_CAMERA_CHANNEL:2} # 同一 IP 多通道相机(双光谱等)的相机内通道分配顺序:asc / desc。 # 只在台账 channel_type 与平台通道名都判断不出镜头类型时才生效。 camera-channel-order: ${HIK_NVR_LIVE_CAMERA_CHANNEL_ORDER:asc} clip: # 一分钟录像先由SDK下载到临时目录,再由FFmpeg统一封装为MP4。 ffmpeg-path: ${FFMPEG_PATH:C:/tools/ffmpeg/bin/ffmpeg.exe} download-timeout-millis: ${HIK_NVR_CLIP_DOWNLOAD_TIMEOUT_MILLIS:120000} poll-interval-millis: ${HIK_NVR_CLIP_POLL_INTERVAL_MILLIS:250} ffmpeg-timeout-millis: ${HIK_NVR_CLIP_FFMPEG_TIMEOUT_MILLIS:60000} # 云台控制锁:/device/ptzcontrol 请求体携带 username 时按 cameraCode 抢占控制锁, # 角色由 ExtRoleService 解析(外部接口开关/地址见 sys_config,等级映射见 sys_dict_data 的 ptz_role_level); # 同 username 续期、更高等级(roleLevel 数值更小)可抢占、同级先到先得; # 不携带 username 的调用(北向上位平台)不受锁约束。 permission: enabled: ${PERMISSION_ENABLED:true} lock-ttl-seconds: ${PERMISSION_LOCK_TTL_SECONDS:300}