| @ -0,0 +1,32 @@ | |||
| # 默认不向 Docker 构建器发送任何文件,再按镜像构建需要逐项放行。 | |||
| * | |||
| !Dockerfile | |||
| !pom.xml | |||
| !deploy/ | |||
| !deploy/docker/ | |||
| !deploy/docker/maven-settings.xml | |||
| !src/ | |||
| !src/** | |||
| !lib/ | |||
| !lib/jna.jar | |||
| !lib/examples.jar | |||
| !lib/INetSDK.jar | |||
| !lib/DemoLocalCfg.json | |||
| !lib/DeviceCfg.json | |||
| !lib/LocalSensorAdd.dat | |||
| !lib/license.dat | |||
| # 仅发送两套 Linux x86_64 SDK 的运行库,开发示例和文档不进入构建上下文。 | |||
| !vendor-sdk/ | |||
| !vendor-sdk/HCNetSDKV6.1.11.5_build20251204_linux64_ZH_20260320152102/ | |||
| !vendor-sdk/HCNetSDKV6.1.11.5_build20251204_linux64_ZH_20260320152102/HCNetSDKV6.1.11.5_build20251204_linux64_ZH/ | |||
| !vendor-sdk/HCNetSDKV6.1.11.5_build20251204_linux64_ZH_20260320152102/HCNetSDKV6.1.11.5_build20251204_linux64_ZH/库文件/ | |||
| !vendor-sdk/HCNetSDKV6.1.11.5_build20251204_linux64_ZH_20260320152102/HCNetSDKV6.1.11.5_build20251204_linux64_ZH/库文件/** | |||
| !vendor-sdk/General_NetSDK_ChnEng_JAVA_Linux64_IS_V3.061.0000000.0.R.260511/ | |||
| !vendor-sdk/General_NetSDK_ChnEng_JAVA_Linux64_IS_V3.061.0000000.0.R.260511/libs/ | |||
| !vendor-sdk/General_NetSDK_ChnEng_JAVA_Linux64_IS_V3.061.0000000.0.R.260511/libs/linux64/ | |||
| !vendor-sdk/General_NetSDK_ChnEng_JAVA_Linux64_IS_V3.061.0000000.0.R.260511/libs/linux64/** | |||
| @ -0,0 +1,23 @@ | |||
| # Docker Compose host settings | |||
| TZ=Asia/Shanghai | |||
| BIND_ADDRESS=0.0.0.0 | |||
| APP_PORT=8081 | |||
| # Remote ZLMediaKit. RTMP is used by the container to publish; HTTP is returned to browsers. | |||
| ZLM_RTMP_BASE_URL=rtmp://192.168.1.200:1935 | |||
| ZLM_HTTP_BASE_URL=http://192.168.1.200:18081 | |||
| # Maven mirror used while building the image | |||
| MAVEN_MIRROR_URL=https://maven.aliyun.com/repository/public | |||
| # MAVEN_MIRROR_URL=https://repo.maven.apache.org/maven2 | |||
| # Remote MySQL; no local MySQL or Redis container is started | |||
| DB_URL=jdbc:mysql://192.168.1.116:4406/inspect_shaoxing_260511?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true | |||
| DB_USERNAME=root | |||
| DB_PASSWORD=remote_mysql_change_me | |||
| # NVR names, IPs, SDK/RTSP/HTTP ports and credentials are maintained in basedata_eqpbook_nvr. | |||
| # Camera names, ownership and direct IPs are maintained in ivs_camera. | |||
| # Container memory and native SDK library settings | |||
| JAVA_TOOL_OPTIONS=-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Djava.library.path=/app/lib:/app/lib/HCNetSDKCom:/app/lib/linux64 | |||
| @ -0,0 +1,3 @@ | |||
| # 项目规则 | |||
| - 如果需要进行打包或构建 Docker 镜像,必须先删除原先的同名镜像,再执行构建。 | |||
| @ -0,0 +1,121 @@ | |||
| # syntax=docker/dockerfile:1.7 | |||
| # 默认通过已验证的国内代理读取 FFmpeg;导出脚本还会按相同摘要自动选择备用代理。 | |||
| ARG FFMPEG_IMAGE=docker.1ms.run/mwader/static-ffmpeg:6.1 | |||
| # 构建阶段使用完整的 Maven + JDK 8,最终镜像不会保留 Maven 和源码。 | |||
| FROM --platform=$BUILDPLATFORM maven:3.9.9-eclipse-temurin-8 AS builder | |||
| ARG MAVEN_MIRROR_URL=https://maven.aliyun.com/repository/public | |||
| ENV MAVEN_MIRROR_URL=${MAVEN_MIRROR_URL} | |||
| WORKDIR /workspace | |||
| # Maven 镜像地址通过构建参数注入,国内默认使用阿里云,也可切回 Maven Central。 | |||
| COPY deploy/docker/maven-settings.xml /tmp/maven-settings.xml | |||
| # 三个厂商 JAR 未发布到公共 Maven 仓库,先安装到镜像内的本地仓库。 | |||
| # 这里使用普通构建层持久化仓库;若改用 BuildKit 缓存挂载,安装层命中缓存但 | |||
| # 挂载内容已被回收时,后续 Maven 会错误地转向公共镜像查找这些私有依赖。 | |||
| COPY lib/jna.jar lib/examples.jar lib/INetSDK.jar /tmp/vendor/ | |||
| RUN mvn -s /tmp/maven-settings.xml -B -ntp install:install-file \ | |||
| -Dfile=/tmp/vendor/jna.jar \ | |||
| -DgroupId=net.java.jna \ | |||
| -DartifactId=jna \ | |||
| -Dversion=1.0.0 \ | |||
| -Dpackaging=jar \ | |||
| && mvn -s /tmp/maven-settings.xml -B -ntp install:install-file \ | |||
| -Dfile=/tmp/vendor/examples.jar \ | |||
| -DgroupId=net.java.examples \ | |||
| -DartifactId=examples \ | |||
| -Dversion=1.0.0 \ | |||
| -Dpackaging=jar \ | |||
| && mvn -s /tmp/maven-settings.xml -B -ntp install:install-file \ | |||
| -Dfile=/tmp/vendor/INetSDK.jar \ | |||
| -DgroupId=net.dahua.netsdk \ | |||
| -DartifactId=dahua-netsdk-jni \ | |||
| -Dversion=1.0.0 \ | |||
| -Dpackaging=jar | |||
| # 先下载依赖,使普通源码变更能够复用 Maven 依赖层。 | |||
| COPY pom.xml ./ | |||
| RUN mvn -s /tmp/maven-settings.xml -B -ntp -DskipTests \ | |||
| -Dmaven.wagon.http.retryHandler.count=5 \ | |||
| dependency:go-offline | |||
| COPY src ./src | |||
| RUN mvn -s /tmp/maven-settings.xml -B -ntp -DskipTests \ | |||
| -Dmaven.wagon.http.retryHandler.count=5 \ | |||
| clean package | |||
| # 直接复用预编译的静态 FFmpeg,使视频处理与厂商 SDK 均在 x86_64 上原生运行。 | |||
| FROM --platform=$TARGETPLATFORM ${FFMPEG_IMAGE} AS ffmpeg | |||
| # 厂商 Linux64 SDK 依赖 glibc,因此运行阶段使用 Ubuntu 系 JRE 镜像。 | |||
| FROM eclipse-temurin:8-jre-focal AS runtime | |||
| ARG TARGETARCH | |||
| ARG HIK_SDK_ROOT=vendor-sdk/HCNetSDKV6.1.11.5_build20251204_linux64_ZH_20260320152102/HCNetSDKV6.1.11.5_build20251204_linux64_ZH/库文件 | |||
| ARG DAHUA_SDK_ROOT=vendor-sdk/General_NetSDK_ChnEng_JAVA_Linux64_IS_V3.061.0000000.0.R.260511/libs/linux64 | |||
| ARG UBUNTU_MIRROR=https://mirrors.aliyun.com/ubuntu | |||
| # 两套厂商库均为 x86_64,构建时阻止误选其他平台导致 JNA 加载失败。 | |||
| RUN test "${TARGETARCH}" = "amd64" \ | |||
| || (echo "inspect-nvr 当前 Docker 镜像只支持 linux/amd64:vendor-sdk 中的海康和大华 SDK 均为 x86_64。" >&2; exit 1) | |||
| ENV DEBIAN_FRONTEND=noninteractive \ | |||
| TZ=Asia/Shanghai | |||
| # 将 Ubuntu 官方软件源替换为国内阿里云镜像,避免构建时因跨境链路超时或 502 中断。 | |||
| RUN sed -i \ | |||
| -e "s|http://archive.ubuntu.com/ubuntu|${UBUNTU_MIRROR}|g" \ | |||
| -e "s|http://security.ubuntu.com/ubuntu|${UBUNTU_MIRROR}|g" \ | |||
| /etc/apt/sources.list | |||
| # 海康播放与渲染组件会动态加载 X11、OpenGL 和 EGL;即使无桌面环境也需保留这些运行库。 | |||
| RUN apt-get -o Acquire::Retries=5 update \ | |||
| && apt-get -o Acquire::Retries=5 install -y --no-install-recommends libx11-6 libgl1 libegl1 \ | |||
| && rm -rf /var/lib/apt/lists/* | |||
| # 语音对讲与视频输出组件还会按需加载 ALSA 和 XVideo,统一放入运行镜像避免功能触发时才报缺库。 | |||
| RUN apt-get -o Acquire::Retries=5 update \ | |||
| && apt-get -o Acquire::Retries=5 install -y --no-install-recommends libasound2 libxv1 \ | |||
| && rm -rf /var/lib/apt/lists/* | |||
| # 静态 FFmpeg 不依赖运行镜像中的共享库,适合跨架构构建和部署。 | |||
| COPY --from=ffmpeg /ffmpeg /usr/bin/ffmpeg | |||
| COPY --from=ffmpeg /ffprobe /usr/bin/ffprobe | |||
| RUN groupadd --gid 10001 inspect-nvr \ | |||
| && useradd --uid 10001 --gid inspect-nvr --home-dir /app --shell /usr/sbin/nologin inspect-nvr \ | |||
| && mkdir -p /app/lib/HCNetSDKCom /app/lib/linux64 \ | |||
| /app/images /app/sdkLog /app/sdklog /app/target /data/logs/inspect-nvr \ | |||
| && chown -R inspect-nvr:inspect-nvr /app /data/logs | |||
| WORKDIR /app | |||
| COPY --from=builder --chown=inspect-nvr:inspect-nvr /workspace/target/inspect-nvr.jar ./app.jar | |||
| # 直接从厂商 Linux64 开发包复制 x86_64 运行库,避免混入旧 ARM64 库或 Windows DLL。 | |||
| COPY --chown=inspect-nvr:inspect-nvr ${HIK_SDK_ROOT}/ ./lib/ | |||
| COPY --chown=inspect-nvr:inspect-nvr ${DAHUA_SDK_ROOT}/ ./lib/linux64/ | |||
| COPY --chown=inspect-nvr:inspect-nvr \ | |||
| lib/DemoLocalCfg.json \ | |||
| lib/DeviceCfg.json \ | |||
| lib/LocalSensorAdd.dat \ | |||
| lib/license.dat \ | |||
| ./lib/ | |||
| # JNA 除了按绝对路径加载主库,还会从这些目录解析 SDK 的级联依赖。 | |||
| ENV LD_LIBRARY_PATH=/app/lib:/app/lib/HCNetSDKCom:/app/lib/linux64 \ | |||
| JAVA_TOOL_OPTIONS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Djava.library.path=/app/lib:/app/lib/HCNetSDKCom:/app/lib/linux64" | |||
| USER inspect-nvr | |||
| EXPOSE 8081 | |||
| HEALTHCHECK --interval=30s --timeout=5s --start-period=90s --retries=5 \ | |||
| CMD curl --fail --silent --show-error http://127.0.0.1:8081/ > /dev/null || exit 1 | |||
| ENTRYPOINT ["java", "-jar", "/app/app.jar"] | |||
| @ -0,0 +1,50 @@ | |||
| name: inspect-nvr | |||
| services: | |||
| inspect-nvr: | |||
| platform: linux/amd64 | |||
| build: | |||
| context: . | |||
| dockerfile: Dockerfile | |||
| args: | |||
| FFMPEG_IMAGE: ${FFMPEG_IMAGE:-docker.1ms.run/mwader/static-ffmpeg:6.1} | |||
| MAVEN_MIRROR_URL: ${MAVEN_MIRROR_URL:-https://maven.aliyun.com/repository/public} | |||
| image: inspect-nvr:local | |||
| container_name: inspect-nvr-app | |||
| restart: unless-stopped | |||
| environment: | |||
| TZ: ${TZ:-Asia/Shanghai} | |||
| SPRING_PROFILES_ACTIVE: docker | |||
| SERVER_PORT: 8081 | |||
| DB_URL: ${DB_URL:?DB_URL_required_in_.env} | |||
| DB_USERNAME: ${DB_USERNAME:?DB_USERNAME_required_in_.env} | |||
| DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD_required_in_.env} | |||
| FFMPEG_PATH: /usr/bin/ffmpeg | |||
| ZLM_RTMP_BASE_URL: ${ZLM_RTMP_BASE_URL:?remote_ZLM_RTMP_BASE_URL_required_in_.env} | |||
| ZLM_HTTP_BASE_URL: ${ZLM_HTTP_BASE_URL:?remote_ZLM_HTTP_BASE_URL_required_in_.env} | |||
| JAVA_TOOL_OPTIONS: ${JAVA_TOOL_OPTIONS:--XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Djava.library.path=/app/lib:/app/lib/HCNetSDKCom:/app/lib/linux64} | |||
| REDIS_HOST: ${REDIS_HOST:?REDIS_HOST_required_in_.env} | |||
| REDIS_PORT: ${REDIS_PORT:-6379} | |||
| REDIS_PASSWORD: ${REDIS_PASSWORD:-} | |||
| REDIS_DATABASE: ${REDIS_DATABASE:-0} | |||
| ports: | |||
| - "${BIND_ADDRESS:-0.0.0.0}:${APP_PORT:-8081}:8081" | |||
| volumes: | |||
| - app_logs:/data/logs | |||
| - app_sdk_logs:/app/sdkLog | |||
| - app_dahua_sdk_logs:/app/sdklog | |||
| - app_images:/app/images | |||
| - app_runtime:/app/target | |||
| networks: | |||
| - inspect-nvr | |||
| networks: | |||
| inspect-nvr: | |||
| name: inspect-nvr | |||
| volumes: | |||
| app_logs: | |||
| app_sdk_logs: | |||
| app_dahua_sdk_logs: | |||
| app_images: | |||
| app_runtime: | |||
| @ -0,0 +1,85 @@ | |||
| # Docker Compose 部署 | |||
| 该部署会构建 `inspect-nvr` 应用镜像,并启动应用与 ZLMediaKit。Java 8、FFmpeg、海康 SDK 与大华 SDK 均位于应用镜像内,宿主机不需要另外安装 Java 或 Maven。业务数据直接连接远程 MySQL,Compose 不启动 MySQL 和 Redis 容器。 | |||
| ## 1. 准备配置 | |||
| 在 Ubuntu 项目根目录复制环境变量模板: | |||
| ```bash | |||
| cp .env.example .env | |||
| ``` | |||
| 至少修改 `.env` 中的 `DB_URL`、`DB_USERNAME`、`DB_PASSWORD` 和所有带 `change_me` 的密钥。远程 MySQL 必须允许 Ubuntu 宿主机所在地址连接。NVR 名称、IP、SDK/RTSP/HTTP 端口及账号密码全部维护在远程库的 `basedata_eqpbook_nvr` 表,摄像机维护在 `ivs_camera`,不再使用 `HIK_NVR_*` 环境变量。`ZLM_API_SECRET` 会在容器启动时写入临时配置,避免使用 ZLMediaKit 已禁止的公开示例密钥。若浏览器从局域网其他电脑访问,还要把 `ZLM_HTTP_BASE_URL` 改为 Docker 宿主机可访问的地址,例如: | |||
| ```text | |||
| ZLM_HTTP_BASE_URL=http://192.168.1.20:18081 | |||
| ``` | |||
| 模板默认使用国内 Maven 镜像源。部署环境在海外时,可按 `.env.example` 中的注释切回 Maven Central。FFmpeg 与海康、大华 SDK 均使用 x86_64 版本,在 amd64 宿主机上不需要 QEMU 模拟。 | |||
| ## 2. 构建并启动 | |||
| ```bash | |||
| docker compose build inspect-nvr | |||
| docker compose up -d | |||
| docker compose ps | |||
| docker compose logs -f inspect-nvr | |||
| ``` | |||
| 服务启动后可访问: | |||
| - 应用首页:`http://localhost:8081/` | |||
| - Swagger UI:`http://localhost:8081/swagger-ui/index.html` | |||
| - ZLMediaKit HTTP/HLS:`http://localhost:18081/` | |||
| 停止服务: | |||
| ```bash | |||
| docker compose down | |||
| ``` | |||
| Compose 使用命名卷保存 HLS、应用日志、SDK 日志和抓图数据,普通 `docker compose down` 不会删除这些数据。 | |||
| Compose 不占用宿主机的 `3306`、`6379` 端口。应用通过 `.env` 中的连接参数直接访问远程 MySQL。 | |||
| ## 3. 数据库说明 | |||
| 远程 MySQL 至少需要包含项目 Mapper 使用的以下表: | |||
| - `basedata_eqpbook_nvr` | |||
| - `ivs_camera` | |||
| 缺表时可参考 `deploy/mysql/init/001-basedata-eqpbook-nvr.sql` 和 `docs/sql/ivs_camera.sql`,但正式库应按现有数据库迁移流程执行,不要由容器自动建表。 | |||
| `basedata_eqpbook_nvr` 中可以维护多台 NVR。页面会读取全部启用记录,并按各自 `nvr_code` 的 `#` 后缀关联 `ivs_camera.nvr_code`。每台可操作 NVR 必须配置名称、IP、SDK/RTSP/HTTP 端口及账号密码。可在远程数据库中检查: | |||
| ```sql | |||
| SELECT nvr_id, patrol_device_name, nvr_code, nvr_ip, | |||
| sdk_port, rtsp_port, http_port, username, enabled | |||
| FROM basedata_eqpbook_nvr | |||
| WHERE enabled IS NULL OR enabled <> 0 | |||
| ORDER BY nvr_id; | |||
| ``` | |||
| 当前 Compose 不提供 Redis。项目中少量历史接口仍包含 Redis 缓存调用;不使用这些旧接口时不影响应用启动和当前海康 NVR 页面链路。若后续需要这些接口,应再接入外部 Redis 或移除对应缓存逻辑。 | |||
| ## 4. CPU 架构限制 | |||
| Compose 将应用固定为 `linux/amd64`,并从 `vendor-sdk` 复制海康 HCNetSDK Linux64 与大华 NetSDK Linux64: | |||
| - x86_64 Ubuntu/Linux 服务器可原生构建和运行,不需要安装 QEMU。 | |||
| - x86_64 Windows/macOS 的 Docker Desktop 可直接运行 Linux amd64 容器。 | |||
| - ARM64 服务器不能运行当前镜像;如需 ARM64,应使用对应架构的两套厂商 SDK 另行构建镜像,不能混用 `.so`。 | |||
| ## 5. 常用排查命令 | |||
| ```bash | |||
| docker compose ps | |||
| docker compose logs --tail 200 inspect-nvr | |||
| docker compose exec inspect-nvr java -version | |||
| docker compose exec inspect-nvr ffmpeg -version | |||
| docker compose exec inspect-nvr sh -c 'echo $LD_LIBRARY_PATH' | |||
| ``` | |||
| 应用必须能从容器网络访问 NVR 的 SDK、RTSP 和 HTTP 端口。若宿主机能访问设备但容器不能访问,应优先检查 Docker Desktop/服务器路由、防火墙和设备所在网段,而不是修改 Java 配置。 | |||
| @ -0,0 +1,90 @@ | |||
| # 海康 NVR 一分钟录像下载接口 | |||
| ## 接口 | |||
| `POST /hik/nvr/playback/clips/download` | |||
| 接口以 `centerTime` 为中心,默认下载前 30 秒和后 30 秒,总计 1 分钟。NVR | |||
| 端口、账号和密码全部从 `basedata_eqpbook_nvr` 读取;请求只提交共用设备树中的 | |||
| `nvrIp + channel`。 | |||
| 请求示例: | |||
| ```json | |||
| { | |||
| "nvrIp": "192.168.1.249", | |||
| "channel": 1, | |||
| "centerTime": "2026-07-28 11:55:00" | |||
| } | |||
| ``` | |||
| 该请求对应的录像范围为: | |||
| ```text | |||
| 2026-07-28 11:54:30 - 2026-07-28 11:55:30 | |||
| ``` | |||
| `streamType` 默认是 `1`(主码流);`beforeSeconds` 和 `afterSeconds` 默认都是 | |||
| `30`,也可以显式传入,单侧允许范围为 `0-300` 秒。 | |||
| ## PowerShell 下载命令 | |||
| Windows PowerShell 中的 `curl` 可能是 `Invoke-WebRequest` 的别名,因此需要明确 | |||
| 使用 `curl.exe`: | |||
| ```powershell | |||
| curl.exe --fail-with-body -X POST "http://localhost:28081/hik/nvr/playback/clips/download" ` | |||
| -H "Content-Type: application/json" ` | |||
| --data-raw '{"nvrIp":"192.168.1.249","channel":1,"centerTime":"2026-07-28 11:55:00"}' ` | |||
| --output "hik-clip-20260728-115500.mp4" | |||
| ``` | |||
| 也可以使用 PowerShell 原生命令: | |||
| ```powershell | |||
| $body = @{ | |||
| nvrIp = "192.168.1.249" | |||
| channel = 1 | |||
| centerTime = "2026-07-28 11:55:00" | |||
| } | ConvertTo-Json | |||
| Invoke-WebRequest ` | |||
| -Method Post ` | |||
| -Uri "http://localhost:28081/hik/nvr/playback/clips/download" ` | |||
| -ContentType "application/json" ` | |||
| -Body $body ` | |||
| -OutFile "hik-clip-20260728-115500.mp4" | |||
| ``` | |||
| ## 历史回放页面下载 | |||
| 历史回放页面顶部查询区已增加“下载时刻”和“下载1分钟”,并继续复用外层共用 | |||
| 设备树当前选择的 `nvrIp + channel`: | |||
| 1. 在“回放日期”中选择录像日期。 | |||
| 2. 在“下载时刻(前后各30秒)”中填写需要下载的时刻,例如 `11:55:00`。 | |||
| 3. 点击“下载1分钟”,页面会下载 `11:54:30 - 11:55:30` 的 MP4。 | |||
| 如果“下载时刻”留空,页面会使用当前正在回放的设备时刻作为中心。下载期间不会 | |||
| 停止已有的历史回放会话;同一页面一次只会提交一个下载任务。 | |||
| 目标时间尚未到达时,页面会在发送请求前弹窗提醒;直接调用接口也会被后端拒绝。 | |||
| 目标时间没有录像、录像中间断档或前后不足 30 秒时,页面会弹窗展示后端返回的 | |||
| 具体原因,不会下载空文件或不完整片段。 | |||
| ## 处理规则 | |||
| - 先查询目标一分钟是否由一段连续录像完整覆盖。 | |||
| - 未来中心时刻返回 `400`。 | |||
| - 没有录像时返回 `404`。 | |||
| - 录像中间断档或前后不足 30 秒时返回 `409`,不会生成伪造的一分钟文件。 | |||
| - 海康 SDK 把录像下载到服务端独立临时目录。 | |||
| - FFmpeg 优先保留视频原码流并将音频转换为 AAC,封装成支持快速起播的 MP4。 | |||
| - 音频封装失败时自动降级为纯视频 MP4。 | |||
| - HTTP 下载完成、处理失败或客户端中途断开后,服务端都会清理该请求的临时文件。 | |||
| Swagger UI 中可查看完整字段和错误响应: | |||
| ```text | |||
| http://localhost:28081/swagger-ui/index.html | |||
| ``` | |||
| @ -0,0 +1,156 @@ | |||
| { | |||
| "info": { | |||
| "_postman_id": "7f8d0e7b-4b3d-4af9-9d99-ivs-northbound", | |||
| "name": "inspect-nvr IVS\u5317\u5411\u63a5\u53e3", | |||
| "description": "inspect-nvr\\u9879\\u76eeIVS\\u5317\\u5411\\u63a5\\u53e3\\u96c6\\u5408\\u3002", | |||
| "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" | |||
| }, | |||
| "variable": [ | |||
| {"key": "baseUrl", "value": "http://127.0.0.1:8080", "type": "string"}, | |||
| {"key": "cameraCode", "value": "22078710632508667001", "type": "string"}, | |||
| {"key": "domainCode", "value": "ca837453aa964798abe9ff241c52c386", "type": "string"}, | |||
| {"key": "fullCameraCode", "value": "22078710632508667001#ca837453aa964798abe9ff241c52c386", "type": "string"}, | |||
| {"key": "startTime", "value": "20260715000000", "type": "string"}, | |||
| {"key": "endTime", "value": "20260715235959", "type": "string"}, | |||
| {"key": "fromIndex", "value": "1", "type": "string"}, | |||
| {"key": "toIndex", "value": "10", "type": "string"}, | |||
| {"key": "recordTime", "value": "300", "type": "string"}, | |||
| {"key": "presetIndex", "value": "1", "type": "string"}, | |||
| {"key": "playbackHandle", "value": "1", "type": "string"}, | |||
| {"key": "userName", "value": "admin", "type": "string"}, | |||
| {"key": "password", "value": "ChangeMe123456", "type": "string"}, | |||
| {"key": "taskId", "value": "00000000000000000000000000000000", "type": "string"}, | |||
| {"key": "snapType", "value": "4", "type": "string"} | |||
| ], | |||
| "item": [ | |||
| { | |||
| "name": "00 \u9274\u6743\u4e0e\u4f1a\u8bdd", | |||
| "item": [ | |||
| { | |||
| "name": "\u767b\u5f55", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"userName\\\": \\\"{{userName}}\\\",\\n \\\"password\\\": \\\"{{password}}\\\",\\n \\\"loginLocation\\\": \\\"0\\\"\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/loginInfo/login/v1.0" | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u4f1a\u8bdd\u4fdd\u6d3b", | |||
| "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/common/keepAlive"} | |||
| }, | |||
| { | |||
| "name": "\u4fee\u6539\u9884\u7f6e\u8d26\u53f7\u5bc6\u7801", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"userName\\\": \\\"{{userName}}\\\",\\n \\\"password\\\": \\\"{{password}}\\\"\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/loginInfo/modifyPresetUserPwd/v1.0" | |||
| } | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "name": "01 \u8bbe\u5907\u4e0e\u5b9e\u65f6\u89c6\u9891", | |||
| "item": [ | |||
| {"name": "\u67e5\u8be2\u5b50\u8bbe\u5907\u5217\u8868", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/device/deviceList/v1.0?deviceType=35&fromIndex={{fromIndex}}&toIndex={{toIndex}}&groupMode=0"}}, | |||
| { | |||
| "name": "\u83b7\u53d6\u5b9e\u65f6RTSP\u5730\u5740", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"cameraCode\\\": \\\"{{fullCameraCode}}\\\",\\n \\\"mediaURLParam\\\": {\\n \\\"serviceType\\\": 1,\\n \\\"packProtocolType\\\": 1,\\n \\\"streamType\\\": 1,\\n \\\"protocolType\\\": 2,\\n \\\"transMode\\\": 0,\\n \\\"broadCastType\\\": 0,\\n \\\"clientType\\\": 1\\n }\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/video/rtspurl/v1.0" | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u83b7\u53d6\u5f55\u50cfRTSP\u5730\u5740", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"cameraCode\\\": \\\"{{fullCameraCode}}\\\",\\n \\\"mediaURLParam\\\": {\\n \\\"serviceType\\\": 4,\\n \\\"streamType\\\": 1,\\n \\\"protocolType\\\": 2,\\n \\\"timeSpan\\\": {\\n \\\"startTime\\\": \\\"{{startTime}}\\\",\\n \\\"endTime\\\": \\\"{{endTime}}\\\"\\n }\\n }\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/api/record/url" | |||
| } | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "name": "02 \u5f55\u50cf\u7ba1\u7406", | |||
| "item": [ | |||
| {"name": "\u67e5\u8be2\u5e73\u53f0\u5f55\u50cf", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/recordlist/0/{{cameraCode}}/{{domainCode}}/{{startTime}}/{{endTime}}/{{fromIndex}}/{{toIndex}}"}}, | |||
| {"name": "\u5f00\u59cb\u5e73\u53f0\u5f55\u50cf", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/startplatformrecord/{{recordTime}}/{{cameraCode}}/{{domainCode}}"}}, | |||
| {"name": "\u505c\u6b62\u5e73\u53f0\u5f55\u50cf", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/stopplatformrecord/{{cameraCode}}/{{domainCode}}"}}, | |||
| {"name": "\u505c\u6b62\u5e73\u53f0\u56de\u653e", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/playback/stopplatformplaybackbyip/{{playbackHandle}}"}} | |||
| ] | |||
| }, | |||
| { | |||
| "name": "03 \u9884\u7f6e\u4f4d", | |||
| "item": [ | |||
| { | |||
| "name": "\u67e5\u8be2\u9884\u7f6e\u4f4d\u5217\u8868", | |||
| "request": { | |||
| "method": "GET", | |||
| "header": [], | |||
| "url": "{{baseUrl}}/device/ptzpresetlist/{{cameraCode}}/{{domainCode}}", | |||
| "description": "cameraCode is before #; domainCode is after #." | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u4e91\u53f0\u63a7\u5236/\u8c03\u7528\u9884\u7f6e\u4f4d", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"cameraCode\\\": \\\"{{fullCameraCode}}\\\",\\n \\\"controlCode\\\": 11,\\n \\\"controlPara1\\\": \\\"{{presetIndex}}\\\",\\n \\\"controlPara2\\\": \\\"\\\"\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/device/ptzcontrol" | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u65b0\u589e\u9884\u7f6e\u4f4d\uff08\u4fdd\u5b58\u5f53\u524d\u4f4d\u7f6e\uff09", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"cameraCode\\\": \\\"{{fullCameraCode}}\\\",\\n \\\"presetName\\\": \\\"\\u73b0\\u573a\\u6d4b\\u8bd5\\u9884\\u7f6e\\u4f4d\\\",\\n \\\"focusSwitch\\\": 0\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/ptz/presetposition/v1.0" | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u4fee\u6539\u9884\u7f6e\u4f4d\u540d\u79f0", | |||
| "request": { | |||
| "method": "PUT", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"cameraCode\\\": \\\"{{fullCameraCode}}\\\",\\n \\\"ptzPresetInfo\\\": {\\n \\\"presetIndex\\\": {{presetIndex}},\\n \\\"presetName\\\": \\\"\\u8bbe\\u5907\\u5168\\u666f\\\",\\n \\\"focusSwitch\\\": 0\\n }\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/ptz/presetposition/v1.0" | |||
| } | |||
| }, | |||
| {"name": "\u5220\u9664\u9884\u7f6e\u4f4d", "request": {"method": "DELETE", "header": [], "url": "{{baseUrl}}/ptz/presetposition/{{cameraCode}}/{{domainCode}}/{{presetIndex}}/v1.0"}} | |||
| ] | |||
| }, | |||
| { | |||
| "name": "04 \u6293\u56fe", | |||
| "item": [ | |||
| {"name": "\u521b\u5efa\u5e73\u53f0\u6293\u56fe\u4efb\u52a1", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/platformSnapshot/{{cameraCode}}/{{domainCode}}"}}, | |||
| {"name": "\u65e7\u7248\u521b\u5efa\u5e73\u53f0\u6293\u56fe", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/platformSnapshot2/{{cameraCode}}/{{domainCode}}"}}, | |||
| { | |||
| "name": "\u6309\u4efb\u52a1ID\u67e5\u8be2\u6293\u56fe\u5217\u8868", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"domainCode\\\": \\\"{{domainCode}}\\\",\\n \\\"cameraCode\\\": \\\"{{cameraCode}}\\\",\\n \\\"taskID\\\": \\\"{{taskId}}\\\"\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/platform/snapshotList" | |||
| } | |||
| }, | |||
| { | |||
| "name": "\u6309\u660e\u7ec6\u6761\u4ef6\u67e5\u8be2\u6293\u56fe\u5217\u8868", | |||
| "request": { | |||
| "method": "POST", | |||
| "header": [{"key": "Content-Type", "value": "application/json"}], | |||
| "body": {"mode": "raw", "raw": "{\\n \\\"domainCode\\\": \\\"{{domainCode}}\\\",\\n \\\"cameraCode\\\": \\\"{{cameraCode}}\\\",\\n \\\"snapshotDetailInfo\\\": {\\n \\\"startTime\\\": \\\"{{startTime}}\\\",\\n \\\"endTime\\\": \\\"{{endTime}}\\\",\\n \\\"fromIndex\\\": 1,\\n \\\"toIndex\\\": 10,\\n \\\"snapType\\\": {{snapType}}\\n }\\n}", "options": {"raw": {"language": "json"}}}, | |||
| "url": "{{baseUrl}}/platform/snapshotList2" | |||
| } | |||
| }, | |||
| {"name": "\u4e0b\u8f7d\u5e73\u53f0\u6293\u56fe\u56fe\u7247", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/snapshot/{{taskId}}"}}, | |||
| {"name": "\u67e5\u8be2\u6293\u56fe\u5217\u8868\uff08\u65e7\u7248\u8def\u5f84\uff09", "request": {"method": "GET", "header": [], "url": "{{baseUrl}}/platform/snapshotlist/{{cameraCode}}/{{domainCode}}/{{startTime}}/{{endTime}}/{{fromIndex}}/{{toIndex}}/{{snapType}}"}} | |||
| ] | |||
| } | |||
| ] | |||
| } | |||
| @ -0,0 +1,7 @@ | |||
| -- 为 NVR 增加 IVS 设备编码。 | |||
| -- nvr_code 格式:17 位数字前缀 + '#' + 32 位十六进制随机串。 | |||
| ALTER TABLE `basedata_eqpbook_nvr` | |||
| ADD COLUMN `nvr_code` varchar(64) DEFAULT NULL COMMENT 'IVS NVR 编码' AFTER `vendor`; | |||
| ALTER TABLE `basedata_eqpbook_nvr` | |||
| ADD UNIQUE KEY `uk_basedata_eqpbook_nvr_nvr_code` (`nvr_code`); | |||
| @ -0,0 +1,38 @@ | |||
| -- IVS 摄像头信息表 | |||
| -- 说明:使用 code 作为 IVS 设备唯一编码;脚本可重复执行,不会覆盖已有数据。 | |||
| CREATE TABLE IF NOT EXISTS `ivs_camera` ( | |||
| `code` varchar(128) NOT NULL COMMENT '摄像头编码', | |||
| `name` varchar(255) DEFAULT NULL COMMENT '摄像头名称', | |||
| `dev_group_code` varchar(128) DEFAULT NULL COMMENT '设备分组编码', | |||
| `parent_code` varchar(128) DEFAULT NULL COMMENT '上级设备编码', | |||
| `domain_code` varchar(128) DEFAULT NULL COMMENT '域编码', | |||
| `dev_model_type` varchar(128) DEFAULT NULL COMMENT '设备型号', | |||
| `vendor_type` varchar(64) DEFAULT NULL COMMENT '厂商类型', | |||
| `dev_form_type` int DEFAULT NULL COMMENT '设备形态类型', | |||
| `type` int DEFAULT NULL COMMENT '设备类型', | |||
| `camera_location` varchar(255) DEFAULT NULL COMMENT '摄像头位置', | |||
| `camera_status` tinyint DEFAULT NULL COMMENT '摄像头状态', | |||
| `status` tinyint DEFAULT NULL COMMENT '设备状态', | |||
| `net_type` tinyint DEFAULT NULL COMMENT '网络类型', | |||
| `support_intelligent` tinyint DEFAULT NULL COMMENT '是否支持智能能力', | |||
| `enable_voice` tinyint DEFAULT NULL COMMENT '是否启用语音', | |||
| `nvr_code` varchar(128) DEFAULT NULL COMMENT '所属 NVR 编码', | |||
| `dev_create_time` varchar(14) DEFAULT NULL COMMENT '设备创建时间,格式 yyyyMMddHHmmss', | |||
| `is_ex_domain` tinyint DEFAULT NULL COMMENT '是否外域设备', | |||
| `dev_ip` varchar(45) DEFAULT NULL COMMENT '设备 IP 地址', | |||
| `longitude` varchar(64) DEFAULT NULL COMMENT '经度', | |||
| `latitude` varchar(64) DEFAULT NULL COMMENT '纬度', | |||
| `height` decimal(10,3) DEFAULT NULL COMMENT '安装高度', | |||
| `reserve` varchar(500) DEFAULT NULL COMMENT '预留字段', | |||
| `custom_fields` text COMMENT '自定义字段', | |||
| `function_type` varchar(255) DEFAULT NULL COMMENT '功能类型', | |||
| `monitor_direction` varchar(32) DEFAULT NULL COMMENT '监控方向', | |||
| `owner_aps_id` varchar(128) DEFAULT NULL COMMENT '所属 APS 编码', | |||
| `security_level_code_string` varchar(32) DEFAULT NULL COMMENT '安全等级编码', | |||
| `encryption_status` tinyint DEFAULT NULL COMMENT '加密状态', | |||
| `signature_status` tinyint DEFAULT NULL COMMENT '签名状态', | |||
| PRIMARY KEY (`code`), | |||
| KEY `idx_ivs_camera_nvr_code` (`nvr_code`), | |||
| KEY `idx_ivs_camera_domain_code` (`domain_code`), | |||
| KEY `idx_ivs_camera_dev_ip` (`dev_ip`) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='IVS 摄像头信息'; | |||
| @ -0,0 +1,171 @@ | |||
| # API Documentation Coverage Implementation Plan | |||
| > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | |||
| **Goal:** Give all 35 Spring MVC routes Chinese module names, operation descriptions, parameter documentation, response documentation, and readable core request/response schemas in Swagger UI. | |||
| **Architecture:** Keep documentation next to the code it describes: controller-level `@Tag`, handler-level `@Operation` and `@ApiResponse`, parameter-level `@Parameter`, and DTO-level `@Schema`. Add a reflection-based coverage test so future routes cannot silently omit documentation, then verify the generated `/v3/api-docs` at runtime. | |||
| **Tech Stack:** Java 8, Spring Boot 2.3.4, Springdoc OpenAPI 1.8.0, Swagger annotations 2.2.20, JUnit 4.13 | |||
| --- | |||
| ### Task 1: Add documentation coverage tests | |||
| **Files:** | |||
| - Create: `src/test/java/com/inspect/nvr/config/ApiDocumentationCoverageTest.java` | |||
| - [ ] **Step 1: Add a reflection test for all controllers and routes** | |||
| The test must scan `CameraController`, `DahuaController`, `FileController`, `InfraredController`, `IvsCameraController`, `IvsServerController`, and `Test`. A handler is any declared method carrying `GetMapping`, `PostMapping`, `PutMapping`, `DeleteMapping`, `PatchMapping`, or method-level `RequestMapping`. | |||
| For every controller, assert a non-empty Chinese `@Tag`. For every handler, assert a non-empty `@Operation.summary` and at least one `@ApiResponse`. Assert the total is exactly 35. | |||
| - [ ] **Step 2: Add a core DTO schema test** | |||
| Assert that these API-facing models have a non-empty class-level `@Schema.description`: `Camera`, `NvrInfo`, `TemperatureData`, `InfraPictureInfo`, `InfraredBox`, `InfraredInfo`, `PtzControlParam`, `PtzControlResult`, `SnapshotCommandParam`, `SnapshotCommandResult`, `SnapshotInfoListParam`, `SnapshotInfoListResult`, `IvsPresetListView`, `Login`, `IvsResult`, `IvsVideoRtspVo`, `IvsVideoRtspView`, `IvsDevChanListVo`, `ResultEntity`, and `FileReturn`. | |||
| - [ ] **Step 3: Run the focused test and verify RED** | |||
| ```powershell | |||
| $env:JAVA_HOME='C:\Program Files\Java\jdk1.8.0_191' | |||
| $env:Path="$env:JAVA_HOME\bin;$env:Path" | |||
| mvn -Dtest=ApiDocumentationCoverageTest test | |||
| ``` | |||
| Expected: failures report missing `@Tag`, `@Operation`, `@ApiResponse`, and `@Schema` documentation. | |||
| ### Task 2: Document all controller modules and operations | |||
| **Files:** | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/CameraController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/DahuaController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/FileController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/InfraredController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/IvsCameraController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/IvsServerController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/controller/Test.java` | |||
| - [ ] **Step 1: Add controller tags** | |||
| Use these exact module names: | |||
| | Controller | Tag name | Description | | |||
| |---|---|---| | |||
| | `CameraController` | `通用摄像机` | `统一封装海康和大华摄像机的预置位与红外测温能力` | | |||
| | `DahuaController` | `大华设备` | `大华 NVR 登录、测温、云台控制和抓图接口` | | |||
| | `FileController` | `文件管理` | `文件上传接口` | | |||
| | `InfraredController` | `红外测温` | `海康红外测温、抓图、图片分析和 CSV 下载接口` | | |||
| | `IvsCameraController` | `IVS摄像机` | `IVS 平台预置位、抓图任务和图片下载接口` | | |||
| | `IvsServerController` | `IVS联调/模拟` | `IVS 协议联调接口;当前包含固定或模拟响应,请勿作为生产业务结果` | | |||
| | `Test` | `联调测试` | `FTPS 等联调测试接口,请勿在生产环境调用` | | |||
| - [ ] **Step 2: Add operation and response documentation** | |||
| Use the following exact summaries for the 35 routes; each handler also receives a successful `@ApiResponse(responseCode = "200", description = "请求成功")`, with more specific descriptions for binary responses and login/test routes. | |||
| | Route | Summary | | |||
| |---|---| | |||
| | `/hw/cameraYzwHikVision` | `查询海康摄像机预置位` | | |||
| | `/hw/cameraHong` | `统一读取红外测温数据` | | |||
| | `/hw/test` | `测试异步任务超时处理` | | |||
| | `/dahua/login` | `登录大华 NVR` | | |||
| | `/dahua/StartRemote` | `读取大华红外测温数据` | | |||
| | `/dahua/cameraControl` | `控制大华云台跳转预置位` | | |||
| | `/dahua/Picture` | `抓取大华摄像机图片` | | |||
| | `/file/upload` | `上传文件` | | |||
| | `/login` | `登录海康 NVR` | | |||
| | `/cameraHong` | `读取海康红外测温数据` | | |||
| | `/cameraAngleJump` | `控制海康云台跳转预置位` | | |||
| | `/camera` | `抓取海康 NVR 图片` | | |||
| | `/cameraHk` | `抓图并计算红外温度` | | |||
| | `/ir/capturePicture` | `设置红外图片分析参数` | | |||
| | `/ir/picAnalyse` | `提交红外图片算法分析` | | |||
| | `/device/radiometry-temper/{cameraCode}` | `查询测温规则结果(模拟)` | | |||
| | `/ir/downloadCsv` | `下载红外温度 CSV` | | |||
| | `/ir/addBoxData` | `添加红外分析框(模拟)` | | |||
| | `/ir/deleteBoxData` | `删除红外分析框(模拟)` | | |||
| | `/ir/selectBoxData` | `查询红外分析框(模拟)` | | |||
| | `/ir/status` | `查询红外流关闭状态` | | |||
| | `/device/ptzpresetlist/{cameraCode}/{domainCode}` | `查询 IVS 摄像机预置位` | | |||
| | `/device/ptzcontrol` | `控制 IVS 摄像机云台并测温` | | |||
| | `/platform/platformSnapshot/{cameraCode}/{domainCode}` | `创建平台抓图任务` | | |||
| | `/platform/snapshotList` | `查询平台抓图结果` | | |||
| | `/downloadfile_old` | `下载抓图文件(旧版)` | | |||
| | `/downloadfile` | `下载抓图文件` | | |||
| | `/digest` | `检测 Digest 抓图是否可用` | | |||
| | `/common/keepAlive2` | `IVS心跳检测(模拟)` | | |||
| | `/loginInfo/login2/v1.0` | `IVS登录(模拟)` | | |||
| | `/device/ptzpresetlist2/{cameraCode}/{domainCode}` | `查询IVS预置位(模拟)` | | |||
| | `/video/rtspurl2/v1.0` | `获取RTSP播放地址(模拟)` | | |||
| | `/device/deviceList2/v1.0` | `查询IVS设备列表(模拟)` | | |||
| | `/hw/test2` | `测试FTPS批量下载` | | |||
| | `/hw/test3` | `测试FTPS文件读取` | | |||
| - [ ] **Step 3: Document non-body parameters and binary responses** | |||
| Add `@Parameter` descriptions and safe examples to every `@PathVariable` and `@RequestParam`. Mark `filesessionid` as a temporary image session identifier and never include credentials in examples. Document `/dahua/Picture`, `/downloadfile_old`, and `/downloadfile` as `image/jpeg`; document `/ir/downloadCsv` as `text/csv`; document `/file/upload` parameters as filename and multipart file. | |||
| - [ ] **Step 4: Run the controller coverage test** | |||
| ```powershell | |||
| mvn -Dtest=ApiDocumentationCoverageTest test | |||
| ``` | |||
| Expected: route count remains 35 and controller/handler coverage assertions pass; DTO assertions may still fail until Task 3. | |||
| ### Task 3: Document API-facing schemas | |||
| **Files:** | |||
| - Modify the 20 DTO classes listed in Task 1 under `src/main/java/com/inspect/nvr/domain/**`. | |||
| - [ ] **Step 1: Add class-level schema descriptions** | |||
| Add `@Schema(description = "...")` to each listed class, using Chinese descriptions that match its role: device login, camera operation, temperature result, IVS command/result, snapshot command/result, or generic response. | |||
| - [ ] **Step 2: Add field descriptions and safe examples** | |||
| Annotate API-visible fields with `@Schema(description = "...", example = "...")`. Use documentation-only examples such as `192.168.1.100`, `8000`, `admin`, `camera-001`, `domain-001`, and `1`; do not include real passwords, RTSP URLs, FTP credentials, or internal production addresses. Password examples must be omitted or use `writeOnly = true` without a value. | |||
| - [ ] **Step 3: Run the coverage test and verify GREEN** | |||
| ```powershell | |||
| mvn -Dtest=ApiDocumentationCoverageTest test | |||
| ``` | |||
| Expected: all documentation coverage tests pass with zero failures and zero errors. | |||
| ### Task 4: Preserve parameter names and validate generated OpenAPI | |||
| **Files:** | |||
| - Modify: `pom.xml` | |||
| - [ ] **Step 1: Preserve Java method parameter names** | |||
| Add `<parameters>true</parameters>` to the existing `maven-compiler-plugin` configuration without changing source or target level. | |||
| - [ ] **Step 2: Run all tests** | |||
| ```powershell | |||
| mvn test -DskipTests=false | |||
| ``` | |||
| Expected: all 3,505+ main sources compile and both Swagger tests pass. | |||
| - [ ] **Step 3: Start the application on a temporary port and inspect the document** | |||
| ```powershell | |||
| mvn spring-boot:run '-Dspring-boot.run.arguments=--server.port=18080' | |||
| ``` | |||
| Query `http://127.0.0.1:18080/v3/api-docs` and verify: | |||
| - exactly 35 paths; | |||
| - seven expected Chinese tags; | |||
| - every operation has a Chinese summary and at least one response; | |||
| - request bodies reference documented schemas; | |||
| - binary endpoints advertise `image/jpeg` or `text/csv`. | |||
| - [ ] **Step 4: Review final local-only changes** | |||
| Run scoped `git diff --check` and `git status --short`. Do not stage or commit any file. Confirm the user's pre-existing staged file list is unchanged. | |||
| @ -0,0 +1,48 @@ | |||
| # Hikvision NVR RTSP Playback Compatibility Fix Implementation Plan | |||
| > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | |||
| **Goal:** Make the playback-search endpoint return an RTSP URL that the target Hikvision NVR can actually play while retaining SDK channel `33` for recording lookup. | |||
| **Architecture:** Extend the existing Hikvision login cache value with immutable device channel metadata read from `NET_DVR_DEVICEINFO_V40`. The playback service uses that metadata to map SDK channel numbers to RTSP display-channel numbers, then passes the resolved RTSP channel to a pure URL builder. RTSP query timestamps keep Beijing clock digits because the target firmware was verified to interpret them as device-local time. | |||
| **Tech Stack:** Java 8, Spring Boot 2.3.4, HCNetSDK/JNA, Caffeine, JUnit 4, Mockito, Maven. | |||
| **Execution constraint:** Modify the local `master` worktree only. Do not stage or commit any file. | |||
| --- | |||
| ## File map | |||
| - Create `src/main/java/com/inspect/nvr/service/HikLoginSession.java` — immutable login handle and channel-layout mapping. | |||
| - Modify `src/main/java/com/inspect/nvr/service/HikLoginService.java` — cache `HikLoginSession` and capture login device metadata while preserving existing `login(NvrInfo)` callers. | |||
| - Modify `src/main/java/com/inspect/nvr/hik/service/HikNvrPlaybackService.java` — use the login session for the SDK handle and resolved RTSP channel. | |||
| - Modify `src/main/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilder.java` — accept an RTSP channel explicitly and retain Beijing clock digits. | |||
| - Create `src/test/java/com/inspect/nvr/service/HikLoginSessionTest.java` — pure channel mapping coverage. | |||
| - Create `src/test/java/com/inspect/nvr/service/HikLoginServiceTest.java` — verify SDK device metadata is captured into the cached session. | |||
| - Modify `src/test/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilderTest.java` — reproduce `3301` and UTC-conversion regressions. | |||
| - Modify `src/test/java/com/inspect/nvr/hik/service/HikNvrPlaybackServiceTest.java` — prove SDK search still uses `33` while the URL uses `101`. | |||
| ## Task 1: Lock down corrected RTSP behavior | |||
| - [x] Add a URL-builder test that calls `build(request, 1, start, end)` for SDK channel `33` and expects `/Streaming/tracks/101?starttime=20260713T120000Z&endtime=20260713T130000Z`. | |||
| - [x] Add mapping tests asserting pure-NVR `33 -> 1`, pure-NVR `34 -> 2`, hybrid-DVR `33 -> 17`, and analog-channel ordinal mapping. | |||
| - [x] Add a login-service test whose mocked `NET_DVR_Login_V40` returns `byChanNum=0`, `byIPChanNum=8`, and `byStartDChan=33`, then assert the returned session maps `33 -> 1`. | |||
| - [x] Add a playback-service test asserting `NET_DVR_FILECOND_V40.lChannel == 33` while the response URL contains `/Streaming/tracks/101?`. | |||
| - [x] Run `mvn -Dtest=HikPlaybackUrlBuilderTest,HikLoginSessionTest,HikLoginServiceTest,HikNvrPlaybackServiceTest test` and confirm RED failures are caused by the missing session API, explicit RTSP-channel builder signature, and old UTC behavior. | |||
| ## Task 2: Implement the minimal production fix | |||
| - [x] Implement `HikLoginSession` with the existing user ID plus unsigned analog/digital channel counts and starts. Map a covered digital SDK channel after the analog channel count; map a covered analog SDK channel to its ordinal; otherwise return the original channel as a compatibility fallback. | |||
| - [x] Change `HikLoginService` to cache `HikLoginSession`, add `loginSession(NvrInfo)`, and keep `login(NvrInfo)` delegating to it so existing callers retain the same API. | |||
| - [x] Change `HikNvrPlaybackService` to use `loginSession`, keep the original request channel in `NET_DVR_FILECOND_V40`, resolve the RTSP channel once, and pass it into every generated record URL. | |||
| - [x] Change `HikPlaybackUrlBuilder` to calculate `trackId` from the explicit RTSP channel and format the supplied `LocalDateTime` directly as `yyyyMMdd'T'HHmmss'Z'` without converting to UTC. | |||
| - [x] Re-run the four focused test classes and confirm all are GREEN. | |||
| ## Task 3: Verify regression safety and the real device | |||
| - [x] Run `mvn test -DskipTests=false` and confirm zero failures/errors. | |||
| - [x] Restart only the user-controlled application if explicitly permitted; otherwise use a temporary port to validate the endpoint without stopping the existing 8080 process. | |||
| - [x] POST the known `channel=33` query and verify the response URL contains track `101` and Beijing digits `120000Z` to `130000Z`, with credentials redacted from diagnostic output. | |||
| - [x] Probe that returned URL with VLC using the default RTSP transport and require `PLAY 200 OK` plus decoded H.264 NAL units. | |||
| - [x] Run scoped `git diff --check`, inspect `git status --short`, and confirm no new staging or commit occurred. | |||
| @ -0,0 +1,341 @@ | |||
| # Hikvision NVR Playback Search Implementation Plan | |||
| > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | |||
| **Goal:** Add a documented HTTP endpoint that queries a Hikvision NVR for actual recording coverage and returns Beijing-time timestamp ranges plus credential-bearing RTSP playback URLs. | |||
| **Architecture:** A controller under `com.inspect.nvr.hik` delegates to a focused service. The service reuses `HikLoginService`, queries recordings with `NET_DVR_FindFile_V40`/`NET_DVR_FindNextFile_V40`, clips and merges actual file intervals, and delegates URL construction to a pure `HikPlaybackUrlBuilder`. Controller advice converts validation failures to HTTP 400 and device/SDK failures to HTTP 502. | |||
| **Tech Stack:** Java 8, Spring Boot 2.3.4, Hikvision HCNetSDK through JNA, Lombok, springdoc-openapi 1.8.0, JUnit 4, Mockito, Spring MockMvc. | |||
| **Execution constraint:** Keep all changes local. Do not stage or commit any file. | |||
| --- | |||
| ## File map | |||
| **Create:** | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackRequest.java` — HTTP input and Swagger field contract. | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackRecord.java` — one actual continuous range and its RTSP URL. | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackResponse.java` — successful search response. | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackErrorResponse.java` — parameter or SDK error response. | |||
| - `src/main/java/com/inspect/nvr/hik/exception/HikNvrPlaybackException.java` — status and SDK error carrier. | |||
| - `src/main/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilder.java` — pure Beijing-to-UTC RTSP URL builder. | |||
| - `src/main/java/com/inspect/nvr/hik/service/HikNvrPlaybackService.java` — validation, SDK query and interval processing. | |||
| - `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackController.java` — `POST /hik/nvr/playback/search`. | |||
| - `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackExceptionHandler.java` — scoped HTTP error mapping. | |||
| - `src/test/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilderTest.java` — URL and timestamp tests. | |||
| - `src/test/java/com/inspect/nvr/hik/service/HikNvrPlaybackServiceTest.java` — SDK state and interval tests. | |||
| - `src/test/java/com/inspect/nvr/hik/controller/HikNvrPlaybackControllerTest.java` — HTTP response tests. | |||
| **Modify:** | |||
| - `src/test/java/com/inspect/nvr/config/ApiDocumentationCoverageTest.java` — include the new controller, handler and schemas. | |||
| ## Task 1: RTSP URL contract and domain models | |||
| **Files:** | |||
| - Test: `src/test/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilderTest.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackRequest.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackRecord.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackResponse.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackErrorResponse.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikPlaybackUrlBuilder.java` | |||
| - [ ] **Step 1: Write the failing URL builder test** | |||
| Create a JUnit 4 test that fixes the time-zone, track and credential-encoding behavior: | |||
| ```java | |||
| @Test | |||
| public void buildsMainStreamPlaybackUrlUsingUtcQueryTimes() { | |||
| HikNvrPlaybackRequest request = request("admin", "p@ss word", 1, 1); | |||
| String url = builder.build( | |||
| request, | |||
| LocalDateTime.of(2026, 7, 13, 12, 30, 0), | |||
| LocalDateTime.of(2026, 7, 13, 13, 0, 0)); | |||
| assertEquals("rtsp://admin:p%40ss%20word@192.168.1.100:554/Streaming/tracks/101" | |||
| + "?starttime=20260713T043000Z&endtime=20260713T050000Z", url); | |||
| } | |||
| @Test | |||
| public void buildsSubStreamTrackForNvrChannelThirtyThree() { | |||
| HikNvrPlaybackRequest request = request("operator", "secret", 33, 2); | |||
| String url = builder.build( | |||
| request, | |||
| LocalDateTime.of(2026, 7, 13, 12, 0, 0), | |||
| LocalDateTime.of(2026, 7, 13, 13, 0, 0)); | |||
| assertTrue(url.contains("/Streaming/tracks/3302?")); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: Run the URL test and verify RED** | |||
| Run: | |||
| ```powershell | |||
| $env:JAVA_HOME='C:\Program Files\Java\jdk1.8.0_191' | |||
| mvn -Dtest=HikPlaybackUrlBuilderTest test | |||
| ``` | |||
| Expected: test compilation fails because `HikPlaybackUrlBuilder` and the new domain classes do not exist. | |||
| - [ ] **Step 3: Implement the four documented domain models** | |||
| Use Lombok `@Data`, `@Builder`, `@NoArgsConstructor`, `@AllArgsConstructor` and class/field `@Schema` descriptions. The request fields are exactly: | |||
| ```java | |||
| private String nvrIp; | |||
| private Integer sdkPort; | |||
| private Integer rtspPort; | |||
| private Integer channel; | |||
| private Integer streamType; | |||
| private String username; | |||
| @Schema(description = "NVR登录密码", accessMode = Schema.AccessMode.WRITE_ONLY) | |||
| private String password; | |||
| private String startTime; | |||
| private String endTime; | |||
| ``` | |||
| `HikNvrPlaybackRecord` contains `List<String> timeRange` and `String rtspUrl`. `HikNvrPlaybackResponse` contains `int code`, `String message`, `boolean hasRecord`, and `List<HikNvrPlaybackRecord> records`, with a factory that always returns code `0` and a non-null list. `HikNvrPlaybackErrorResponse` contains `int code` and `String message`. | |||
| - [ ] **Step 4: Implement the pure URL builder** | |||
| Implement `HikPlaybackUrlBuilder.build(request, start, end)` with: | |||
| ```java | |||
| private static final ZoneId BEIJING_ZONE = ZoneId.of("Asia/Shanghai"); | |||
| private static final DateTimeFormatter RTSP_TIME = | |||
| DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'").withZone(ZoneOffset.UTC); | |||
| int trackId = request.getChannel() * 100 + request.getStreamType(); | |||
| String utcStart = RTSP_TIME.format(start.atZone(BEIJING_ZONE).toInstant()); | |||
| String utcEnd = RTSP_TIME.format(end.atZone(BEIJING_ZONE).toInstant()); | |||
| ``` | |||
| Percent-encode every UTF-8 user-info byte except ASCII letters, digits, `-`, `.`, `_`, and `~`. Assemble the URL without logging it. | |||
| - [ ] **Step 5: Run the URL test and verify GREEN** | |||
| Run `mvn -Dtest=HikPlaybackUrlBuilderTest test`. | |||
| Expected: both tests pass with zero failures. | |||
| ## Task 2: SDK recording search and interval merging | |||
| **Files:** | |||
| - Test: `src/test/java/com/inspect/nvr/hik/service/HikNvrPlaybackServiceTest.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/exception/HikNvrPlaybackException.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikNvrPlaybackService.java` | |||
| - [ ] **Step 1: Write failing service tests for partial coverage, gaps and cleanup** | |||
| Use Mockito to return a login ID of `7`, find handle `88`, and populate `NET_DVR_FINDDATA_V40` outputs. The main behavior test must feed these file intervals: | |||
| ```text | |||
| 2026-07-13 12:20:00 - 12:40:00 | |||
| 2026-07-13 12:30:00 - 12:50:00 | |||
| 2026-07-13 12:55:00 - 13:10:00 | |||
| ``` | |||
| For a request from `12:00:00` to `13:00:00`, assert exactly: | |||
| ```java | |||
| assertEquals(Arrays.asList("20260713122000", "20260713125000"), | |||
| response.getRecords().get(0).getTimeRange()); | |||
| assertEquals(Arrays.asList("20260713125500", "20260713130000"), | |||
| response.getRecords().get(1).getTimeRange()); | |||
| assertTrue(response.isHasRecord()); | |||
| verify(hcNetSDK).NET_DVR_FindClose_V30(88); | |||
| ``` | |||
| Add separate tests that assert: | |||
| - `NET_DVR_FILE_NOFIND` produces `hasRecord=false` and an empty list. | |||
| - `NET_DVR_ISFINDING` followed by success is retried and returns data. | |||
| - `NET_DVR_FILE_EXCEPTION` throws `HikNvrPlaybackException` with the value returned by `NET_DVR_GetLastError` and still closes handle `88`. | |||
| - an invalid end time is rejected before `HikLoginService.login` is invoked. | |||
| - [ ] **Step 2: Run the service test and verify RED** | |||
| Run `mvn -Dtest=HikNvrPlaybackServiceTest test`. | |||
| Expected: test compilation fails because `HikNvrPlaybackService` and `HikNvrPlaybackException` do not exist. | |||
| - [ ] **Step 3: Implement validation and SDK condition creation** | |||
| `HikNvrPlaybackService.search` must: | |||
| ```java | |||
| LocalDateTime requestStart = parseBeijing(request.getStartTime()); | |||
| LocalDateTime requestEnd = parseBeijing(request.getEndTime()); | |||
| if (!requestEnd.isAfter(requestStart)) { | |||
| throw HikNvrPlaybackException.badRequest("结束时间必须晚于开始时间"); | |||
| } | |||
| ``` | |||
| Validate nonblank NVR IP, username and password; ports in `1..65535`; channel greater than zero; stream type in `{1, 2}`; and reject URL delimiter characters in the NVR address. Build `NvrInfo`, call `HikLoginService.login`, and create a `NET_DVR_FILECOND_V40` with: | |||
| ```java | |||
| condition.lChannel = request.getChannel(); | |||
| condition.dwFileType = 0xff; | |||
| condition.dwIsLocked = 0xff; | |||
| condition.byFindType = 0; | |||
| condition.byQuickSearch = 0; | |||
| condition.byStreamType = request.getStreamType() == 1 ? (byte) 3 : (byte) 1; | |||
| condition.struStartTime = toSdkTime(requestStart); | |||
| condition.struStopTime = toSdkTime(requestEnd); | |||
| condition.write(); | |||
| ``` | |||
| - [ ] **Step 4: Implement the bounded SDK result loop and guaranteed close** | |||
| Call `NET_DVR_FindFile_V40`; a negative handle becomes an HTTP-502 exception with `NET_DVR_GetLastError()`. In a `try/finally`, loop over `NET_DVR_FindNextFile_V40`: | |||
| ```java | |||
| switch (status) { | |||
| case HCNetSDK.NET_DVR_FILE_SUCCESS: | |||
| rawRanges.add(rangeFrom(findData)); | |||
| findingAttempts = 0; | |||
| break; | |||
| case HCNetSDK.NET_DVR_ISFINDING: | |||
| waitForSearch(++findingAttempts); | |||
| break; | |||
| case HCNetSDK.NET_DVR_FILE_NOFIND: | |||
| case HCNetSDK.NET_DVR_NOMOREFILE: | |||
| return buildResponse(request, requestStart, requestEnd, rawRanges); | |||
| default: | |||
| throw sdkFailure("查询海康NVR录像失败", hcNetSDK.NET_DVR_GetLastError()); | |||
| } | |||
| ``` | |||
| Limit `NET_DVR_ISFINDING` to 100 attempts with a 50 ms wait, restore the interrupt flag when interrupted, and close with `NET_DVR_FindClose_V30(findHandle)` in `finally`. | |||
| - [ ] **Step 5: Implement clipping, sorting and exact-adjacency merging** | |||
| For each returned interval, use `max(fileStart, requestStart)` and `min(fileEnd, requestEnd)`, discard empty intervals, sort by start, and merge only when `next.start <= current.end`. Format response pairs using `yyyyMMddHHmmss`, and build one RTSP URL per merged interval. | |||
| - [ ] **Step 6: Run service and URL tests and verify GREEN** | |||
| Run: | |||
| ```powershell | |||
| mvn -Dtest=HikNvrPlaybackServiceTest,HikPlaybackUrlBuilderTest test | |||
| ``` | |||
| Expected: all service and URL tests pass; Mockito verifies the find handle is closed. | |||
| ## Task 3: HTTP endpoint, error mapping and Swagger coverage | |||
| **Files:** | |||
| - Test: `src/test/java/com/inspect/nvr/hik/controller/HikNvrPlaybackControllerTest.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackController.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackExceptionHandler.java` | |||
| - Modify: `src/test/java/com/inspect/nvr/config/ApiDocumentationCoverageTest.java` | |||
| - [ ] **Step 1: Write failing MockMvc tests** | |||
| Configure standalone MockMvc with the controller and advice. Assert a valid POST returns status 200 and JSON paths: | |||
| ```java | |||
| andExpect(jsonPath("$.hasRecord").value(true)) | |||
| andExpect(jsonPath("$.records[0].timeRange[0]").value("20260713123000")) | |||
| andExpect(jsonPath("$.records[0].timeRange[1]").value("20260713130000")) | |||
| andExpect(jsonPath("$.records[0].rtspUrl").value(expectedUrl)); | |||
| ``` | |||
| Make the mocked service throw `HikNvrPlaybackException.badRequest("结束时间必须晚于开始时间")` and assert HTTP 400. Make it throw an SDK exception with code `7` and assert HTTP 502 plus `$.code == 7`. | |||
| - [ ] **Step 2: Run the controller test and verify RED** | |||
| Run `mvn -Dtest=HikNvrPlaybackControllerTest test`. | |||
| Expected: test compilation fails because the controller and handler do not exist. | |||
| - [ ] **Step 3: Implement the documented controller and scoped advice** | |||
| Create a controller with: | |||
| ```java | |||
| @RestController | |||
| @RequestMapping("/hik/nvr/playback") | |||
| @Tag(name = "海康NVR回放", description = "查询海康NVR历史录像并生成RTSP回放地址") | |||
| public class HikNvrPlaybackController { | |||
| @PostMapping("/search") | |||
| public ResponseEntity<HikNvrPlaybackResponse> search( | |||
| @io.swagger.v3.oas.annotations.parameters.RequestBody( | |||
| description = "海康NVR历史录像查询参数", required = true) | |||
| @RequestBody HikNvrPlaybackRequest request) { | |||
| return ResponseEntity.ok(playbackService.search(request)); | |||
| } | |||
| } | |||
| ``` | |||
| Add Chinese `@Operation` and `@ApiResponses` for 200, 400 and 502 with concrete response schemas. The advice must use `@RestControllerAdvice(assignableTypes = HikNvrPlaybackController.class)` and return `HikNvrPlaybackErrorResponse` without logging credentials or RTSP URLs. | |||
| - [ ] **Step 4: Run the controller test and verify GREEN** | |||
| Run `mvn -Dtest=HikNvrPlaybackControllerTest test`. | |||
| Expected: all controller tests pass. | |||
| - [ ] **Step 5: Extend documentation coverage test and verify RED** | |||
| Change the scan root to `com.inspect.nvr`, add `com.inspect.nvr.hik.controller.HikNvrPlaybackController` to expected controllers, change expected handler count from 35 to 36, and add the four new API models to `API_MODEL_TYPES`. Run: | |||
| ```powershell | |||
| mvn -Dtest=ApiDocumentationCoverageTest test | |||
| ``` | |||
| Expected before all schema annotations are complete: failure identifies any missing model or field description/example. Complete only the reported Swagger metadata until the test passes. Password must remain `WRITE_ONLY` with no example. | |||
| - [ ] **Step 6: Verify documentation coverage GREEN** | |||
| Run `mvn -Dtest=ApiDocumentationCoverageTest test`. | |||
| Expected: all coverage assertions pass with 8 controllers and 36 handler methods. | |||
| ## Task 4: Full verification and local handoff | |||
| **Files:** | |||
| - Verify all files created or modified in Tasks 1–3. | |||
| - [ ] **Step 1: Run the full Maven test suite** | |||
| Run: | |||
| ```powershell | |||
| $env:JAVA_HOME='C:\Program Files\Java\jdk1.8.0_191' | |||
| $env:Path="$env:JAVA_HOME\bin;$env:Path" | |||
| mvn test -DskipTests=false | |||
| ``` | |||
| Expected: build success with all existing and new tests passing. | |||
| - [ ] **Step 2: Run scoped whitespace and sensitive logging checks** | |||
| Run: | |||
| ```powershell | |||
| git diff --check -- src/main/java/com/inspect/nvr/hik src/test/java/com/inspect/nvr/hik src/test/java/com/inspect/nvr/config/ApiDocumentationCoverageTest.java | |||
| rg -n 'log\..*(password|rtspUrl)|toString\(\).*HikNvrPlaybackRequest' src/main/java/com/inspect/nvr/hik | |||
| ``` | |||
| Expected: `git diff --check` exits 0 and the sensitive logging search returns no matches. | |||
| - [ ] **Step 3: Verify existing staged files were not changed** | |||
| Capture `git diff --cached --name-only` and compare it with the pre-task staged list. Do not run `git add`, `git commit`, branch creation, reset or checkout. | |||
| - [ ] **Step 4: Report the endpoint contract and limits** | |||
| Report the local endpoint, example request/response, test count, and the important limit that the URL contains credentials because the user explicitly requested it. State that no files were committed or newly staged. | |||
| @ -0,0 +1,408 @@ | |||
| # 海康 NVR SDK 受控 HLS 回放 Implementation Plan | |||
| > **For agentic workers:** REQUIRED SUB-SKILL: Use `executing-plans` to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | |||
| **Goal:** 在当前 Spring 服务中提供由海康 SDK 实际控制的 HLS 历史回放,支持跳转、暂停/恢复和 1/2/4/8 倍速。 | |||
| **Architecture:** 服务通过 `NET_DVR_PlayBackByTime_V40` 建立唯一可控回放句柄,从 `NET_DVR_SetPlayBackESCallBack` 获取 H.264 裸帧,异步写入本机 FFmpeg 标准输入,FFmpeg 推 RTMP 到本机 Docker ZLMediaKit,ZLM 输出 HLS。会话控制直接调用同一 SDK 句柄;定位时切换到新的 HLS 流代次。 | |||
| **Tech Stack:** Java 8、Spring Boot 2.3、JNA/HCNetSDK、FFmpeg、Docker Desktop、ZLMediaKit、JUnit 4、Mockito。 | |||
| **User constraint:** 在当前 `master` 本地直接修改,不创建 worktree、不暂存、不提交。 | |||
| --- | |||
| ### Task 1: 部署本机媒体运行环境 | |||
| **Files:** | |||
| - Create: `deploy/zlmediakit/docker-compose.yml` | |||
| - Create: `deploy/zlmediakit/config.ini` | |||
| - Modify: `.gitignore` | |||
| - External: `C:\tools\ffmpeg\bin\ffmpeg.exe` | |||
| - [ ] **Step 1: 增加 Docker 与端口配置的断言说明** | |||
| 写入 compose,唯一暴露端口为: | |||
| ```yaml | |||
| services: | |||
| zlmediakit: | |||
| image: zlmediakit/zlmediakit:master | |||
| container_name: inspect-nvr-zlmediakit | |||
| restart: unless-stopped | |||
| ports: | |||
| - "127.0.0.1:18081:80" | |||
| - "127.0.0.1:1935:1935" | |||
| ``` | |||
| - [ ] **Step 2: 启动 Docker Desktop 并验证失败前置条件** | |||
| Run: `docker info --format '{{.ServerVersion}}'` | |||
| Expected: Docker server version is printed; if it is unavailable, start Docker Desktop and retry. | |||
| - [ ] **Step 3: 下载 FFmpeg 到本机工具目录** | |||
| 从 Windows FFmpeg 发行包解压到 `C:\tools\ffmpeg`,验证: | |||
| Run: `C:\tools\ffmpeg\bin\ffmpeg.exe -version` | |||
| Expected: command prints an FFmpeg version and exits with code 0. | |||
| - [ ] **Step 4: 写入最小 ZLM 配置** | |||
| `config.ini` 必须至少包含: | |||
| ```ini | |||
| [http] | |||
| port=80 | |||
| allow_cross_domains=1 | |||
| [protocol] | |||
| enable_hls=1 | |||
| enable_audio=0 | |||
| hls_demand=0 | |||
| [hls] | |||
| segDur=2 | |||
| segNum=3 | |||
| segRetain=5 | |||
| ``` | |||
| compose 必须将本文件挂载为 `/opt/media/conf/config.ini:ro`;该镜像从 `/opt/media/bin` 启动 `MediaServer` 并以 `../conf/config.ini` 作为配置文件。 | |||
| - [ ] **Step 5: 启动 ZLM 并验证 HTTP 与 RTMP 端口** | |||
| Run: `docker compose -f deploy/zlmediakit/docker-compose.yml up -d` | |||
| Expected: `inspect-nvr-zlmediakit` is running and `Test-NetConnection 127.0.0.1 -Port 18081` plus `Test-NetConnection 127.0.0.1 -Port 1935` return `TcpTestSucceeded : True`. | |||
| - [ ] **Step 6: 忽略本机凭据与运行时文件** | |||
| 在 `.gitignore` 增加: | |||
| ```gitignore | |||
| /deploy/zlmediakit/.env | |||
| /deploy/zlmediakit/log/ | |||
| /deploy/zlmediakit/www/ | |||
| ``` | |||
| 验证 `git status --short` 中不出现本机 `.env`、日志或 HLS 切片。 | |||
| ### Task 2: 修正并覆盖 HCNetSDK 回放控制 JNA 契约 | |||
| **Files:** | |||
| - Modify: `src/main/java/com/inspect/nvr/hikVision/utils/jna/HCNetSDK.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/service/HikSdkPlaybackGatewayTest.java` | |||
| - [ ] **Step 1: 写出会失败的控制码与结构测试** | |||
| ```java | |||
| @Test | |||
| public void exposesAbsoluteSeekControlAndStructuredPacketLayout() { | |||
| assertEquals(26, HCNetSDK.NET_DVR_PLAYSETTIME); | |||
| assertTrue(new HCNetSDK.NET_DVR_PACKET_INFO_EX().size() > 80); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认当前契约缺失** | |||
| Run: `mvn -Dtest=HikSdkPlaybackGatewayTest#exposesAbsoluteSeekControlAndStructuredPacketLayout test` | |||
| Expected: compilation failure because `NET_DVR_PLAYSETTIME` is absent, or assertion failure because the packet structure is represented as a JNA union. | |||
| - [ ] **Step 3: 进行最小 JNA 修复** | |||
| 在控制常量区加入: | |||
| ```java | |||
| public static final int NET_DVR_PLAYSETTIME = 26; | |||
| ``` | |||
| 将 `NET_DVR_PACKET_INFO_EX` 从 `Union` 改为 `HCStructure`,保留字段顺序和所有字段;它是 SDK 回调返回的顺序结构体,不是 union。 | |||
| - [ ] **Step 4: 运行单测确认修复** | |||
| Run: `mvn -Dtest=HikSdkPlaybackGatewayTest#exposesAbsoluteSeekControlAndStructuredPacketLayout test` | |||
| Expected: PASS. | |||
| ### Task 3: 定义 HLS 会话领域模型与 URL/控制映射 | |||
| **Files:** | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackHlsSession.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackHlsControlRequest.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackHlsControlAction.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackHlsStatus.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikPlaybackHlsUrlBuilder.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/service/HikPlaybackHlsUrlBuilderTest.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/domain/HikNvrPlaybackHlsControlRequestTest.java` | |||
| - [ ] **Step 1: 写出 HLS 地址和合法速度的失败测试** | |||
| ```java | |||
| @Test | |||
| public void buildsLocalHlsUrlForStreamGeneration() { | |||
| assertEquals("http://127.0.0.1:18081/playback/a1-2/hls.m3u8", | |||
| builder.hlsUrl("a1", 2)); | |||
| } | |||
| @Test | |||
| public void rejectsUnsupportedPlaybackSpeed() { | |||
| assertFalse(HikNvrPlaybackHlsControlRequest.isSupportedSpeed(3)); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认失败** | |||
| Run: `mvn -Dtest=HikPlaybackHlsUrlBuilderTest,HikNvrPlaybackHlsControlRequestTest test` | |||
| Expected: compilation failure because the classes do not exist. | |||
| - [ ] **Step 3: 实现最小领域模型** | |||
| `HikNvrPlaybackHlsControlAction` 只包含 `PAUSE`、`RESUME`、`SET_SPEED`、`SEEK`、`STOP`。`isSupportedSpeed` 只接受 1、2、4、8。HLS 地址固定为: | |||
| ```java | |||
| return httpBaseUrl + "/playback/" + sessionId + "-" + generation + "/hls.m3u8"; | |||
| ``` | |||
| - [ ] **Step 4: 运行测试确认通过** | |||
| Run: `mvn -Dtest=HikPlaybackHlsUrlBuilderTest,HikNvrPlaybackHlsControlRequestTest test` | |||
| Expected: PASS. | |||
| ### Task 4: 以测试驱动实现异步 H.264 到 FFmpeg/RTMP 的帧桥 | |||
| **Files:** | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikPlaybackFrame.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikPlaybackFrameSink.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikFfmpegProcessFactory.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikFfmpegH264Publisher.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/service/HikFfmpegH264PublisherTest.java` | |||
| - [ ] **Step 1: 写出非阻塞入队、I 帧优先和 FFmpeg 命令的失败测试** | |||
| ```java | |||
| @Test | |||
| public void usesPipeInputAndPublishesToSessionRtmpUrl() throws Exception { | |||
| publisher.start(); | |||
| assertThat(processFactory.command()).contains("pipe:0"); | |||
| assertThat(processFactory.command()).contains("rtmp://127.0.0.1:1935/playback/a1-1"); | |||
| } | |||
| @Test | |||
| public void preservesIFrameWhenQueueIsFull() { | |||
| // fill bounded queue with B/P frames, then offer an I frame | |||
| assertTrue(publisher.offer(frameOfType(1))); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认失败** | |||
| Run: `mvn -Dtest=HikFfmpegH264PublisherTest test` | |||
| Expected: compilation failure because the publisher does not exist. | |||
| - [ ] **Step 3: 实现最小帧桥** | |||
| FFmpeg 参数必须包含: | |||
| ```text | |||
| -hide_banner -loglevel warning -fflags +genpts -use_wallclock_as_timestamps 1 | |||
| -f h264 -i pipe:0 -c:v copy -an -f flv rtmp://127.0.0.1:1935/playback/{streamId} | |||
| ``` | |||
| JNA 回调只调用 `offer`;写线程把 `byte[]` 写入 `process.getOutputStream()`。关闭时停止接收、关闭 stdin、等待进程有限时间后强制销毁。 | |||
| - [ ] **Step 4: 运行帧桥单测** | |||
| Run: `mvn -Dtest=HikFfmpegH264PublisherTest test` | |||
| Expected: PASS. | |||
| ### Task 5: 以测试驱动实现海康 SDK 回放句柄和控制 | |||
| **Files:** | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikSdkPlaybackGateway.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikSdkPlaybackHandle.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikSdkPlaybackGatewayImpl.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/hik/exception/HikNvrPlaybackException.java` | |||
| - Modify: `src/test/java/com/inspect/nvr/hik/service/HikSdkPlaybackGatewayTest.java` | |||
| - [ ] **Step 1: 写出 VOD 创建、启动、倍速和定位的失败测试** | |||
| ```java | |||
| @Test | |||
| public void startsSdkPlaybackWithOriginalSdkChannelAndActualRange() { | |||
| gateway.open(request, start, end, sink); | |||
| verify(sdk).NET_DVR_PlayBackByTime_V40(eq(7), vodCaptor.capture()); | |||
| assertEquals(33, vodCaptor.getValue().struIDInfo.dwChannel); | |||
| verify(sdk).NET_DVR_PlayBackControl_V40(eq(91), eq(HCNetSDK.NET_DVR_PLAYSTART), | |||
| isNull(), eq(0), isNull(), any(IntByReference.class)); | |||
| } | |||
| @Test | |||
| public void mapsSpeedEightToNormalThenThreeFastCommands() { | |||
| handle.setSpeed(8); | |||
| verifyControl(HCNetSDK.NET_DVR_PLAYNORMAL, 1); | |||
| verifyControl(HCNetSDK.NET_DVR_PLAYFAST, 3); | |||
| } | |||
| @Test | |||
| public void seeksUsingNetDvrTimePointer() { | |||
| handle.seek(LocalDateTime.of(2026, 7, 13, 12, 45)); | |||
| verify(sdk).NET_DVR_PlayBackControl_V40(eq(91), eq(26), any(Pointer.class), | |||
| eq(new HCNetSDK.NET_DVR_TIME().size()), isNull(), any(IntByReference.class)); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认失败** | |||
| Run: `mvn -Dtest=HikSdkPlaybackGatewayTest test` | |||
| Expected: compilation failure because the gateway and handle do not exist. | |||
| - [ ] **Step 3: 实现 SDK 网关** | |||
| `open` 必须:登录缓存中获取 `userId`;填充 `NET_DVR_VOD_PARA.dwSize`、`struIDInfo.dwSize`、实际 SDK 通道、北京时间起止时间、主/子码流;调用 `NET_DVR_PlayBackByTime_V40`;保存回调强引用;注册 ES 回调;最后调用 `NET_DVR_PLAYSTART`。 | |||
| 回调必须复制 `pPacketBuffer` 中 `dwPacketSize` 字节;只将视频 I/B/P 包写入当前 `AtomicReference<HikPlaybackFrameSink>`,忽略文件头、音频和私有包。`close` 必须先断开 sink,再 `NET_DVR_StopPlayBack`。 | |||
| - [ ] **Step 4: 运行 SDK 网关测试** | |||
| Run: `mvn -Dtest=HikSdkPlaybackGatewayTest test` | |||
| Expected: PASS. | |||
| ### Task 6: 实现会话编排、定位代次切换和自动清理 | |||
| **Files:** | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikNvrPlaybackHlsService.java` | |||
| - Create: `src/main/java/com/inspect/nvr/hik/service/HikNvrPlaybackHlsSessionRegistry.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/service/HikNvrPlaybackHlsServiceTest.java` | |||
| - [ ] **Step 1: 写出创建、定位、倍速、删除的失败测试** | |||
| ```java | |||
| @Test | |||
| public void createsSessionFromOneActualRecordingRangeWithoutReturningRtspUrl() { | |||
| HikNvrPlaybackHlsSession session = service.create(request); | |||
| assertEquals(HikNvrPlaybackHlsStatus.PLAYING, session.getStatus()); | |||
| assertFalse(serialized(session).contains("rtsp://")); | |||
| } | |||
| @Test | |||
| public void seekCreatesNextGenerationAndReturnsNewHlsUrl() { | |||
| HikNvrPlaybackHlsSession moved = service.control(id, seek("2026-07-13 12:45:00")); | |||
| assertEquals(2, moved.getGeneration()); | |||
| assertTrue(moved.getHlsUrl().contains("-2/hls.m3u8")); | |||
| } | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认失败** | |||
| Run: `mvn -Dtest=HikNvrPlaybackHlsServiceTest test` | |||
| Expected: compilation failure because the service and registry do not exist. | |||
| - [ ] **Step 3: 实现会话服务** | |||
| 创建流程:调用已有 `HikNvrPlaybackService.search`;空记录抛 404;多个记录抛 409;将唯一实际区间解析为 `LocalDateTime`;创建 publisher 和 SDK handle;登记会话。 | |||
| 定位流程:暂停旧句柄,停止旧 publisher,启动新代次 publisher,切换句柄 sink,调用 SDK `PLAYSETTIME`;失败时关闭旧句柄并以目标时间重建;恢复目标速度;更新 HLS URL 与状态。自动清理使用当前已有 `@EnableScheduling`,过期时调用同一个 `stop` 路径。 | |||
| - [ ] **Step 4: 运行会话服务测试** | |||
| Run: `mvn -Dtest=HikNvrPlaybackHlsServiceTest test` | |||
| Expected: PASS. | |||
| ### Task 7: 暴露 Swagger 完整标注的 HLS REST 接口 | |||
| **Files:** | |||
| - Create: `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackHlsController.java` | |||
| - Modify: `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackExceptionHandler.java` | |||
| - Create: `src/test/java/com/inspect/nvr/hik/controller/HikNvrPlaybackHlsControllerTest.java` | |||
| - Modify: `src/test/java/com/inspect/nvr/config/ApiDocumentationCoverageTest.java` | |||
| - [ ] **Step 1: 写出 MVC 失败测试** | |||
| ```java | |||
| mockMvc.perform(post("/hik/nvr/playback/hls/sessions") | |||
| .contentType(MediaType.APPLICATION_JSON).content(REQUEST_JSON)) | |||
| .andExpect(status().isOk()) | |||
| .andExpect(jsonPath("$.hlsUrl").value("http://127.0.0.1:18081/playback/a1-1/hls.m3u8")) | |||
| .andExpect(jsonPath("$.rtspUrl").doesNotExist()); | |||
| mockMvc.perform(post("/hik/nvr/playback/hls/sessions/a1/controls") | |||
| .contentType(MediaType.APPLICATION_JSON) | |||
| .content("{\"action\":\"SET_SPEED\",\"speed\":8}")) | |||
| .andExpect(status().isOk()) | |||
| .andExpect(jsonPath("$.speed").value(8)); | |||
| ``` | |||
| - [ ] **Step 2: 运行测试确认失败** | |||
| Run: `mvn -Dtest=HikNvrPlaybackHlsControllerTest test` | |||
| Expected: compilation failure because controller does not exist. | |||
| - [ ] **Step 3: 实现控制器和错误映射** | |||
| 暴露: | |||
| ```text | |||
| POST /hik/nvr/playback/hls/sessions | |||
| GET /hik/nvr/playback/hls/sessions/{sessionId} | |||
| POST /hik/nvr/playback/hls/sessions/{sessionId}/controls | |||
| DELETE /hik/nvr/playback/hls/sessions/{sessionId} | |||
| ``` | |||
| 所有请求、响应、枚举加中文 `@Schema`、`@Operation` 和错误码说明。`HikNvrPlaybackException` 增加 `notFound`、`conflict` 和 `mediaFailure` 工厂方法,统一由既有 ControllerAdvice 返回。 | |||
| - [ ] **Step 4: 运行 MVC 和 Swagger 覆盖测试** | |||
| Run: `mvn -Dtest=HikNvrPlaybackHlsControllerTest,ApiDocumentationCoverageTest test` | |||
| Expected: PASS. | |||
| ### Task 8: 运行时验证与实际 NVR 验证 | |||
| **Files:** | |||
| - Modify: `docs/superpowers/specs/2026-07-13-hik-nvr-sdk-controlled-hls-design.md`(仅记录实际验证结论) | |||
| - [ ] **Step 1: 运行完整 Java 测试套件** | |||
| Run: `mvn test -DskipTests=false` | |||
| Expected: all tests pass with zero failures and zero errors. | |||
| - [ ] **Step 2: 用临时端口启动服务** | |||
| Run: set `HIK_NVR_PLAYBACK_HLS_FFMPEG_PATH`, then start Spring on `18080`. | |||
| Expected: application starts without affecting the user-owned process on port 8080. | |||
| - [ ] **Step 3: 使用已验证的 NVR 实际录像区间创建 HLS 会话** | |||
| Run: call `POST /hik/nvr/playback/hls/sessions` with a known continuous Beijing-time recording interval. | |||
| Expected: `status=PLAYING`, no RTSP credential in response, and `hlsUrl` returns an m3u8 playlist after ZLM receives the stream. | |||
| - [ ] **Step 4: 验证控制行为** | |||
| 依次调用 `PAUSE`、`RESUME`、`SET_SPEED` 2/4/8、`SEEK` 到区间内时间,并在每一步检查 SDK 控制返回值、会话状态与 HLS URL/playlist;定位后确认 `generation` 增加且前端必须加载返回的新 URL。 | |||
| - [ ] **Step 5: 验证清理** | |||
| Run: `DELETE /hik/nvr/playback/hls/sessions/{sessionId}`. | |||
| Expected: SDK `NET_DVR_StopPlayBack` 被调用、FFmpeg 进程退出、ZLM 不再持续接收 RTMP,查询该会话返回 404。 | |||
| - [ ] **Step 6: 核对 Git 边界** | |||
| Run: `git status --short` and `git diff --cached --name-status`. | |||
| Expected: no staging or commit action by this work; preserve all pre-existing user changes. | |||
| @ -0,0 +1,61 @@ | |||
| # 海康 NVR HLS 回放控制台实施计划 | |||
| > 本计划对应 `docs/superpowers/specs/2026-07-14-hik-nvr-playback-console-design.md`。所有修改留在本地,不提交 Git。 | |||
| ## 1. 新增页面配置模型 | |||
| **文件:** | |||
| - `src/main/java/com/inspect/nvr/hik/config/HikNvrPlaybackUiProperties.java` | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackUiConfig.java` | |||
| - `src/main/java/com/inspect/nvr/hik/domain/HikNvrPlaybackUiSessionRequest.java` | |||
| **实现:** | |||
| - 绑定 `hik.playback.ui`,保存 NVR 地址、端口、账号、密码、默认通道和设备树通道; | |||
| - `toPublicConfig()` 只返回页面所需非敏感字段; | |||
| - `toPlaybackRequest()` 将页面请求与后端固定配置合并,拒绝缺少密码或基础连接参数的配置; | |||
| - 请求 DTO 只允许 `channel`、`streamType`、`startTime`、`endTime`。 | |||
| ## 2. 新增页面接口 | |||
| **文件:** `src/main/java/com/inspect/nvr/hik/controller/HikNvrPlaybackUiController.java` | |||
| **实现:** | |||
| - `GET /hik/nvr/playback/hls/ui/config` 返回安全的页面配置; | |||
| - `POST /hik/nvr/playback/hls/ui/sessions` 合并固定配置后调用现有 HLS 服务; | |||
| - 复用已有异常处理和会话控制接口,不复制回放状态机; | |||
| - 增加 OpenAPI 中文说明和请求示例。 | |||
| ## 3. 增加运行配置 | |||
| **文件:** `src/main/resources/application.yml` | |||
| 增加 `hik.playback.ui` 默认项,地址默认使用当前 NVR `192.168.1.249`,密码默认空并支持环境变量覆盖;增加可配置的设备分组和通道列表。 | |||
| ## 4. 实现播放器页面 | |||
| **文件:** `src/main/resources/static/playback.html` | |||
| **实现:** | |||
| - 工业监控台视觉:冷白网格背景、海军蓝文字、蓝色状态色、卡片和时间轨道; | |||
| - 设备树、日期/时间查询、视频舞台、状态徽标、录像区间轨道、控制栏和全屏; | |||
| - 使用 hls.js CDN 或浏览器原生 HLS 播放; | |||
| - 创建会话后轮询 `STARTING/PLAYING`,只在 HLS 就绪后加载 m3u8; | |||
| - 控制按钮调用暂停、恢复、1/2/4/8 倍速、SEEK 和删除接口; | |||
| - 处理 generation 变化、旧会话清理、错误提示、音量和时间轴点击跳转; | |||
| - 不在任何 HTML、脚本或请求体中出现 NVR 密码。 | |||
| ## 5. 测试与验证 | |||
| **文件:** `src/test/java/com/inspect/nvr/hik/controller/HikNvrPlaybackUiControllerTest.java` | |||
| - 验证配置响应不包含 `password`; | |||
| - 验证页面创建请求只向现有服务传入后端固定凭据和页面时间参数; | |||
| - 验证空密码配置返回明确的 400; | |||
| - 运行 `mvn test`,确认既有 62 个测试及新增测试通过; | |||
| - 使用 Maven 打包后检查 `target/classes/static/playback.html`; | |||
| - 若本地应用可访问,使用 HTTP 请求验证配置接口、静态页面和缺少密码时的错误响应。 | |||
| @ -0,0 +1,176 @@ | |||
| # 海康 NVR 历史录像查询与 RTSP 回放接口设计 | |||
| ## 目标 | |||
| 在 `com.inspect.nvr.hik` 下新增海康 NVR 历史录像查询接口。调用方传入 NVR 登录信息、通道、码流类型以及北京时间范围,服务端通过海康网络 SDK 查询该范围内实际存在的录像,返回实际连续录像区间及每个区间对应的 RTSP 回放地址。 | |||
| 本功能只查询录像并生成回放地址,不代理、转码或下载视频流。 | |||
| ## HTTP 接口 | |||
| - 方法:`POST` | |||
| - 路径:`/hik/nvr/playback/search` | |||
| - Content-Type:`application/json` | |||
| - Swagger 分组:`海康NVR回放` | |||
| ### 请求体 | |||
| ```json | |||
| { | |||
| "nvrIp": "192.168.1.100", | |||
| "sdkPort": 8000, | |||
| "rtspPort": 554, | |||
| "channel": 1, | |||
| "streamType": 1, | |||
| "username": "admin", | |||
| "password": "123456", | |||
| "startTime": "2026-07-13 12:00:00", | |||
| "endTime": "2026-07-13 13:00:00" | |||
| } | |||
| ``` | |||
| 字段规则: | |||
| - `nvrIp`、`username`、`password` 必填。 | |||
| - `sdkPort` 范围为 1~65535,用于 SDK 登录,通常为 8000。 | |||
| - `rtspPort` 范围为 1~65535,通常为 554。 | |||
| - `channel` 必须大于 0,使用海康 NVR 实际 SDK 通道号。 | |||
| - `streamType` 取值 1 或 2;1 表示主码流,2 表示子码流。 | |||
| - `startTime`、`endTime` 格式固定为 `yyyy-MM-dd HH:mm:ss`,语义固定为 `Asia/Shanghai`。 | |||
| - `endTime` 必须晚于 `startTime`。 | |||
| ### 成功响应 | |||
| 有录像: | |||
| ```json | |||
| { | |||
| "code": 0, | |||
| "message": "success", | |||
| "hasRecord": true, | |||
| "records": [ | |||
| { | |||
| "timeRange": [ | |||
| "20260713123000", | |||
| "20260713130000" | |||
| ], | |||
| "rtspUrl": "rtsp://admin:123456@192.168.1.100:554/Streaming/tracks/101?starttime=20260713T043000Z&endtime=20260713T050000Z" | |||
| } | |||
| ] | |||
| } | |||
| ``` | |||
| 无录像: | |||
| ```json | |||
| { | |||
| "code": 0, | |||
| "message": "success", | |||
| "hasRecord": false, | |||
| "records": [] | |||
| } | |||
| ``` | |||
| `timeRange` 始终包含两个北京时间字符串,顺序为 `[开始时间, 结束时间]`,格式固定为 `yyyyMMddHHmmss`。 | |||
| ## 组件划分 | |||
| 代码全部位于 `src/main/java/com/inspect/nvr/hik`: | |||
| - `controller/HikNvrPlaybackController`:接收 HTTP 请求、调用服务并返回响应。 | |||
| - `domain/HikNvrPlaybackRequest`:请求模型和 Swagger 字段说明;密码标记为只写字段。 | |||
| - `domain/HikNvrPlaybackResponse`:查询状态、是否存在录像和录像区间列表。 | |||
| - `domain/HikNvrPlaybackRecord`:单个连续录像区间及 RTSP 地址。 | |||
| - `service/HikNvrPlaybackService`:参数校验、SDK 查询、区间裁剪与合并、SDK 通道到 RTSP 通道的衔接。 | |||
| - `service/HikPlaybackUrlBuilder`:使用已解析的 RTSP 通道号和设备本地北京时间生成回放 URL。 | |||
| - `com.inspect.nvr.service.HikLoginSession`:保存登录句柄及设备返回的模拟/数字通道布局,并提供 SDK 通道到 RTSP 通道的映射。 | |||
| - `exception/HikNvrPlaybackException`:携带 SDK 错误码或参数错误信息。 | |||
| - `controller/HikNvrPlaybackExceptionHandler`:将参数错误转换为 HTTP 400,将 NVR 登录或查询错误转换为 HTTP 502。 | |||
| 服务复用项目现有 `HikLoginService` 管理海康登录句柄,不重复创建独立登录缓存。登录缓存的值从单独的用户句柄扩展为 `HikLoginSession`,缓存时长、IP 键和登出策略保持不变。 | |||
| ## SDK 查询流程 | |||
| 1. 校验请求参数并按北京时间解析查询范围。 | |||
| 2. 构造 `NvrInfo`,通过 `HikLoginService.loginSession` 获取复用的登录句柄和设备通道布局。 | |||
| 3. 构造 `NET_DVR_FILECOND_V40`: | |||
| - `lChannel` 使用请求通道号。 | |||
| - `dwFileType=0xff`,查询所有录像类型。 | |||
| - `dwIsLocked=0xff`,查询锁定和未锁定录像。 | |||
| - `byFindType=0`,查询普通录像卷。 | |||
| - `byQuickSearch=0`,获取完整文件信息。 | |||
| - 主码流请求映射为 SDK `byStreamType=3`,子码流请求映射为 SDK `byStreamType=1`。 | |||
| - 开始和结束时间按设备本地北京时间填写 `NET_DVR_TIME`。 | |||
| 4. 调用 `NET_DVR_FindFile_V40` 获取查询句柄;返回负数时读取 `NET_DVR_GetLastError` 并报错。 | |||
| 5. 循环调用 `NET_DVR_FindNextFile_V40`: | |||
| - `NET_DVR_FILE_SUCCESS`:读取录像文件起止时间。 | |||
| - `NET_DVR_ISFINDING`:短暂等待后继续,整体设置有限等待次数,避免请求无限阻塞。 | |||
| - `NET_DVR_FILE_NOFIND` 或 `NET_DVR_NOMOREFILE`:正常结束查询。 | |||
| - `NET_DVR_FILE_EXCEPTION` 或 `-1`:读取 SDK 错误码并报错。 | |||
| 6. 在 `finally` 中调用 `NET_DVR_FindClose_V30` 关闭查询句柄。 | |||
| ## 时间区间处理 | |||
| - 将每个 SDK 录像区间裁剪到用户请求区间内,避免返回请求范围之外的时间。 | |||
| - 丢弃裁剪后为空的区间。 | |||
| - 按开始时间排序。 | |||
| - 仅合并重叠或首尾完全相接的区间;存在真实时间间隔时分别返回,不能掩盖录像缺失。 | |||
| - 返回时间使用北京时间 `yyyyMMddHHmmss`。 | |||
| - RTSP 参数保留设备本地北京时间数字,格式为 `yyyyMMdd'T'HHmmss'Z'`。目标 NVR 固件实测把参数数字按设备本地时间解释;将北京时间转换为 UTC 会建立会话但收不到录像数据。 | |||
| 例如用户查询 `12:00:00~13:00:00`,NVR 只存在 `12:30:00~13:00:00`,返回: | |||
| ```json | |||
| "timeRange": ["20260713123000", "20260713130000"] | |||
| ``` | |||
| ## RTSP URL | |||
| 录像查询继续使用 SDK 通道号。RTSP 轨道使用设备展示通道序号,两者不能直接混用。登录返回的 `NET_DVR_DEVICEINFO_V30` 提供模拟通道数、模拟起始通道、数字通道数和数字起始通道,映射规则为: | |||
| ```text | |||
| 数字通道:rtspChannel = analogChannelCount + (sdkChannel - digitalStartChannel) + 1 | |||
| 模拟通道:rtspChannel = (sdkChannel - analogStartChannel) + 1 | |||
| trackId = rtspChannel * 100 + streamType | |||
| ``` | |||
| 例如纯 NVR 的模拟通道数为 `0`、数字起始通道为 `33`,则 SDK 通道 `33` 映射为 RTSP 通道 `1`,主码流轨道为 `101`。如果设备通道元数据无法覆盖请求通道,则保留原通道号作为兼容回退。 | |||
| 地址格式: | |||
| ```text | |||
| rtsp://<编码后的用户名>:<编码后的密码>@<NVR地址>:<RTSP端口>/Streaming/tracks/<trackId>?starttime=<北京时间开始>&endtime=<北京时间结束> | |||
| ``` | |||
| 账号和密码按照 URL user-info 规则进行百分号编码。服务端日志禁止输出完整请求对象、密码或最终 RTSP URL。 | |||
| ## 错误处理 | |||
| - 请求字段缺失、端口或通道非法、时间格式错误、结束时间不晚于开始时间:HTTP 400。 | |||
| - SDK 登录失败、NVR 离线、通道错误、权限不足、查询失败或查询超时:HTTP 502,响应中包含 SDK 错误码和中文错误信息。 | |||
| - 查询成功但没有录像:HTTP 200,`hasRecord=false`,`records=[]`。 | |||
| - 查询句柄关闭失败只记录不包含敏感信息的警告,不覆盖原始查询结果或异常。 | |||
| ## 测试 | |||
| 测试先于生产代码编写,覆盖: | |||
| - 北京时间解析及 RTSP 设备本地时间格式化。 | |||
| - 纯 NVR 和混合 DVR 的 SDK 通道到 RTSP 通道映射。 | |||
| - 主、子码流轨道号和 SDK 码流类型映射。 | |||
| - 用户名、密码特殊字符的安全编码。 | |||
| - 查询范围内只有部分录像时,返回裁剪后的完整时间戳。 | |||
| - 重叠和首尾相接区间被合并,存在时间缺口的区间保持分离。 | |||
| - 无录像返回空列表。 | |||
| - SDK 查找中状态能够有限重试。 | |||
| - 登录、查询和通道错误返回对应错误码。 | |||
| - 成功、无录像及异常路径都关闭查询句柄。 | |||
| - Swagger 覆盖测试更新为包含新增接口、参数和响应模型。 | |||
| ## 非目标 | |||
| - 不转码为 HLS、FLV 或 MP4。 | |||
| - 不在服务端代理 RTSP 码流。 | |||
| - 不下载录像文件。 | |||
| - 不修改现有海康登录缓存的过期时长、键和登出策略。 | |||
| - 不提交或暂存任何文件。 | |||
| @ -0,0 +1,124 @@ | |||
| # 海康 NVR SDK 受控 HLS 回放设计 | |||
| **状态:** 用户已确认直接实现;所有变更保留在当前本地工作区,不提交。 | |||
| ## 目标 | |||
| 让本机浏览器以 HLS 播放海康 NVR 的历史录像,并由服务端控制同一个海康 SDK 回放句柄,支持: | |||
| - 指定北京时间开始、结束时间创建回放; | |||
| - 暂停、恢复、正常速度; | |||
| - 真正调用 NVR 回放控制实现 2 倍、4 倍、8 倍; | |||
| - 跳转到任意录像时间点; | |||
| - 不向浏览器返回 NVR RTSP 地址、NVR 密码或媒体服务控制密钥。 | |||
| ## 约束与结论 | |||
| ZLMediaKit 自行拉取 RTSP 时会创建一条独立的 NVR RTSP 会话,无法让 Spring 服务通过 `NET_DVR_PlayBackControl_V40` 控制那条会话。因此不能使用“ZLM 直接拉 NVR RTSP”作为可控回放链路。 | |||
| 本实现采用 SDK 回放句柄作为唯一的控制源:SDK 的裸 H.264 帧回调写入本机 FFmpeg,FFmpeg 推 RTMP 给本机 ZLMediaKit,ZLMediaKit 再生成 HLS。这样暂停、快放、定位都作用于实际向浏览器输送帧数据的回放句柄。 | |||
| 当前已验证的 NVR 历史回放是 H.264。第一版只支持标准 H.264 视频;H.265 或私有/加密码流会在建立会话时失败并返回明确错误,不伪装成可播放 HLS。 | |||
| ## 架构 | |||
| ```mermaid | |||
| flowchart LR | |||
| Browser["本机前端浏览器"] -->|"HLS m3u8"| ZLM["ZLMediaKit Docker\n127.0.0.1:18081"] | |||
| App["Spring 服务 :8080"] -->|"SDK 登录、回放、控制"| NVR["海康 NVR :8000"] | |||
| NVR -->|"H.264 裸帧回调"| App | |||
| App -->|"stdin 原始 H.264"| FFmpeg["本机 FFmpeg"] | |||
| FFmpeg -->|"RTMP"| ZLM | |||
| Browser -->|"会话/控制 API"| App | |||
| ``` | |||
| 每个 HLS 会话拥有一套独立资源:海康 SDK 回放句柄、持久化 JNA 回调对象、帧队列与写入线程、FFmpeg 进程,以及 ZLM 的 `playback/{streamId}` RTMP 流。 | |||
| ## API | |||
| ### 创建会话 | |||
| `POST /hik/nvr/playback/hls/sessions` | |||
| 请求体复用 `HikNvrPlaybackRequest`。服务先调用已有录像查询逻辑,得到实际连续录像区间;无录像返回 `404`,请求范围内存在多个不连续区间时返回 `409` 并要求前端先按一个连续区间重新发起请求。 | |||
| 成功响应: | |||
| ```json | |||
| { | |||
| "sessionId": "4c3b0cf0-2a92-4ddc-a36a-7e5f31b01f10", | |||
| "status": "PLAYING", | |||
| "speed": 1, | |||
| "actualTimeRange": ["20260713123000", "20260713130000"], | |||
| "hlsUrl": "http://127.0.0.1:18081/playback/4c3b0cf02a924ddca36a7e5f31b01f10-1/hls.m3u8" | |||
| } | |||
| ``` | |||
| 前端通过 hls.js(Chrome/Edge)或原生 HLS(Safari)加载 `hlsUrl`。前端不能再对 `video.playbackRate` 做 2/4/8 倍设置;倍速必须调用后端控制接口,避免把客户端倍速与 NVR 倍速叠加。 | |||
| ### 查询会话 | |||
| `GET /hik/nvr/playback/hls/sessions/{sessionId}` | |||
| 返回会话状态、当前速度、实际录像区间、当前 HLS 地址和失败原因(如有)。状态为 `STARTING`、`PLAYING`、`PAUSED`、`STOPPED` 或 `FAILED`。 | |||
| ### 控制会话 | |||
| `POST /hik/nvr/playback/hls/sessions/{sessionId}/controls` | |||
| ```json | |||
| { | |||
| "action": "SET_SPEED", | |||
| "speed": 4 | |||
| } | |||
| ``` | |||
| 可用动作: | |||
| - `PAUSE`:调用 `NET_DVR_PLAYPAUSE`; | |||
| - `RESUME`:调用 `NET_DVR_PLAYRESTART`; | |||
| - `SET_SPEED`:仅接受 `1`、`2`、`4`、`8`。先调用 `NET_DVR_PLAYNORMAL`,再按指数次数调用 `NET_DVR_PLAYFAST`; | |||
| - `SEEK`:请求 `targetTime`(固定 `yyyy-MM-dd HH:mm:ss`,北京时间)。先校验目标时间位于当前实际录像区间,再调用 `NET_DVR_PLAYSETTIME`(控制码 26)。为避免旧 HLS 缓冲与新 GOP 混合,控制成功后会切换到新的流代次和新的 HLS 地址;若设备不支持绝对定位,则停止旧回放并以目标时间重建 SDK 回放句柄作为兼容回退; | |||
| - `STOP`:停止 SDK 回放、关闭帧桥和 FFmpeg,并使会话进入 `STOPPED`。 | |||
| `SEEK` 的响应始终带回新的 `hlsUrl`。前端收到后销毁旧 hls.js 实例并加载新地址。 | |||
| ### 销毁会话 | |||
| `DELETE /hik/nvr/playback/hls/sessions/{sessionId}` | |||
| 与 `STOP` 等价并从会话表删除。服务关闭时也会关闭自己创建的所有会话。定时清理会在“请求录像时长 + 10 分钟”后关闭仍未结束的会话,防止孤儿 SDK 句柄和 FFmpeg 进程。 | |||
| ## SDK、帧桥与倍速 | |||
| 创建 SDK 会话时使用 `NET_DVR_PlayBackByTime_V40`,注册 `NET_DVR_SetPlayBackESCallBack`,再调用 `NET_DVR_PLAYSTART`。回调每次提供一帧裸码流及帧类型、时间戳。JNA 回调中只复制帧数据并放入有界队列,绝不执行网络、FFmpeg 或 SDK 控制调用。 | |||
| 单独写入线程将 H.264 帧写入 FFmpeg 的标准输入。FFmpeg 不使用 `-re`,并基于接收时间生成时间戳后推送 RTMP,因此 NVR SDK 的快放输出会以更短的媒体时间进入 ZLM/HLS。队列压力时优先丢弃 B/P 帧,不丢 I 帧;连续无法写入则会停止会话并标记为 `FAILED`。 | |||
| 海康 SDK 中的 `NET_DVR_PLAYFAST` 每调用一次将当前速度乘以 2;本设计通过先恢复 1 倍再调用 1、2、3 次,保证目标值准确为 2、4、8 倍。 | |||
| ## 本机媒体环境 | |||
| - Docker Desktop 启动后拉取 ZLMediaKit 镜像; | |||
| - ZLM 仅映射 `127.0.0.1:18081 -> 80`(HLS/HTTP)和 `127.0.0.1:1935 -> 1935`(FFmpeg RTMP 推流); | |||
| - ZLM 显式启用 HLS、2 秒切片、跨域响应; | |||
| - FFmpeg 安装到 `C:\tools\ffmpeg`,应用从 `HIK_NVR_HLS_FFMPEG_PATH` 读取 `ffmpeg.exe` 路径; | |||
| - 应用从 `HIK_NVR_HLS_ZLM_RTMP_BASE_URL` 与 `HIK_NVR_HLS_ZLM_HTTP_BASE_URL` 读取 ZLM 地址,默认分别为 `rtmp://127.0.0.1:1935` 和 `http://127.0.0.1:18081`; | |||
| - 本地 ZLM 配置和环境文件不含在 Git 提交中,且不开放到局域网。 | |||
| ## 错误处理与安全 | |||
| - ZLM/FFmpeg 未就绪:`502`,返回组件状态但不泄露 NVR 密码; | |||
| - SDK 登录、创建回放、注册回调、控制失败:`502`,保留海康错误码; | |||
| - 无录像:`404`;跨越多个不连续录像段:`409`;非法速度或跳转时间:`400`;会话不存在:`404`; | |||
| - 日志和异常响应统一脱敏 RTSP 用户信息; | |||
| - NVR 密码只存在于入站请求、SDK 登录和内存中,浏览器响应不返回密码; | |||
| - FFmpeg 命令的输入来自 SDK 标准输入,不把 RTSP 密码放到操作系统进程命令行。 | |||
| ## 验证标准 | |||
| 1. 单元测试验证控制码、速度映射、SDK VOD 参数、HLS/RTMP URL、队列背压和资源清理。 | |||
| 2. MVC 测试验证创建、查询、暂停、恢复、1/2/4/8 倍、定位、停止和异常响应。 | |||
| 3. Docker 运行 ZLM 后,服务可创建 HLS 会话并在 `127.0.0.1:18081` 返回 m3u8。 | |||
| 4. 使用当前 NVR 的已知录像区间手工验证:1 倍播放、暂停/恢复、2/4/8 倍切换、跳转到指定时间并重新加载返回的 HLS 地址。 | |||
| @ -0,0 +1,103 @@ | |||
| # 海康 NVR HLS 回放控制台设计 | |||
| **状态:** 已获用户确认,修改仅保留在本地工作区,不提交 Git。 | |||
| ## 1. 目标 | |||
| 为现有海康 NVR SDK 控制的 HLS 回放能力增加一个可直接打开的浏览器播放器。用户只需要在页面选择设备、日期和时间并点击查询,页面负责创建、轮询和控制回放会话,不再手工重复调用 Swagger 接口。 | |||
| 播放器覆盖当前后端已经支持的能力: | |||
| - 固定按北京时间输入和展示查询、跳转时间; | |||
| - 展示实际存在的连续录像区间; | |||
| - 自动创建 HLS 会话并等待 `STARTING -> PLAYING`; | |||
| - 播放、暂停、恢复、1/2/4/8 倍速、时间轴跳转和全屏; | |||
| - HLS 地址只在浏览器同源页面中使用,不向页面返回 NVR 密码。 | |||
| ## 2. 已确认的配置策略 | |||
| 采用用户选择的 B 方案:NVR IP、SDK/RTSP 端口、账号和密码固定在 Spring Boot 后端配置中。页面只接收通道、码流类型和时间范围。 | |||
| 配置前缀为 `hik.playback.ui`: | |||
| ```yaml | |||
| hik: | |||
| playback: | |||
| ui: | |||
| device-name: 海康 NVR | |||
| nvr-ip: ${HIK_NVR_IP:192.168.1.249} | |||
| sdk-port: ${HIK_NVR_SDK_PORT:8000} | |||
| rtsp-port: ${HIK_NVR_RTSP_PORT:554} | |||
| username: ${HIK_NVR_USERNAME:admin} | |||
| password: ${HIK_NVR_PASSWORD:} | |||
| default-channel: 1 | |||
| default-stream-type: 1 | |||
| ``` | |||
| 密码使用环境变量 `HIK_NVR_PASSWORD`,不会写入 HTML、Swagger 响应或日志。若密码为空,配置接口仍可打开页面,但创建会话时返回明确的配置错误。 | |||
| ## 3. 后端接口 | |||
| ### 3.1 读取页面配置 | |||
| `GET /hik/nvr/playback/hls/ui/config` | |||
| 返回页面需要的非敏感配置、设备树和默认通道。返回对象不包含 `password`,并通过 `configured` 标识后端是否已经具备创建会话的必要配置。 | |||
| ### 3.2 页面创建回放 | |||
| `POST /hik/nvr/playback/hls/ui/sessions` | |||
| 请求体只包含: | |||
| ```json | |||
| { | |||
| "channel": 1, | |||
| "streamType": 1, | |||
| "startTime": "2026-07-13 12:00:00", | |||
| "endTime": "2026-07-13 13:00:00" | |||
| } | |||
| ``` | |||
| 控制台控制请求继续复用现有 `/sessions/{sessionId}/controls` 和 `DELETE /sessions/{sessionId}`,避免复制回放状态机。 | |||
| ## 4. 前端实现 | |||
| 不引入 Node、React 或 Thymeleaf,使用 Spring Boot 静态资源目录中的 `playback.html`,通过 `http://localhost:18080/playback.html` 打开。这样与后端同源,接口无需额外 CORS 配置。 | |||
| 页面采用“工业监控台”视觉方向:冷白工作区、深海军蓝文字、单一高亮蓝色、细边框卡片、淡网格背景和有限的入场动画。布局包含: | |||
| 1. 左侧设备树:固定 NVR、分组和可选通道; | |||
| 2. 顶部时间查询栏:日期、开始时间、结束时间、查询和重置; | |||
| 3. 中央视频舞台:HLS 视频、状态徽标、错误/等待提示和当前北京时间; | |||
| 4. 下方录像轨道:按请求时间范围绘制实际录像块,点击轨道发送 `SEEK`; | |||
| 5. 控制栏:到起点、暂停/恢复、到末尾、当前时间、音量、1/2/4/8 倍速和全屏。 | |||
| 播放器使用 hls.js CDN,在 Chrome/Edge 中加载 HLS;Safari 等支持原生 HLS 的浏览器直接设置 `video.src`。当后端返回新的 `generation` 或 HLS 地址时,销毁旧实例并重新加载,防止跳转后继续使用旧切片。 | |||
| ## 5. 状态与错误处理 | |||
| - 页面加载时读取配置;读取失败显示连接错误,不阻止页面布局展示。 | |||
| - 查询时禁用查询按钮,创建成功后轮询会话状态;`STARTING` 显示“等待首个关键帧”,`PLAYING` 才加载 m3u8。 | |||
| - 404、409、502、503 等后端错误解析 `message` 并显示在视频舞台和顶部状态栏。 | |||
| - 页面关闭或切换查询时,删除旧会话,释放 SDK、FFmpeg 和 ZLMediaKit 资源。 | |||
| - 暂停、恢复、倍速和跳转均由后端 SDK 控制;前端不使用 `video.playbackRate` 伪造 NVR 倍速。 | |||
| ## 6. 文件变更 | |||
| - 新增 `HikNvrPlaybackUiProperties`、页面配置 DTO、页面创建请求 DTO; | |||
| - 新增 `HikNvrPlaybackUiController`; | |||
| - 在 `application.yml` 增加 `hik.playback.ui` 固定配置; | |||
| - 新增 `src/main/resources/static/playback.html`; | |||
| - 新增后端控制器单元测试和页面接口契约测试; | |||
| - 更新设计文档与实施计划,所有变更不提交 Git。 | |||
| ## 7. 自审结论 | |||
| - 配置策略与用户确认的 B 方案一致,页面不要求用户输入 NVR 账号密码; | |||
| - 页面只依赖现有 HLS 会话服务,不改变 SDK、FFmpeg 或 ZLMediaKit 数据通路; | |||
| - 倍速范围与现有服务的 1/2/4/8 约束一致; | |||
| - HLS `STARTING` 轮询和 generation 重载覆盖了此前 VLC/HLS 首帧延迟及跳转旧切片问题; | |||
| - 静态页面无需新增前端构建环境,适合当前 Spring Boot 项目; | |||
| - 密码使用环境变量,避免将用户提供的凭据硬编码到仓库。 | |||
| @ -0,0 +1,315 @@ | |||
| @echo off | |||
| setlocal EnableExtensions EnableDelayedExpansion | |||
| rem Build and export only the linux/amd64 inspect-nvr application image. | |||
| rem The BAT file intentionally contains ASCII only so cmd.exe cannot corrupt | |||
| rem UTF-8 comments or messages into executable command fragments. | |||
| rem | |||
| rem Usage: | |||
| rem export-inspect-nvr-amd64.bat | |||
| rem export-inspect-nvr-amd64.bat --no-cache | |||
| rem export-inspect-nvr-amd64.bat D:\backup\inspect-nvr-app-amd64.tar --no-cache | |||
| rem export-inspect-nvr-amd64.bat --preflight | |||
| rem export-inspect-nvr-amd64.bat --help | |||
| cd /d "%~dp0" | |||
| if not exist "%~dp0deploy-package" mkdir "%~dp0deploy-package" | |||
| set "IMAGE=inspect-nvr:local" | |||
| set "FFMPEG_IMAGE=" | |||
| set "FFMPEG_DIGEST=sha256:3d1966c91f65f7e7a4ea09203852c8563ef9e48c3ca2cd5e79c8bc80bde02569" | |||
| set "OUTPUT=%~dp0deploy-package\inspect-nvr-app-amd64-latest.tar" | |||
| set "NO_CACHE=0" | |||
| set "PREFLIGHT=0" | |||
| set "OLD_CONTAINER_ID=" | |||
| set "OLD_IMAGE_ID=" | |||
| set "NEW_IMAGE_ID=" | |||
| if /I "%~1"=="--help" goto :usage | |||
| if /I "%~1"=="--preflight" set "PREFLIGHT=1" | |||
| if /I "%~1"=="--no-cache" set "NO_CACHE=1" | |||
| if not "%~1"=="" if /I not "%~1"=="--preflight" if /I not "%~1"=="--no-cache" set "OUTPUT=%~1" | |||
| if /I "%~2"=="--no-cache" set "NO_CACHE=1" | |||
| echo [1/10] Checking Docker... | |||
| where docker >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] Docker was not found. Start Docker Desktop first. | |||
| goto :fail | |||
| ) | |||
| docker info >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The Docker engine is not running. | |||
| goto :fail | |||
| ) | |||
| docker compose version >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The docker compose plugin is not available. | |||
| goto :fail | |||
| ) | |||
| docker buildx version >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] Docker Buildx is not available. | |||
| goto :fail | |||
| ) | |||
| if not exist "%~dp0docker-compose.yml" ( | |||
| echo [ERROR] docker-compose.yml was not found in %~dp0 | |||
| goto :fail | |||
| ) | |||
| rem Compose only needs placeholder ZLM URLs while resolving the build model. | |||
| rem Real remote ZLM URLs are still mandatory before the local container starts. | |||
| findstr /R /B /C:"ZLM_RTMP_BASE_URL=" "%~dp0.env" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| set "ZLM_RTMP_BASE_URL=rtmp://build-only.invalid:1935" | |||
| echo [INFO] ZLM_RTMP_BASE_URL is missing. Using a build-only placeholder. | |||
| ) | |||
| findstr /R /B /C:"ZLM_HTTP_BASE_URL=" "%~dp0.env" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| set "ZLM_HTTP_BASE_URL=http://build-only.invalid:18081" | |||
| echo [INFO] ZLM_HTTP_BASE_URL is missing. Using a build-only placeholder. | |||
| ) | |||
| echo [2/10] Checking the FFmpeg base image... | |||
| rem Try verified mirrors first. The digest check prevents a mirror from | |||
| rem returning content that differs from the official 6.1 manifest. | |||
| call :try_ffmpeg_image "docker.1ms.run/mwader/static-ffmpeg:6.1" | |||
| call :try_ffmpeg_image "dockerproxy.net/mwader/static-ffmpeg:6.1" | |||
| call :try_ffmpeg_image "hub.rat.dev/mwader/static-ffmpeg:6.1" | |||
| call :try_ffmpeg_image "registry-1.docker.io/mwader/static-ffmpeg:6.1" | |||
| if not defined FFMPEG_IMAGE ( | |||
| echo [ERROR] No verified FFmpeg registry is reachable. | |||
| echo [ERROR] Check Docker Desktop proxy, DNS, or registry connectivity. | |||
| goto :fail | |||
| ) | |||
| echo Selected: !FFMPEG_IMAGE! | |||
| echo Verified digest: %FFMPEG_DIGEST% | |||
| if "!PREFLIGHT!"=="1" ( | |||
| echo. | |||
| echo Preflight passed. No image was removed or built. | |||
| endlocal | |||
| exit /b 0 | |||
| ) | |||
| echo [3/10] Removing the old %IMAGE% image... | |||
| rem Read the image from the existing Compose container first. This also finds | |||
| rem an untagged image left behind when an earlier build stopped with an error. | |||
| for /f "delims=" %%C in ('docker compose ps --all -q inspect-nvr 2^>nul') do set "OLD_CONTAINER_ID=%%C" | |||
| if defined OLD_CONTAINER_ID ( | |||
| for /f "delims=" %%I in ('docker inspect --format "{{.Image}}" "!OLD_CONTAINER_ID!" 2^>nul') do set "OLD_IMAGE_ID=%%I" | |||
| ) | |||
| docker image inspect "%IMAGE%" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| if defined OLD_IMAGE_ID ( | |||
| echo The running container uses an already untagged old image. | |||
| ) else ( | |||
| echo No old image with this name exists. | |||
| ) | |||
| ) else ( | |||
| rem Remember the exact old image so its untagged data can be deleted after | |||
| rem Compose replaces the running application container. | |||
| if not defined OLD_IMAGE_ID ( | |||
| for /f "delims=" %%I in ('docker image inspect --format "{{.Id}}" "%IMAGE%" 2^>nul') do set "OLD_IMAGE_ID=%%I" | |||
| ) | |||
| if not defined OLD_IMAGE_ID ( | |||
| echo [ERROR] Failed to read the old %IMAGE% image ID. | |||
| goto :fail | |||
| ) | |||
| rem Force only removes the image tag when a running container still uses | |||
| rem the old image ID, so the current container can keep running during build. | |||
| docker image rm --force "%IMAGE%" | |||
| if errorlevel 1 ( | |||
| echo [ERROR] Failed to remove the old %IMAGE% image. | |||
| goto :fail | |||
| ) | |||
| ) | |||
| echo [4/10] Building %IMAGE%... | |||
| if "!NO_CACHE!"=="1" ( | |||
| echo Building with --no-cache. The first build can take a while. | |||
| docker compose build --no-cache inspect-nvr | |||
| ) else ( | |||
| echo Using the build cache. Source or pom.xml changes rebuild the JAR. | |||
| docker compose build inspect-nvr | |||
| ) | |||
| if errorlevel 1 ( | |||
| echo [ERROR] Docker image build failed. Review the Maven or Docker log above. | |||
| echo [INFO] An existing running container was not stopped by this script. | |||
| goto :fail | |||
| ) | |||
| echo [5/10] Checking the image platform... | |||
| docker image inspect "%IMAGE%" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The build finished without creating %IMAGE%. | |||
| goto :fail | |||
| ) | |||
| for /f "delims=" %%I in ('docker image inspect --format "{{.Id}}" "%IMAGE%" 2^>nul') do set "NEW_IMAGE_ID=%%I" | |||
| if not defined NEW_IMAGE_ID ( | |||
| echo [ERROR] Failed to read the new %IMAGE% image ID. | |||
| goto :fail | |||
| ) | |||
| set "PLATFORM_FILE=%TEMP%\inspect-nvr-platform-%RANDOM%.txt" | |||
| docker image inspect --format "{{.Os}}/{{.Architecture}}" "%IMAGE%" > "%PLATFORM_FILE%" | |||
| if errorlevel 1 ( | |||
| echo [ERROR] Failed to read the image platform. | |||
| del /f /q "%PLATFORM_FILE%" >nul 2>&1 | |||
| goto :fail | |||
| ) | |||
| set "PLATFORM=" | |||
| set /p PLATFORM=<"%PLATFORM_FILE%" | |||
| del /f /q "%PLATFORM_FILE%" >nul 2>&1 | |||
| if /I not "!PLATFORM!"=="linux/amd64" ( | |||
| echo [ERROR] Image platform is !PLATFORM!, expected linux/amd64. | |||
| goto :fail | |||
| ) | |||
| echo Platform confirmed: !PLATFORM! | |||
| if exist "%OUTPUT%" ( | |||
| echo [INFO] Output file already exists: %OUTPUT% | |||
| choice /C YN /N /M "Overwrite it? [Y/N]" | |||
| if errorlevel 2 ( | |||
| echo Cancelled. | |||
| goto :fail | |||
| ) | |||
| del /f /q "%OUTPUT%" >nul 2>&1 | |||
| ) | |||
| if exist "%OUTPUT%.sha256" del /f /q "%OUTPUT%.sha256" >nul 2>&1 | |||
| echo [6/10] Exporting the application image... | |||
| docker save -o "%OUTPUT%" "%IMAGE%" | |||
| if errorlevel 1 ( | |||
| echo [ERROR] docker save failed. The output file may be in use. | |||
| goto :fail | |||
| ) | |||
| echo [7/10] Checking the tar contents... | |||
| where tar >nul 2>&1 | |||
| if not errorlevel 1 ( | |||
| tar -xOf "%OUTPUT%" manifest.json | findstr /I /C:"zlmediakit" >nul | |||
| if not errorlevel 1 ( | |||
| echo [ERROR] ZLMediaKit was found in the application tar. | |||
| goto :fail | |||
| ) | |||
| echo ZLMediaKit is not present in the tar. | |||
| ) else ( | |||
| echo [INFO] tar was not found. docker save only exported %IMAGE%. | |||
| ) | |||
| echo [8/10] Generating the SHA256 file... | |||
| where powershell >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] PowerShell was not found. | |||
| goto :fail | |||
| ) | |||
| set "HASH_FILE=%OUTPUT%.sha256" | |||
| rem Use .NET directly because Windows PowerShell launched through cmd.exe can | |||
| rem inherit PowerShell 7 module paths and then fail to autoload Get-FileHash. | |||
| powershell -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference='Stop'; try { $stream=[IO.File]::OpenRead($env:OUTPUT); try { $sha=[Security.Cryptography.SHA256]::Create(); try { $hash=([BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-','').ToLowerInvariant() } finally { if ($null -ne $sha) { $sha.Dispose() } } } finally { if ($null -ne $stream) { $stream.Dispose() } }; if ($hash.Length -ne 64) { throw 'Unexpected SHA256 length.' }; $name=[IO.Path]::GetFileName($env:OUTPUT); [IO.File]::WriteAllText($env:HASH_FILE, ($hash + ' ' + $name + [char]10), [Text.Encoding]::ASCII) } catch { [Console]::Error.WriteLine($_.Exception.Message); exit 1 }" | |||
| if errorlevel 1 ( | |||
| echo [ERROR] SHA256 generation failed. | |||
| goto :fail | |||
| ) | |||
| set "HASH=" | |||
| set /p HASH=<"%HASH_FILE%" | |||
| echo [9/10] Recreating the local application container... | |||
| rem Build placeholders must never be used when the application starts. | |||
| findstr /R /B /C:"ZLM_RTMP_BASE_URL=" "%~dp0.env" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The image was built and exported, but the container was not recreated. | |||
| echo [ERROR] Set a real ZLM_RTMP_BASE_URL in .env and run Compose again. | |||
| goto :fail | |||
| ) | |||
| findstr /R /B /C:"ZLM_HTTP_BASE_URL=" "%~dp0.env" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The image was built and exported, but the container was not recreated. | |||
| echo [ERROR] Set a real ZLM_HTTP_BASE_URL in .env and run Compose again. | |||
| goto :fail | |||
| ) | |||
| docker compose up -d --force-recreate --no-build inspect-nvr | |||
| if errorlevel 1 ( | |||
| echo [ERROR] The image was exported, but the local container recreate failed. | |||
| goto :fail | |||
| ) | |||
| echo [10/10] Releasing the previous application image... | |||
| if not defined OLD_IMAGE_ID ( | |||
| echo No previous image data needs cleanup. | |||
| ) else if /I "!OLD_IMAGE_ID!"=="!NEW_IMAGE_ID!" ( | |||
| rem An unchanged cached build can reproduce the same image ID. That ID now | |||
| rem belongs to the new tag and container, so there is no duplicate to delete. | |||
| echo The rebuilt image reused the same image ID. No duplicate remains. | |||
| ) else ( | |||
| rem The old Compose container is gone, so deleting its exact image ID frees | |||
| rem only obsolete inspect-nvr layers and leaves other project images intact. | |||
| docker image rm "!OLD_IMAGE_ID!" | |||
| if errorlevel 1 ( | |||
| echo [WARN] The previous image is still used by another container. | |||
| echo [WARN] Docker kept it to avoid breaking that container. | |||
| ) else ( | |||
| echo Previous image data released: !OLD_IMAGE_ID! | |||
| ) | |||
| ) | |||
| echo. | |||
| echo Export completed: | |||
| echo Image: %IMAGE% | |||
| echo File: %OUTPUT% | |||
| echo Hash: %HASH_FILE% | |||
| echo SHA256: !HASH! | |||
| echo Local container: recreated with the new image | |||
| echo. | |||
| echo Ubuntu import command: | |||
| echo sudo docker load -i inspect-nvr-app-amd64-latest.tar | |||
| echo. | |||
| echo For a clean rebuild: | |||
| echo export-inspect-nvr-amd64.bat --no-cache | |||
| echo. | |||
| pause | |||
| endlocal | |||
| exit /b 0 | |||
| :usage | |||
| echo Usage: | |||
| echo export-inspect-nvr-amd64.bat | |||
| echo export-inspect-nvr-amd64.bat --no-cache | |||
| echo export-inspect-nvr-amd64.bat OUTPUT_FILE [--no-cache] | |||
| echo export-inspect-nvr-amd64.bat --preflight | |||
| endlocal | |||
| exit /b 0 | |||
| :try_ffmpeg_image | |||
| if defined FFMPEG_IMAGE exit /b 0 | |||
| set "FFMPEG_CANDIDATE=%~1" | |||
| set "FFMPEG_CHECK_FILE=%TEMP%\inspect-nvr-ffmpeg-%RANDOM%.txt" | |||
| echo Trying !FFMPEG_CANDIDATE!... | |||
| docker buildx imagetools inspect "!FFMPEG_CANDIDATE!" >"!FFMPEG_CHECK_FILE!" 2>&1 | |||
| if errorlevel 1 ( | |||
| echo Unavailable. | |||
| del /f /q "!FFMPEG_CHECK_FILE!" >nul 2>&1 | |||
| exit /b 0 | |||
| ) | |||
| findstr /L /C:"!FFMPEG_DIGEST!" "!FFMPEG_CHECK_FILE!" >nul 2>&1 | |||
| if errorlevel 1 ( | |||
| echo Rejected because the manifest digest does not match. | |||
| del /f /q "!FFMPEG_CHECK_FILE!" >nul 2>&1 | |||
| exit /b 0 | |||
| ) | |||
| del /f /q "!FFMPEG_CHECK_FILE!" >nul 2>&1 | |||
| set "FFMPEG_IMAGE=!FFMPEG_CANDIDATE!" | |||
| echo Available and digest verified. | |||
| exit /b 0 | |||
| :fail | |||
| echo. | |||
| echo Script stopped. Press any key to close this window. | |||
| pause >nul | |||
| endlocal | |||
| exit /b 1 | |||
| @ -0,0 +1,11 @@ | |||
| Begin Time:2025-08-08T16:15:04.191 | |||
| [2025-08-08T16:15:04.192 info Netsdk:87378 23964:17588 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-08T16:15:04.193 info Netsdk:87378 23964:17588 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034FC0000 | |||
| [2025-08-08T16:15:04.193 info Netsdk:87378 23964:17588 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-08T16:15:04.196 info Netsdk:87378 23964:17588 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002CFF0090, dwUser=0000000000000000]. | |||
| [2025-08-08T16:15:04.196 info Netsdk:87378 23964:17588 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-08T16:15:04.196 info Netsdk:87378 23964:17588 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-08T16:15:04.196 info Netsdk:87378 23964:17588 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-08T16:15:04.198 info Netsdk:87378 23964:17588 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-08T16:15:04.198 info Netsdk:87378 23964:17588 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,22 @@ | |||
| Begin Time:2025-08-15T18:48:25.428 | |||
| [2025-08-15T18:48:25.428 info Netsdk:87378 28828:30576 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-15T18:48:25.430 info Netsdk:87378 28828:30576 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000349B0000 | |||
| [2025-08-15T18:48:25.430 info Netsdk:87378 28828:30576 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-15T18:48:25.432 info Netsdk:87378 28828:30576 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002D60090, dwUser=0000000000000000]. | |||
| [2025-08-15T18:48:25.433 info Netsdk:87378 28828:30576 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-15T18:48:25.433 info Netsdk:87378 28828:30576 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-15T18:48:25.433 info Netsdk:87378 28828:30576 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-15T18:48:25.433 info Netsdk:87378 28828:30576 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-15T18:48:25.433 info Netsdk:87378 28828:30576 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-08-15T19:12:36.854 | |||
| [2025-08-15T19:12:36.854 info Netsdk:87378 26944:32452 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-15T19:12:36.855 info Netsdk:87378 26944:32452 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000033F20000 | |||
| [2025-08-15T19:12:36.855 info Netsdk:87378 26944:32452 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-15T19:12:36.857 info Netsdk:87378 26944:32452 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002D70090, dwUser=0000000000000000]. | |||
| [2025-08-15T19:12:36.857 info Netsdk:87378 26944:32452 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-15T19:12:36.857 info Netsdk:87378 26944:32452 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-15T19:12:36.857 info Netsdk:87378 26944:32452 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-15T19:12:36.858 info Netsdk:87378 26944:32452 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-15T19:12:36.858 info Netsdk:87378 26944:32452 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,22 @@ | |||
| Begin Time:2025-08-18T11:23:01.777 | |||
| [2025-08-18T11:23:01.777 info Netsdk:87378 25592:42172 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-18T11:23:01.782 info Netsdk:87378 25592:42172 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000347D0000 | |||
| [2025-08-18T11:23:01.782 info Netsdk:87378 25592:42172 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-18T11:23:01.788 info Netsdk:87378 25592:42172 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002C740090, dwUser=0000000000000000]. | |||
| [2025-08-18T11:23:01.788 info Netsdk:87378 25592:42172 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-18T11:23:01.789 info Netsdk:87378 25592:42172 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-18T11:23:01.789 info Netsdk:87378 25592:42172 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-18T11:23:01.791 info Netsdk:87378 25592:42172 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-18T11:23:01.791 info Netsdk:87378 25592:42172 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-08-18T11:30:56.676 | |||
| [2025-08-18T11:30:56.676 info Netsdk:87378 22052:27440 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-18T11:30:56.680 info Netsdk:87378 22052:27440 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034550000 | |||
| [2025-08-18T11:30:56.680 info Netsdk:87378 22052:27440 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-18T11:30:56.685 info Netsdk:87378 22052:27440 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000028D0090, dwUser=0000000000000000]. | |||
| [2025-08-18T11:30:56.685 info Netsdk:87378 22052:27440 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-18T11:30:56.685 info Netsdk:87378 22052:27440 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-18T11:30:56.686 info Netsdk:87378 22052:27440 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-18T11:30:56.687 info Netsdk:87378 22052:27440 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-18T11:30:56.687 info Netsdk:87378 22052:27440 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,11 @@ | |||
| Begin Time:2025-08-31T02:08:45.885 | |||
| [2025-08-31T02:08:45.886 info Netsdk:87378 11640:4000 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-08-31T02:08:45.890 info Netsdk:87378 11640:4000 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034D90000 | |||
| [2025-08-31T02:08:45.891 info Netsdk:87378 11640:4000 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-08-31T02:08:45.896 info Netsdk:87378 11640:4000 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002CDD0090, dwUser=0000000000000000]. | |||
| [2025-08-31T02:08:45.896 info Netsdk:87378 11640:4000 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-08-31T02:08:45.897 info Netsdk:87378 11640:4000 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-08-31T02:08:45.897 info Netsdk:87378 11640:4000 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-08-31T02:08:45.899 info Netsdk:87378 11640:4000 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-08-31T02:08:45.899 info Netsdk:87378 11640:4000 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,33 @@ | |||
| Begin Time:2025-09-01T09:42:32.204 | |||
| [2025-09-01T09:42:32.204 info Netsdk:87378 30944:31580 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-01T09:42:32.205 info Netsdk:87378 30944:31580 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000344A0000 | |||
| [2025-09-01T09:42:32.205 info Netsdk:87378 30944:31580 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-01T09:42:32.208 info Netsdk:87378 30944:31580 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002970090, dwUser=0000000000000000]. | |||
| [2025-09-01T09:42:32.208 info Netsdk:87378 30944:31580 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-01T09:42:32.208 info Netsdk:87378 30944:31580 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-01T09:42:32.208 info Netsdk:87378 30944:31580 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-01T09:42:32.209 info Netsdk:87378 30944:31580 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-01T09:42:32.209 info Netsdk:87378 30944:31580 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-01T09:44:01.510 | |||
| [2025-09-01T09:44:01.510 info Netsdk:87378 31500:30292 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-01T09:44:01.512 info Netsdk:87378 31500:30292 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034DB0000 | |||
| [2025-09-01T09:44:01.512 info Netsdk:87378 31500:30292 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-01T09:44:01.513 info Netsdk:87378 31500:30292 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002CDE0090, dwUser=0000000000000000]. | |||
| [2025-09-01T09:44:01.513 info Netsdk:87378 31500:30292 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-01T09:44:01.513 info Netsdk:87378 31500:30292 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-01T09:44:01.513 info Netsdk:87378 31500:30292 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-01T09:44:01.514 info Netsdk:87378 31500:30292 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-01T09:44:01.514 info Netsdk:87378 31500:30292 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-01T16:05:10.349 | |||
| [2025-09-01T16:05:10.350 info Netsdk:87378 33720:33840 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-01T16:05:10.356 info Netsdk:87378 33720:33840 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034CB0000 | |||
| [2025-09-01T16:05:10.356 info Netsdk:87378 33720:33840 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-01T16:05:10.363 info Netsdk:87378 33720:33840 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002CC90090, dwUser=0000000000000000]. | |||
| [2025-09-01T16:05:10.363 info Netsdk:87378 33720:33840 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-01T16:05:10.363 info Netsdk:87378 33720:33840 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-01T16:05:10.363 info Netsdk:87378 33720:33840 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-01T16:05:10.365 info Netsdk:87378 33720:33840 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-01T16:05:10.365 info Netsdk:87378 33720:33840 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,55 @@ | |||
| Begin Time:2025-09-02T17:17:27.785 | |||
| [2025-09-02T17:17:27.785 info Netsdk:87378 25548:32252 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-02T17:17:27.787 info Netsdk:87378 25548:32252 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034EE0000 | |||
| [2025-09-02T17:17:27.787 info Netsdk:87378 25548:32252 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-02T17:17:27.789 info Netsdk:87378 25548:32252 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002CE70090, dwUser=0000000000000000]. | |||
| [2025-09-02T17:17:27.789 info Netsdk:87378 25548:32252 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-02T17:17:27.790 info Netsdk:87378 25548:32252 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-02T17:17:27.790 info Netsdk:87378 25548:32252 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-02T17:17:27.790 info Netsdk:87378 25548:32252 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-02T17:17:27.790 info Netsdk:87378 25548:32252 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-02T17:18:23.561 | |||
| [2025-09-02T17:18:23.561 info Netsdk:87378 39976:13208 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-02T17:18:23.563 info Netsdk:87378 39976:13208 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034650000 | |||
| [2025-09-02T17:18:23.563 info Netsdk:87378 39976:13208 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002C5F0090, dwUser=0000000000000000]. | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-02T17:18:23.565 info Netsdk:87378 39976:13208 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-02T17:21:34.081 | |||
| [2025-09-02T17:21:34.081 info Netsdk:87378 40456:1940 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-02T17:21:34.086 info Netsdk:87378 40456:1940 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034610000 | |||
| [2025-09-02T17:21:34.086 info Netsdk:87378 40456:1940 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-02T17:21:34.091 info Netsdk:87378 40456:1940 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000026E0090, dwUser=0000000000000000]. | |||
| [2025-09-02T17:21:34.091 info Netsdk:87378 40456:1940 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-02T17:21:34.091 info Netsdk:87378 40456:1940 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-02T17:21:34.091 info Netsdk:87378 40456:1940 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-02T17:21:34.093 info Netsdk:87378 40456:1940 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-02T17:21:34.093 info Netsdk:87378 40456:1940 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-02T17:23:14.733 | |||
| [2025-09-02T17:23:14.733 info Netsdk:87378 39508:31920 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-02T17:23:14.735 info Netsdk:87378 39508:31920 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000349E0000 | |||
| [2025-09-02T17:23:14.735 info Netsdk:87378 39508:31920 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-02T17:23:14.737 info Netsdk:87378 39508:31920 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003170090, dwUser=0000000000000000]. | |||
| [2025-09-02T17:23:14.737 info Netsdk:87378 39508:31920 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-02T17:23:14.737 info Netsdk:87378 39508:31920 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-02T17:23:14.737 info Netsdk:87378 39508:31920 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-02T17:23:14.738 info Netsdk:87378 39508:31920 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-02T17:23:14.738 info Netsdk:87378 39508:31920 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-02T17:23:31.465 | |||
| [2025-09-02T17:23:31.465 info Netsdk:87378 33884:16544 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-02T17:23:31.470 info Netsdk:87378 33884:16544 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000035090000 | |||
| [2025-09-02T17:23:31.470 info Netsdk:87378 33884:16544 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-02T17:23:31.475 info Netsdk:87378 33884:16544 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003B00090, dwUser=0000000000000000]. | |||
| [2025-09-02T17:23:31.475 info Netsdk:87378 33884:16544 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-02T17:23:31.476 info Netsdk:87378 33884:16544 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-02T17:23:31.476 info Netsdk:87378 33884:16544 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-02T17:23:31.478 info Netsdk:87378 33884:16544 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-02T17:23:31.478 info Netsdk:87378 33884:16544 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,33 @@ | |||
| Begin Time:2025-09-03T11:44:33.840 | |||
| [2025-09-03T11:44:33.840 info Netsdk:87378 34576:25056 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-03T11:44:33.842 info Netsdk:87378 34576:25056 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034560000 | |||
| [2025-09-03T11:44:33.842 info Netsdk:87378 34576:25056 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-03T11:44:33.844 info Netsdk:87378 34576:25056 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002C610090, dwUser=0000000000000000]. | |||
| [2025-09-03T11:44:33.844 info Netsdk:87378 34576:25056 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-03T11:44:33.844 info Netsdk:87378 34576:25056 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-03T11:44:33.844 info Netsdk:87378 34576:25056 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-03T11:44:33.845 info Netsdk:87378 34576:25056 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-03T11:44:33.845 info Netsdk:87378 34576:25056 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-03T14:03:15.572 | |||
| [2025-09-03T14:03:15.572 info Netsdk:87378 43820:44620 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-03T14:03:15.574 info Netsdk:87378 43820:44620 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034160000 | |||
| [2025-09-03T14:03:15.574 info Netsdk:87378 43820:44620 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000FB0090, dwUser=0000000000000000]. | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-03T14:03:15.576 info Netsdk:87378 43820:44620 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2025-09-03T14:03:42.525 | |||
| [2025-09-03T14:03:42.526 info Netsdk:87378 26544:37068 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-03T14:03:42.527 info Netsdk:87378 26544:37068 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000347F0000 | |||
| [2025-09-03T14:03:42.527 info Netsdk:87378 26544:37068 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002C810090, dwUser=0000000000000000]. | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-03T14:03:42.530 info Netsdk:87378 26544:37068 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,11 @@ | |||
| Begin Time:2025-09-16T11:20:35.041 | |||
| [2025-09-16T11:20:35.041 info Netsdk:87378 18204:8668 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2025-09-16T11:20:35.042 info Netsdk:87378 18204:8668 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000034D90000 | |||
| [2025-09-16T11:20:35.042 info Netsdk:87378 18204:8668 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2025-09-16T11:20:35.046 info Netsdk:87378 18204:8668 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003010090, dwUser=0000000000000000]. | |||
| [2025-09-16T11:20:35.046 info Netsdk:87378 18204:8668 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2025-09-16T11:20:35.046 info Netsdk:87378 18204:8668 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2025-09-16T11:20:35.046 info Netsdk:87378 18204:8668 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2025-09-16T11:20:35.047 info Netsdk:87378 18204:8668 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2025-09-16T11:20:35.047 info Netsdk:87378 18204:8668 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,263 @@ | |||
| Begin Time:2026-07-13T11:22:17.457 | |||
| [2026-07-13T11:22:17.457 info Netsdk:87378 44220:41484 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T11:22:17.460 info Netsdk:87378 44220:41484 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D5D0000 | |||
| [2026-07-13T11:22:17.460 info Netsdk:87378 44220:41484 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T11:22:17.463 info Netsdk:87378 44220:41484 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003360090, dwUser=0000000000000000]. | |||
| [2026-07-13T11:22:17.463 info Netsdk:87378 44220:41484 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T11:22:17.463 info Netsdk:87378 44220:41484 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T11:22:17.463 info Netsdk:87378 44220:41484 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T11:22:17.464 info Netsdk:87378 44220:41484 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T11:22:17.464 info Netsdk:87378 44220:41484 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T11:27:02.817 | |||
| [2026-07-13T11:27:02.817 info Netsdk:87378 41564:44848 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T11:27:02.818 info Netsdk:87378 41564:44848 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DEC0000 | |||
| [2026-07-13T11:27:02.818 info Netsdk:87378 41564:44848 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T11:27:02.821 info Netsdk:87378 41564:44848 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000031E0090, dwUser=0000000000000000]. | |||
| [2026-07-13T11:27:02.821 info Netsdk:87378 41564:44848 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T11:27:02.821 info Netsdk:87378 41564:44848 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T11:27:02.821 info Netsdk:87378 41564:44848 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T11:27:02.822 info Netsdk:87378 41564:44848 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T11:27:02.822 info Netsdk:87378 41564:44848 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T12:38:32.759 | |||
| [2026-07-13T12:38:32.759 info Netsdk:87378 22792:19924 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T12:38:32.760 info Netsdk:87378 22792:19924 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D170000 | |||
| [2026-07-13T12:38:32.760 info Netsdk:87378 22792:19924 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001380090, dwUser=0000000000000000]. | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T12:38:32.762 info Netsdk:87378 22792:19924 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T13:08:51.152 | |||
| [2026-07-13T13:08:51.152 info Netsdk:87378 11828:30456 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T13:08:51.154 info Netsdk:87378 11828:30456 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D9A0000 | |||
| [2026-07-13T13:08:51.154 info Netsdk:87378 11828:30456 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001820090, dwUser=0000000000000000]. | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T13:08:51.156 info Netsdk:87378 11828:30456 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T13:26:18.463 | |||
| [2026-07-13T13:26:18.463 info Netsdk:87378 44672:25260 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T13:26:18.466 info Netsdk:87378 44672:25260 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D330000 | |||
| [2026-07-13T13:26:18.466 info Netsdk:87378 44672:25260 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T13:26:18.467 info Netsdk:87378 44672:25260 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002AC0090, dwUser=0000000000000000]. | |||
| [2026-07-13T13:26:18.467 info Netsdk:87378 44672:25260 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T13:26:18.467 info Netsdk:87378 44672:25260 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T13:26:18.467 info Netsdk:87378 44672:25260 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T13:26:18.468 info Netsdk:87378 44672:25260 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T13:26:18.468 info Netsdk:87378 44672:25260 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T13:33:12.672 | |||
| [2026-07-13T13:33:12.672 info Netsdk:87378 44916:37252 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T13:33:12.674 info Netsdk:87378 44916:37252 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D900000 | |||
| [2026-07-13T13:33:12.674 info Netsdk:87378 44916:37252 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003750090, dwUser=0000000000000000]. | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T13:33:12.676 info Netsdk:87378 44916:37252 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T13:49:15.882 | |||
| [2026-07-13T13:49:15.882 info Netsdk:87378 11516:2424 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T13:49:15.884 info Netsdk:87378 11516:2424 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E1D0000 | |||
| [2026-07-13T13:49:15.884 info Netsdk:87378 11516:2424 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001A20090, dwUser=0000000000000000]. | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T13:49:15.886 info Netsdk:87378 11516:2424 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| [2026-07-13T14:41:05.400 info Netsdk:87378 11516:1392 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:0000000035E0E160, pstOutParam:0000000035CCBCD0. | |||
| [2026-07-13T14:41:05.400 info Netsdk:87378 11516:1392 netsdk.cpp:1009]IP:192.168.1.100, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:41:05.401 info Netsdk:87378 11516:1392 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:41:15.404 info Netsdk:87378 11516:1392 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:41:15.404 info Netsdk:87378 11516:1392 TPTCPClient.cpp:541]Connect Client Port : 52100 | |||
| [2026-07-13T14:41:15.404 error Netsdk:87378 11516:1392 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.100 | |||
| [2026-07-13T14:41:15.404 error Netsdk:87378 11516:1392 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:41:15.405 error Netsdk:87378 11516:1392 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:41:15.405 error Netsdk:87378 11516:1392 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:41:15.405 error Netsdk:87378 11516:1392 netsdk.cpp:1053]Login failed, ip:192.168.1.100, port:8000, specCap:0! | |||
| [2026-07-13T14:41:15.405 info Netsdk:87378 11516:1392 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:41:15.410 info Netsdk:87378 11516:1392 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:41:15.410 info Netsdk:87378 11516:1392 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:42:04.156 info Netsdk:87378 11516:44288 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:00000000011F2090, pstOutParam:0000000035E2F190. | |||
| [2026-07-13T14:42:04.156 info Netsdk:87378 11516:44288 netsdk.cpp:1009]IP:192.168.1.100, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:42:04.156 info Netsdk:87378 11516:44288 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:42:14.157 info Netsdk:87378 11516:44288 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:42:14.157 info Netsdk:87378 11516:44288 TPTCPClient.cpp:541]Connect Client Port : 50742 | |||
| [2026-07-13T14:42:14.157 error Netsdk:87378 11516:44288 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.100 | |||
| [2026-07-13T14:42:14.157 error Netsdk:87378 11516:44288 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:42:14.157 error Netsdk:87378 11516:44288 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:42:14.157 error Netsdk:87378 11516:44288 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:42:14.157 error Netsdk:87378 11516:44288 netsdk.cpp:1053]Login failed, ip:192.168.1.100, port:8000, specCap:0! | |||
| [2026-07-13T14:42:14.157 info Netsdk:87378 11516:44288 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:42:14.158 info Netsdk:87378 11516:44288 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:42:14.158 info Netsdk:87378 11516:44288 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:43:18.618 info Netsdk:87378 11516:26924 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:0000000035DFE540, pstOutParam:00000000011A7400. | |||
| [2026-07-13T14:43:18.618 info Netsdk:87378 11516:26924 netsdk.cpp:1009]IP:192.168.1.134, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:43:18.618 info Netsdk:87378 11516:26924 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:43:28.618 info Netsdk:87378 11516:26924 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:43:28.618 info Netsdk:87378 11516:26924 TPTCPClient.cpp:541]Connect Client Port : 64796 | |||
| [2026-07-13T14:43:28.618 error Netsdk:87378 11516:26924 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.134 | |||
| [2026-07-13T14:43:28.618 error Netsdk:87378 11516:26924 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:43:28.618 error Netsdk:87378 11516:26924 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:43:28.618 error Netsdk:87378 11516:26924 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:43:28.618 error Netsdk:87378 11516:26924 netsdk.cpp:1053]Login failed, ip:192.168.1.134, port:8000, specCap:0! | |||
| [2026-07-13T14:43:28.618 info Netsdk:87378 11516:26924 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:43:28.618 info Netsdk:87378 11516:26924 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:43:28.618 info Netsdk:87378 11516:26924 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:44:26.703 info Netsdk:87378 11516:6404 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:000000000121E410, pstOutParam:00000000011A8F80. | |||
| [2026-07-13T14:44:26.703 info Netsdk:87378 11516:6404 netsdk.cpp:1009]IP:192.168.1.134, port:37777, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:44:26.703 info Netsdk:87378 11516:6404 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:44:26.715 info Netsdk:87378 11516:6404 TPTCPClient.cpp:540]Connect Client Ip : 192.168.1.86 | |||
| [2026-07-13T14:44:26.715 info Netsdk:87378 11516:6404 TPTCPClient.cpp:541]Connect Client Port : 64786 | |||
| [2026-07-13T14:44:26.917 info Netsdk:87378 11516:6404 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:0, login ID:0000000038677D40. | |||
| [2026-07-13T14:46:34.509 info Netsdk:87378 11516:10904 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:00000000011BA080, pstOutParam:00000000011BDCD0. | |||
| [2026-07-13T14:46:34.509 info Netsdk:87378 11516:10904 netsdk.cpp:1009]IP:192.168.1.100, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:46:34.509 info Netsdk:87378 11516:10904 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:46:44.509 info Netsdk:87378 11516:10904 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:46:44.509 info Netsdk:87378 11516:10904 TPTCPClient.cpp:541]Connect Client Port : 65357 | |||
| [2026-07-13T14:46:44.509 error Netsdk:87378 11516:10904 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.100 | |||
| [2026-07-13T14:46:44.509 error Netsdk:87378 11516:10904 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:46:44.509 error Netsdk:87378 11516:10904 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:46:44.509 error Netsdk:87378 11516:10904 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:46:44.509 error Netsdk:87378 11516:10904 netsdk.cpp:1053]Login failed, ip:192.168.1.100, port:8000, specCap:0! | |||
| [2026-07-13T14:46:44.509 info Netsdk:87378 11516:10904 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:46:44.509 info Netsdk:87378 11516:10904 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:46:44.509 info Netsdk:87378 11516:10904 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:47:06.589 info Netsdk:87378 11516:5880 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:000000000121EDF0, pstOutParam:0000000035DE8400. | |||
| [2026-07-13T14:47:06.589 info Netsdk:87378 11516:5880 netsdk.cpp:1009]IP:192.168.1.100, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:47:06.589 info Netsdk:87378 11516:5880 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:47:16.591 info Netsdk:87378 11516:5880 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:47:16.591 info Netsdk:87378 11516:5880 TPTCPClient.cpp:541]Connect Client Port : 54518 | |||
| [2026-07-13T14:47:16.591 error Netsdk:87378 11516:5880 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.100 | |||
| [2026-07-13T14:47:16.591 error Netsdk:87378 11516:5880 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:47:16.591 error Netsdk:87378 11516:5880 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:47:16.591 error Netsdk:87378 11516:5880 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:47:16.591 error Netsdk:87378 11516:5880 netsdk.cpp:1053]Login failed, ip:192.168.1.100, port:8000, specCap:0! | |||
| [2026-07-13T14:47:16.591 info Netsdk:87378 11516:5880 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:47:16.591 info Netsdk:87378 11516:5880 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:47:16.591 info Netsdk:87378 11516:5880 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:47:23.529 info Netsdk:87378 11516:47280 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:00000000011A9D80, pstOutParam:0000000035CCABC0. | |||
| [2026-07-13T14:47:23.529 info Netsdk:87378 11516:47280 netsdk.cpp:1009]IP:192.168.1.100, port:8000, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:47:23.529 info Netsdk:87378 11516:47280 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:47:33.530 info Netsdk:87378 11516:47280 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:47:33.530 info Netsdk:87378 11516:47280 TPTCPClient.cpp:541]Connect Client Port : 53498 | |||
| [2026-07-13T14:47:33.530 error Netsdk:87378 11516:47280 TPTCPClient.cpp:546]Connect host failed, ip:192.168.1.100 | |||
| [2026-07-13T14:47:33.530 error Netsdk:87378 11516:47280 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:47:33.530 error Netsdk:87378 11516:47280 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:47:33.530 error Netsdk:87378 11516:47280 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:47:33.530 error Netsdk:87378 11516:47280 netsdk.cpp:1053]Login failed, ip:192.168.1.100, port:8000, specCap:0! | |||
| [2026-07-13T14:47:33.530 info Netsdk:87378 11516:47280 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:47:33.530 info Netsdk:87378 11516:47280 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:47:33.530 info Netsdk:87378 11516:47280 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| [2026-07-13T14:51:31.585 info Netsdk:87378 11516:18720 netsdk.cpp:993]Enter CLIENT_LoginWithHighLevelSecurity. pstInParam:00000000011A9A80, pstOutParam:00000000011A26C0. | |||
| [2026-07-13T14:51:31.585 info Netsdk:87378 11516:18720 netsdk.cpp:1009]IP:10.1.1.65, port:37777, SpeCap:0, CapParam:0000000000000000, TLSCap:0 | |||
| [2026-07-13T14:51:31.585 info Netsdk:87378 11516:18720 devprob.cpp:3567]login with localIP: | |||
| [2026-07-13T14:51:41.585 info Netsdk:87378 11516:18720 TPTCPClient.cpp:540]Connect Client Ip : 0.0.0.0 | |||
| [2026-07-13T14:51:41.585 info Netsdk:87378 11516:18720 TPTCPClient.cpp:541]Connect Client Port : 57026 | |||
| [2026-07-13T14:51:41.585 error Netsdk:87378 11516:18720 TPTCPClient.cpp:546]Connect host failed, ip:10.1.1.65 | |||
| [2026-07-13T14:51:41.585 error Netsdk:87378 11516:18720 devprob.cpp:3606]Login failed, Failed to create main connection | |||
| [2026-07-13T14:51:41.585 error Netsdk:87378 11516:18720 Manager.cpp:12446]device is NULL | |||
| [2026-07-13T14:51:41.585 error Netsdk:87378 11516:18720 Manager.cpp:12554]Login device failed, errorcode:9! | |||
| [2026-07-13T14:51:41.585 error Netsdk:87378 11516:18720 netsdk.cpp:1053]Login failed, ip:10.1.1.65, port:37777, specCap:0! | |||
| [2026-07-13T14:51:41.585 info Netsdk:87378 11516:18720 netsdk.cpp:1057]Leave CLIENT_LoginWithHighLevelSecurity. error:9, login ID:0000000000000000. | |||
| [2026-07-13T14:51:41.585 info Netsdk:87378 11516:18720 netsdk.cpp:8477]Enter CLIENT_GetLastError. | |||
| [2026-07-13T14:51:41.585 info Netsdk:87378 11516:18720 netsdk.cpp:8480]Leave CLIENT_GetLastError.[Error code=8000006b.] | |||
| Begin Time:2026-07-13T16:30:32.416 | |||
| [2026-07-13T16:30:32.416 info Netsdk:87378 47912:42884 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T16:30:32.418 info Netsdk:87378 47912:42884 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D940000 | |||
| [2026-07-13T16:30:32.418 info Netsdk:87378 47912:42884 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T16:30:32.420 info Netsdk:87378 47912:42884 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003800090, dwUser=0000000000000000]. | |||
| [2026-07-13T16:30:32.420 info Netsdk:87378 47912:42884 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T16:30:32.420 info Netsdk:87378 47912:42884 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T16:30:32.420 info Netsdk:87378 47912:42884 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T16:30:32.421 info Netsdk:87378 47912:42884 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T16:30:32.421 info Netsdk:87378 47912:42884 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| [2026-07-13T16:43:46.861 error Netsdk:87378 11516:40792 TPTCPClient.cpp:748]Device is not online, ip:192.168.1.134 | |||
| Begin Time:2026-07-13T16:43:55.762 | |||
| [2026-07-13T16:43:55.762 info Netsdk:87378 28664:22296 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T16:43:55.763 info Netsdk:87378 28664:22296 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E000000 | |||
| [2026-07-13T16:43:55.763 info Netsdk:87378 28664:22296 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T16:43:55.764 info Netsdk:87378 28664:22296 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001590090, dwUser=0000000000000000]. | |||
| [2026-07-13T16:43:55.764 info Netsdk:87378 28664:22296 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T16:43:55.764 info Netsdk:87378 28664:22296 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T16:43:55.764 info Netsdk:87378 28664:22296 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T16:43:55.766 info Netsdk:87378 28664:22296 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T16:43:55.766 info Netsdk:87378 28664:22296 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T17:08:03.146 | |||
| [2026-07-13T17:08:03.147 info Netsdk:87378 24216:41144 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T17:08:03.148 info Netsdk:87378 24216:41144 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D8D0000 | |||
| [2026-07-13T17:08:03.148 info Netsdk:87378 24216:41144 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002E430090, dwUser=0000000000000000]. | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T17:08:03.151 info Netsdk:87378 24216:41144 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T17:10:10.745 | |||
| [2026-07-13T17:10:10.745 info Netsdk:87378 44456:34584 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T17:10:10.747 info Netsdk:87378 44456:34584 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E4C0000 | |||
| [2026-07-13T17:10:10.747 info Netsdk:87378 44456:34584 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T17:10:10.750 info Netsdk:87378 44456:34584 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000019F0090, dwUser=0000000000000000]. | |||
| [2026-07-13T17:10:10.750 info Netsdk:87378 44456:34584 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T17:10:10.750 info Netsdk:87378 44456:34584 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T17:10:10.750 info Netsdk:87378 44456:34584 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T17:10:10.751 info Netsdk:87378 44456:34584 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T17:10:10.751 info Netsdk:87378 44456:34584 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T18:26:59.739 | |||
| [2026-07-13T18:26:59.739 info Netsdk:87378 21600:50248 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T18:26:59.743 info Netsdk:87378 21600:50248 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D9A0000 | |||
| [2026-07-13T18:26:59.743 info Netsdk:87378 21600:50248 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T18:26:59.744 info Netsdk:87378 21600:50248 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003720090, dwUser=0000000000000000]. | |||
| [2026-07-13T18:26:59.744 info Netsdk:87378 21600:50248 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T18:26:59.744 info Netsdk:87378 21600:50248 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T18:26:59.744 info Netsdk:87378 21600:50248 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T18:26:59.745 info Netsdk:87378 21600:50248 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T18:26:59.745 info Netsdk:87378 21600:50248 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T18:32:36.087 | |||
| [2026-07-13T18:32:36.087 info Netsdk:87378 49416:27612 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T18:32:36.090 info Netsdk:87378 49416:27612 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D3D0000 | |||
| [2026-07-13T18:32:36.090 info Netsdk:87378 49416:27612 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T18:32:36.093 info Netsdk:87378 49416:27612 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002B20090, dwUser=0000000000000000]. | |||
| [2026-07-13T18:32:36.093 info Netsdk:87378 49416:27612 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T18:32:36.093 info Netsdk:87378 49416:27612 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T18:32:36.093 info Netsdk:87378 49416:27612 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T18:32:36.094 info Netsdk:87378 49416:27612 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T18:32:36.094 info Netsdk:87378 49416:27612 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T18:35:33.844 | |||
| [2026-07-13T18:35:33.844 info Netsdk:87378 10000:29284 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T18:35:33.846 info Netsdk:87378 10000:29284 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D970000 | |||
| [2026-07-13T18:35:33.846 info Netsdk:87378 10000:29284 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T18:35:33.848 info Netsdk:87378 10000:29284 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000345C0090, dwUser=0000000000000000]. | |||
| [2026-07-13T18:35:33.848 info Netsdk:87378 10000:29284 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T18:35:33.848 info Netsdk:87378 10000:29284 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T18:35:33.848 info Netsdk:87378 10000:29284 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T18:35:33.849 info Netsdk:87378 10000:29284 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T18:35:33.849 info Netsdk:87378 10000:29284 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-13T18:39:24.365 | |||
| [2026-07-13T18:39:24.365 info Netsdk:87378 1164:34620 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-13T18:39:24.368 info Netsdk:87378 1164:34620 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DBA0000 | |||
| [2026-07-13T18:39:24.368 info Netsdk:87378 1164:34620 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-13T18:39:24.369 info Netsdk:87378 1164:34620 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001E50090, dwUser=0000000000000000]. | |||
| [2026-07-13T18:39:24.369 info Netsdk:87378 1164:34620 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-13T18:39:24.370 info Netsdk:87378 1164:34620 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-13T18:39:24.370 info Netsdk:87378 1164:34620 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-13T18:39:24.370 info Netsdk:87378 1164:34620 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-13T18:39:24.370 info Netsdk:87378 1164:34620 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,385 @@ | |||
| Begin Time:2026-07-14T09:08:08.523 | |||
| [2026-07-14T09:08:08.523 info Netsdk:87378 29832:9608 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T09:08:08.525 info Netsdk:87378 29832:9608 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DC00000 | |||
| [2026-07-14T09:08:08.525 info Netsdk:87378 29832:9608 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T09:08:08.527 info Netsdk:87378 29832:9608 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002930090, dwUser=0000000000000000]. | |||
| [2026-07-14T09:08:08.527 info Netsdk:87378 29832:9608 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T09:08:08.528 info Netsdk:87378 29832:9608 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T09:08:08.528 info Netsdk:87378 29832:9608 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T09:08:08.528 info Netsdk:87378 29832:9608 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T09:08:08.528 info Netsdk:87378 29832:9608 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T09:27:50.514 | |||
| [2026-07-14T09:27:50.514 info Netsdk:87378 14216:51516 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T09:27:50.517 info Netsdk:87378 14216:51516 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D780000 | |||
| [2026-07-14T09:27:50.517 info Netsdk:87378 14216:51516 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T09:27:50.521 info Netsdk:87378 14216:51516 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000015F0090, dwUser=0000000000000000]. | |||
| [2026-07-14T09:27:50.521 info Netsdk:87378 14216:51516 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T09:27:50.521 info Netsdk:87378 14216:51516 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T09:27:50.521 info Netsdk:87378 14216:51516 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T09:27:50.522 info Netsdk:87378 14216:51516 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T09:27:50.522 info Netsdk:87378 14216:51516 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:20:35.206 | |||
| [2026-07-14T10:20:35.207 info Netsdk:87378 53804:55048 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:20:35.211 info Netsdk:87378 53804:55048 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D4F0000 | |||
| [2026-07-14T10:20:35.211 info Netsdk:87378 53804:55048 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:20:35.218 info Netsdk:87378 53804:55048 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002DFC0090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:20:35.218 info Netsdk:87378 53804:55048 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:20:35.218 info Netsdk:87378 53804:55048 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:20:35.218 info Netsdk:87378 53804:55048 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:20:35.219 info Netsdk:87378 53804:55048 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:20:35.219 info Netsdk:87378 53804:55048 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:26:10.297 | |||
| [2026-07-14T10:26:10.297 info Netsdk:87378 54584:52420 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:26:10.299 info Netsdk:87378 54584:52420 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DA90000 | |||
| [2026-07-14T10:26:10.299 info Netsdk:87378 54584:52420 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003880090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:26:10.304 info Netsdk:87378 54584:52420 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:34:22.986 | |||
| [2026-07-14T10:34:22.986 info Netsdk:87378 55140:54260 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:34:22.989 info Netsdk:87378 55140:54260 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D120000 | |||
| [2026-07-14T10:34:22.989 info Netsdk:87378 55140:54260 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:34:22.992 info Netsdk:87378 55140:54260 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000033DB0090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:34:22.992 info Netsdk:87378 55140:54260 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:34:22.992 info Netsdk:87378 55140:54260 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:34:22.992 info Netsdk:87378 55140:54260 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:34:22.993 info Netsdk:87378 55140:54260 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:34:22.993 info Netsdk:87378 55140:54260 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:41:50.268 | |||
| [2026-07-14T10:41:50.268 info Netsdk:87378 51212:28840 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:41:50.271 info Netsdk:87378 51212:28840 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DA50000 | |||
| [2026-07-14T10:41:50.271 info Netsdk:87378 51212:28840 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:41:50.275 info Netsdk:87378 51212:28840 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000019F0090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:41:50.275 info Netsdk:87378 51212:28840 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:41:50.275 info Netsdk:87378 51212:28840 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:41:50.275 info Netsdk:87378 51212:28840 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:41:50.276 info Netsdk:87378 51212:28840 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:41:50.276 info Netsdk:87378 51212:28840 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:46:07.969 | |||
| [2026-07-14T10:46:07.969 info Netsdk:87378 35988:20748 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:46:07.971 info Netsdk:87378 35988:20748 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DDF0000 | |||
| [2026-07-14T10:46:07.971 info Netsdk:87378 35988:20748 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000016F0090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:46:07.973 info Netsdk:87378 35988:20748 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:48:08.996 | |||
| [2026-07-14T10:48:08.996 info Netsdk:87378 42872:38752 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:48:08.998 info Netsdk:87378 42872:38752 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E0E0000 | |||
| [2026-07-14T10:48:08.998 info Netsdk:87378 42872:38752 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:48:09.001 info Netsdk:87378 42872:38752 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003760090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:48:09.001 info Netsdk:87378 42872:38752 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:48:09.001 info Netsdk:87378 42872:38752 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:48:09.001 info Netsdk:87378 42872:38752 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:48:09.002 info Netsdk:87378 42872:38752 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:48:09.002 info Netsdk:87378 42872:38752 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T10:59:57.508 | |||
| [2026-07-14T10:59:57.508 info Netsdk:87378 39536:52744 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T10:59:57.510 info Netsdk:87378 39536:52744 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D860000 | |||
| [2026-07-14T10:59:57.510 info Netsdk:87378 39536:52744 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002E330090, dwUser=0000000000000000]. | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T10:59:57.513 info Netsdk:87378 39536:52744 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:06:24.721 | |||
| [2026-07-14T11:06:24.721 info Netsdk:87378 53484:19620 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:06:24.723 info Netsdk:87378 53484:19620 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D260000 | |||
| [2026-07-14T11:06:24.723 info Netsdk:87378 53484:19620 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:06:24.725 info Netsdk:87378 53484:19620 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000033F10090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:06:24.725 info Netsdk:87378 53484:19620 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:06:24.725 info Netsdk:87378 53484:19620 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:06:24.725 info Netsdk:87378 53484:19620 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:06:24.726 info Netsdk:87378 53484:19620 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:06:24.726 info Netsdk:87378 53484:19620 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:16:41.064 | |||
| [2026-07-14T11:16:41.064 info Netsdk:87378 5044:43880 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:16:41.068 info Netsdk:87378 5044:43880 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D0C0000 | |||
| [2026-07-14T11:16:41.068 info Netsdk:87378 5044:43880 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:16:41.071 info Netsdk:87378 5044:43880 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000033DE0090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:16:41.071 info Netsdk:87378 5044:43880 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:16:41.072 info Netsdk:87378 5044:43880 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:16:41.072 info Netsdk:87378 5044:43880 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:16:41.072 info Netsdk:87378 5044:43880 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:16:41.073 info Netsdk:87378 5044:43880 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:18:41.840 | |||
| [2026-07-14T11:18:41.841 info Netsdk:87378 33992:53836 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:18:41.844 info Netsdk:87378 33992:53836 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E010000 | |||
| [2026-07-14T11:18:41.844 info Netsdk:87378 33992:53836 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:18:41.846 info Netsdk:87378 33992:53836 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003620090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:18:41.846 info Netsdk:87378 33992:53836 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:18:41.847 info Netsdk:87378 33992:53836 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:18:41.847 info Netsdk:87378 33992:53836 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:18:41.847 info Netsdk:87378 33992:53836 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:18:41.847 info Netsdk:87378 33992:53836 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:31:00.043 | |||
| [2026-07-14T11:31:00.043 info Netsdk:87378 17496:54444 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:31:00.045 info Netsdk:87378 17496:54444 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E390000 | |||
| [2026-07-14T11:31:00.045 info Netsdk:87378 17496:54444 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000036000090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:31:00.048 info Netsdk:87378 17496:54444 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:42:44.640 | |||
| [2026-07-14T11:42:44.640 info Netsdk:87378 42672:40076 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:42:44.643 info Netsdk:87378 42672:40076 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D8E0000 | |||
| [2026-07-14T11:42:44.643 info Netsdk:87378 42672:40076 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:42:44.647 info Netsdk:87378 42672:40076 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000354B0090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:42:44.647 info Netsdk:87378 42672:40076 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:42:44.647 info Netsdk:87378 42672:40076 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:42:44.647 info Netsdk:87378 42672:40076 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:42:44.648 info Netsdk:87378 42672:40076 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:42:44.648 info Netsdk:87378 42672:40076 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T11:57:24.590 | |||
| [2026-07-14T11:57:24.590 info Netsdk:87378 51756:40748 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T11:57:24.591 info Netsdk:87378 51756:40748 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D1F0000 | |||
| [2026-07-14T11:57:24.591 info Netsdk:87378 51756:40748 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T11:57:24.594 info Netsdk:87378 51756:40748 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000014F0090, dwUser=0000000000000000]. | |||
| [2026-07-14T11:57:24.594 info Netsdk:87378 51756:40748 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T11:57:24.594 info Netsdk:87378 51756:40748 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T11:57:24.594 info Netsdk:87378 51756:40748 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T11:57:24.595 info Netsdk:87378 51756:40748 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T11:57:24.595 info Netsdk:87378 51756:40748 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T13:36:32.412 | |||
| [2026-07-14T13:36:32.412 info Netsdk:87378 54420:20032 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T13:36:32.414 info Netsdk:87378 54420:20032 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D820000 | |||
| [2026-07-14T13:36:32.414 info Netsdk:87378 54420:20032 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T13:36:32.416 info Netsdk:87378 54420:20032 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000E50090, dwUser=0000000000000000]. | |||
| [2026-07-14T13:36:32.416 info Netsdk:87378 54420:20032 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T13:36:32.416 info Netsdk:87378 54420:20032 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T13:36:32.416 info Netsdk:87378 54420:20032 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T13:36:32.417 info Netsdk:87378 54420:20032 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T13:36:32.417 info Netsdk:87378 54420:20032 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T14:33:32.325 | |||
| [2026-07-14T14:33:32.325 info Netsdk:87378 47304:41688 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T14:33:32.329 info Netsdk:87378 47304:41688 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D6E0000 | |||
| [2026-07-14T14:33:32.330 info Netsdk:87378 47304:41688 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T14:33:32.334 info Netsdk:87378 47304:41688 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002F80090, dwUser=0000000000000000]. | |||
| [2026-07-14T14:33:32.334 info Netsdk:87378 47304:41688 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T14:33:32.334 info Netsdk:87378 47304:41688 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T14:33:32.334 info Netsdk:87378 47304:41688 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T14:33:32.336 info Netsdk:87378 47304:41688 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T14:33:32.336 info Netsdk:87378 47304:41688 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:02:35.635 | |||
| [2026-07-14T15:02:35.635 info Netsdk:87378 32236:54212 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:02:35.639 info Netsdk:87378 32236:54212 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003CD20000 | |||
| [2026-07-14T15:02:35.639 info Netsdk:87378 32236:54212 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:02:35.642 info Netsdk:87378 32236:54212 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000339C0090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:02:35.642 info Netsdk:87378 32236:54212 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:02:35.642 info Netsdk:87378 32236:54212 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:02:35.642 info Netsdk:87378 32236:54212 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:02:35.643 info Netsdk:87378 32236:54212 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:02:35.643 info Netsdk:87378 32236:54212 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:05:03.387 | |||
| [2026-07-14T15:05:03.387 info Netsdk:87378 10524:19664 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:05:03.389 info Netsdk:87378 10524:19664 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D9D0000 | |||
| [2026-07-14T15:05:03.389 info Netsdk:87378 10524:19664 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:05:03.391 info Netsdk:87378 10524:19664 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035590090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:05:03.391 info Netsdk:87378 10524:19664 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:05:03.391 info Netsdk:87378 10524:19664 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:05:03.391 info Netsdk:87378 10524:19664 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:05:03.392 info Netsdk:87378 10524:19664 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:05:03.392 info Netsdk:87378 10524:19664 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:07:13.957 | |||
| [2026-07-14T15:07:13.957 info Netsdk:87378 45460:6060 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:07:13.958 info Netsdk:87378 45460:6060 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D940000 | |||
| [2026-07-14T15:07:13.958 info Netsdk:87378 45460:6060 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:07:13.961 info Netsdk:87378 45460:6060 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003100090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:07:13.961 info Netsdk:87378 45460:6060 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:07:13.961 info Netsdk:87378 45460:6060 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:07:13.961 info Netsdk:87378 45460:6060 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:07:13.962 info Netsdk:87378 45460:6060 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:07:13.962 info Netsdk:87378 45460:6060 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:09:52.973 | |||
| [2026-07-14T15:09:52.973 info Netsdk:87378 26556:12776 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:09:52.974 info Netsdk:87378 26556:12776 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D450000 | |||
| [2026-07-14T15:09:52.975 info Netsdk:87378 26556:12776 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:09:52.979 info Netsdk:87378 26556:12776 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000034060090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:09:52.979 info Netsdk:87378 26556:12776 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:09:52.979 info Netsdk:87378 26556:12776 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:09:52.979 info Netsdk:87378 26556:12776 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:09:52.980 info Netsdk:87378 26556:12776 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:09:52.980 info Netsdk:87378 26556:12776 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:17:53.549 | |||
| [2026-07-14T15:17:53.549 info Netsdk:87378 44736:52508 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:17:53.552 info Netsdk:87378 44736:52508 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D710000 | |||
| [2026-07-14T15:17:53.552 info Netsdk:87378 44736:52508 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:17:53.554 info Netsdk:87378 44736:52508 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000F60090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:17:53.554 info Netsdk:87378 44736:52508 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:17:53.554 info Netsdk:87378 44736:52508 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:17:53.554 info Netsdk:87378 44736:52508 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:17:53.555 info Netsdk:87378 44736:52508 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:17:53.555 info Netsdk:87378 44736:52508 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T15:22:22.830 | |||
| [2026-07-14T15:22:22.830 info Netsdk:87378 42308:51564 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T15:22:22.833 info Netsdk:87378 42308:51564 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003CF30000 | |||
| [2026-07-14T15:22:22.833 info Netsdk:87378 42308:51564 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T15:22:22.837 info Netsdk:87378 42308:51564 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000E30090, dwUser=0000000000000000]. | |||
| [2026-07-14T15:22:22.837 info Netsdk:87378 42308:51564 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T15:22:22.837 info Netsdk:87378 42308:51564 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T15:22:22.837 info Netsdk:87378 42308:51564 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T15:22:22.838 info Netsdk:87378 42308:51564 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T15:22:22.838 info Netsdk:87378 42308:51564 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T16:42:30.262 | |||
| [2026-07-14T16:42:30.262 info Netsdk:87378 44192:8984 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T16:42:30.264 info Netsdk:87378 44192:8984 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DC30000 | |||
| [2026-07-14T16:42:30.264 info Netsdk:87378 44192:8984 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003460090, dwUser=0000000000000000]. | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T16:42:30.267 info Netsdk:87378 44192:8984 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T16:48:52.054 | |||
| [2026-07-14T16:48:52.054 info Netsdk:87378 42008:43000 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T16:48:52.058 info Netsdk:87378 42008:43000 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D700000 | |||
| [2026-07-14T16:48:52.058 info Netsdk:87378 42008:43000 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T16:48:52.061 info Netsdk:87378 42008:43000 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002EE0090, dwUser=0000000000000000]. | |||
| [2026-07-14T16:48:52.061 info Netsdk:87378 42008:43000 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T16:48:52.061 info Netsdk:87378 42008:43000 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T16:48:52.062 info Netsdk:87378 42008:43000 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T16:48:52.063 info Netsdk:87378 42008:43000 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T16:48:52.063 info Netsdk:87378 42008:43000 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T16:50:25.849 | |||
| [2026-07-14T16:50:25.849 info Netsdk:87378 34776:42964 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T16:50:25.852 info Netsdk:87378 34776:42964 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DAF0000 | |||
| [2026-07-14T16:50:25.852 info Netsdk:87378 34776:42964 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T16:50:25.855 info Netsdk:87378 34776:42964 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001DE0090, dwUser=0000000000000000]. | |||
| [2026-07-14T16:50:25.855 info Netsdk:87378 34776:42964 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T16:50:25.856 info Netsdk:87378 34776:42964 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T16:50:25.856 info Netsdk:87378 34776:42964 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T16:50:25.857 info Netsdk:87378 34776:42964 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T16:50:25.857 info Netsdk:87378 34776:42964 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T16:57:11.087 | |||
| [2026-07-14T16:57:11.087 info Netsdk:87378 34088:42800 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T16:57:11.089 info Netsdk:87378 34088:42800 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043380000 | |||
| [2026-07-14T16:57:11.089 info Netsdk:87378 34088:42800 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T16:57:11.090 info Netsdk:87378 34088:42800 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000031500090, dwUser=0000000000000000]. | |||
| [2026-07-14T16:57:11.090 info Netsdk:87378 34088:42800 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T16:57:11.091 info Netsdk:87378 34088:42800 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T16:57:11.091 info Netsdk:87378 34088:42800 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T16:57:11.091 info Netsdk:87378 34088:42800 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T16:57:11.092 info Netsdk:87378 34088:42800 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T17:29:24.576 | |||
| [2026-07-14T17:29:24.576 info Netsdk:87378 15652:49292 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T17:29:24.580 info Netsdk:87378 15652:49292 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043C40000 | |||
| [2026-07-14T17:29:24.580 info Netsdk:87378 15652:49292 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T17:29:24.582 info Netsdk:87378 15652:49292 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001850090, dwUser=0000000000000000]. | |||
| [2026-07-14T17:29:24.582 info Netsdk:87378 15652:49292 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T17:29:24.582 info Netsdk:87378 15652:49292 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T17:29:24.582 info Netsdk:87378 15652:49292 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T17:29:24.583 info Netsdk:87378 15652:49292 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T17:29:24.583 info Netsdk:87378 15652:49292 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T17:44:17.389 | |||
| [2026-07-14T17:44:17.389 info Netsdk:87378 32756:31420 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T17:44:17.391 info Netsdk:87378 32756:31420 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042940000 | |||
| [2026-07-14T17:44:17.391 info Netsdk:87378 32756:31420 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T17:44:17.394 info Netsdk:87378 32756:31420 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000015C0090, dwUser=0000000000000000]. | |||
| [2026-07-14T17:44:17.394 info Netsdk:87378 32756:31420 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T17:44:17.394 info Netsdk:87378 32756:31420 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T17:44:17.394 info Netsdk:87378 32756:31420 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T17:44:17.395 info Netsdk:87378 32756:31420 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T17:44:17.395 info Netsdk:87378 32756:31420 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T17:54:58.373 | |||
| [2026-07-14T17:54:58.373 info Netsdk:87378 11028:28412 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T17:54:58.375 info Netsdk:87378 11028:28412 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000427D0000 | |||
| [2026-07-14T17:54:58.375 info Netsdk:87378 11028:28412 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000030F50090, dwUser=0000000000000000]. | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T17:54:58.378 info Netsdk:87378 11028:28412 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T17:57:45.243 | |||
| [2026-07-14T17:57:45.243 info Netsdk:87378 40920:43756 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T17:57:45.245 info Netsdk:87378 40920:43756 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000436B0000 | |||
| [2026-07-14T17:57:45.245 info Netsdk:87378 40920:43756 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T17:57:45.248 info Netsdk:87378 40920:43756 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000EA0090, dwUser=0000000000000000]. | |||
| [2026-07-14T17:57:45.248 info Netsdk:87378 40920:43756 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T17:57:45.248 info Netsdk:87378 40920:43756 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T17:57:45.248 info Netsdk:87378 40920:43756 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T17:57:45.249 info Netsdk:87378 40920:43756 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T17:57:45.249 info Netsdk:87378 40920:43756 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T18:04:57.095 | |||
| [2026-07-14T18:04:57.095 info Netsdk:87378 47140:17496 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T18:04:57.098 info Netsdk:87378 47140:17496 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000442F0000 | |||
| [2026-07-14T18:04:57.098 info Netsdk:87378 47140:17496 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T18:04:57.100 info Netsdk:87378 47140:17496 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000F80090, dwUser=0000000000000000]. | |||
| [2026-07-14T18:04:57.100 info Netsdk:87378 47140:17496 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T18:04:57.100 info Netsdk:87378 47140:17496 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T18:04:57.100 info Netsdk:87378 47140:17496 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T18:04:57.101 info Netsdk:87378 47140:17496 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T18:04:57.101 info Netsdk:87378 47140:17496 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T18:06:14.089 | |||
| [2026-07-14T18:06:14.089 info Netsdk:87378 11448:49828 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T18:06:14.090 info Netsdk:87378 11448:49828 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000436E0000 | |||
| [2026-07-14T18:06:14.090 info Netsdk:87378 11448:49828 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T18:06:14.095 info Netsdk:87378 11448:49828 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000027D0090, dwUser=0000000000000000]. | |||
| [2026-07-14T18:06:14.095 info Netsdk:87378 11448:49828 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T18:06:14.095 info Netsdk:87378 11448:49828 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T18:06:14.095 info Netsdk:87378 11448:49828 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T18:06:14.096 info Netsdk:87378 11448:49828 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T18:06:14.096 info Netsdk:87378 11448:49828 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T18:13:00.686 | |||
| [2026-07-14T18:13:00.686 info Netsdk:87378 44492:33468 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T18:13:00.689 info Netsdk:87378 44492:33468 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042E60000 | |||
| [2026-07-14T18:13:00.689 info Netsdk:87378 44492:33468 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T18:13:00.692 info Netsdk:87378 44492:33468 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000032F00090, dwUser=0000000000000000]. | |||
| [2026-07-14T18:13:00.693 info Netsdk:87378 44492:33468 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T18:13:00.693 info Netsdk:87378 44492:33468 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T18:13:00.693 info Netsdk:87378 44492:33468 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T18:13:00.694 info Netsdk:87378 44492:33468 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T18:13:00.694 info Netsdk:87378 44492:33468 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-14T18:14:40.292 | |||
| [2026-07-14T18:14:40.292 info Netsdk:87378 14612:53356 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-14T18:14:40.295 info Netsdk:87378 14612:53356 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042C90000 | |||
| [2026-07-14T18:14:40.295 info Netsdk:87378 14612:53356 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-14T18:14:40.299 info Netsdk:87378 14612:53356 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003330090, dwUser=0000000000000000]. | |||
| [2026-07-14T18:14:40.299 info Netsdk:87378 14612:53356 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-14T18:14:40.299 info Netsdk:87378 14612:53356 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-14T18:14:40.299 info Netsdk:87378 14612:53356 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-14T18:14:40.301 info Netsdk:87378 14612:53356 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-14T18:14:40.301 info Netsdk:87378 14612:53356 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,275 @@ | |||
| Begin Time:2026-07-15T11:33:43.604 | |||
| [2026-07-15T11:33:43.604 info Netsdk:87378 54040:51812 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T11:33:43.605 info Netsdk:87378 54040:51812 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042220000 | |||
| [2026-07-15T11:33:43.605 info Netsdk:87378 54040:51812 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T11:33:43.607 info Netsdk:87378 54040:51812 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000031170090, dwUser=0000000000000000]. | |||
| [2026-07-15T11:33:43.607 info Netsdk:87378 54040:51812 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T11:33:43.607 info Netsdk:87378 54040:51812 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T11:33:43.607 info Netsdk:87378 54040:51812 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T11:33:43.608 info Netsdk:87378 54040:51812 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T11:33:43.608 info Netsdk:87378 54040:51812 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T11:58:29.687 | |||
| [2026-07-15T11:58:29.687 info Netsdk:87378 31208:8484 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T11:58:29.688 info Netsdk:87378 31208:8484 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043550000 | |||
| [2026-07-15T11:58:29.688 info Netsdk:87378 31208:8484 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T11:58:29.691 info Netsdk:87378 31208:8484 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000031320090, dwUser=0000000000000000]. | |||
| [2026-07-15T11:58:29.691 info Netsdk:87378 31208:8484 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T11:58:29.691 info Netsdk:87378 31208:8484 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T11:58:29.691 info Netsdk:87378 31208:8484 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T11:58:29.692 info Netsdk:87378 31208:8484 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T11:58:29.692 info Netsdk:87378 31208:8484 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T13:43:55.243 | |||
| [2026-07-15T13:43:55.243 info Netsdk:87378 16736:42940 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T13:43:55.245 info Netsdk:87378 16736:42940 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042560000 | |||
| [2026-07-15T13:43:55.245 info Netsdk:87378 16736:42940 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T13:43:55.249 info Netsdk:87378 16736:42940 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000032BD0090, dwUser=0000000000000000]. | |||
| [2026-07-15T13:43:55.249 info Netsdk:87378 16736:42940 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T13:43:55.249 info Netsdk:87378 16736:42940 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T13:43:55.249 info Netsdk:87378 16736:42940 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T13:43:55.250 info Netsdk:87378 16736:42940 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T13:43:55.250 info Netsdk:87378 16736:42940 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T13:57:31.372 | |||
| [2026-07-15T13:57:31.372 info Netsdk:87378 41428:36576 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T13:57:31.374 info Netsdk:87378 41428:36576 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042260000 | |||
| [2026-07-15T13:57:31.374 info Netsdk:87378 41428:36576 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T13:57:31.376 info Netsdk:87378 41428:36576 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000030EA0090, dwUser=0000000000000000]. | |||
| [2026-07-15T13:57:31.376 info Netsdk:87378 41428:36576 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T13:57:31.376 info Netsdk:87378 41428:36576 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T13:57:31.376 info Netsdk:87378 41428:36576 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T13:57:31.377 info Netsdk:87378 41428:36576 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T13:57:31.377 info Netsdk:87378 41428:36576 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T14:27:20.242 | |||
| [2026-07-15T14:27:20.242 info Netsdk:87378 6764:25780 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T14:27:20.243 info Netsdk:87378 6764:25780 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000044360000 | |||
| [2026-07-15T14:27:20.243 info Netsdk:87378 6764:25780 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T14:27:20.247 info Netsdk:87378 6764:25780 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000FD0090, dwUser=0000000000000000]. | |||
| [2026-07-15T14:27:20.247 info Netsdk:87378 6764:25780 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T14:27:20.247 info Netsdk:87378 6764:25780 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T14:27:20.247 info Netsdk:87378 6764:25780 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T14:27:20.248 info Netsdk:87378 6764:25780 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T14:27:20.248 info Netsdk:87378 6764:25780 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T14:36:25.335 | |||
| [2026-07-15T14:36:25.335 info Netsdk:87378 17728:52160 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T14:36:25.337 info Netsdk:87378 17728:52160 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043DE0000 | |||
| [2026-07-15T14:36:25.337 info Netsdk:87378 17728:52160 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T14:36:25.339 info Netsdk:87378 17728:52160 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000034C20090, dwUser=0000000000000000]. | |||
| [2026-07-15T14:36:25.339 info Netsdk:87378 17728:52160 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T14:36:25.339 info Netsdk:87378 17728:52160 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T14:36:25.339 info Netsdk:87378 17728:52160 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T14:36:25.340 info Netsdk:87378 17728:52160 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T14:36:25.340 info Netsdk:87378 17728:52160 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T14:42:57.141 | |||
| [2026-07-15T14:42:57.141 info Netsdk:87378 29988:46068 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T14:42:57.143 info Netsdk:87378 29988:46068 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043BB0000 | |||
| [2026-07-15T14:42:57.143 info Netsdk:87378 29988:46068 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T14:42:57.146 info Netsdk:87378 29988:46068 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001890090, dwUser=0000000000000000]. | |||
| [2026-07-15T14:42:57.146 info Netsdk:87378 29988:46068 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T14:42:57.146 info Netsdk:87378 29988:46068 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T14:42:57.146 info Netsdk:87378 29988:46068 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T14:42:57.147 info Netsdk:87378 29988:46068 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T14:42:57.147 info Netsdk:87378 29988:46068 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T14:51:11.223 | |||
| [2026-07-15T14:51:11.223 info Netsdk:87378 2860:50360 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T14:51:11.227 info Netsdk:87378 2860:50360 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043780000 | |||
| [2026-07-15T14:51:11.227 info Netsdk:87378 2860:50360 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T14:51:11.232 info Netsdk:87378 2860:50360 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000030D50090, dwUser=0000000000000000]. | |||
| [2026-07-15T14:51:11.232 info Netsdk:87378 2860:50360 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T14:51:11.232 info Netsdk:87378 2860:50360 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T14:51:11.232 info Netsdk:87378 2860:50360 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T14:51:11.233 info Netsdk:87378 2860:50360 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T14:51:11.233 info Netsdk:87378 2860:50360 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T14:58:16.056 | |||
| [2026-07-15T14:58:16.056 info Netsdk:87378 11428:37688 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T14:58:16.058 info Netsdk:87378 11428:37688 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042EA0000 | |||
| [2026-07-15T14:58:16.058 info Netsdk:87378 11428:37688 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T14:58:16.064 info Netsdk:87378 11428:37688 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000019E0090, dwUser=0000000000000000]. | |||
| [2026-07-15T14:58:16.064 info Netsdk:87378 11428:37688 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T14:58:16.064 info Netsdk:87378 11428:37688 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T14:58:16.064 info Netsdk:87378 11428:37688 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T14:58:16.065 info Netsdk:87378 11428:37688 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T14:58:16.065 info Netsdk:87378 11428:37688 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T15:01:30.704 | |||
| [2026-07-15T15:01:30.704 info Netsdk:87378 20040:42508 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T15:01:30.707 info Netsdk:87378 20040:42508 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042300000 | |||
| [2026-07-15T15:01:30.707 info Netsdk:87378 20040:42508 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T15:01:30.709 info Netsdk:87378 20040:42508 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002C50090, dwUser=0000000000000000]. | |||
| [2026-07-15T15:01:30.709 info Netsdk:87378 20040:42508 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T15:01:30.709 info Netsdk:87378 20040:42508 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T15:01:30.709 info Netsdk:87378 20040:42508 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T15:01:30.710 info Netsdk:87378 20040:42508 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T15:01:30.710 info Netsdk:87378 20040:42508 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T15:06:00.795 | |||
| [2026-07-15T15:06:00.795 info Netsdk:87378 11656:50380 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T15:06:00.796 info Netsdk:87378 11656:50380 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000425B0000 | |||
| [2026-07-15T15:06:00.797 info Netsdk:87378 11656:50380 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T15:06:00.800 info Netsdk:87378 11656:50380 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035180090, dwUser=0000000000000000]. | |||
| [2026-07-15T15:06:00.800 info Netsdk:87378 11656:50380 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T15:06:00.800 info Netsdk:87378 11656:50380 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T15:06:00.800 info Netsdk:87378 11656:50380 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T15:06:00.801 info Netsdk:87378 11656:50380 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T15:06:00.801 info Netsdk:87378 11656:50380 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T15:28:49.337 | |||
| [2026-07-15T15:28:49.338 info Netsdk:87378 51444:55056 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T15:28:49.340 info Netsdk:87378 51444:55056 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DCF0000 | |||
| [2026-07-15T15:28:49.341 info Netsdk:87378 51444:55056 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T15:28:49.344 info Netsdk:87378 51444:55056 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002580090, dwUser=0000000000000000]. | |||
| [2026-07-15T15:28:49.344 info Netsdk:87378 51444:55056 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T15:28:49.344 info Netsdk:87378 51444:55056 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T15:28:49.344 info Netsdk:87378 51444:55056 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T15:28:49.344 info Netsdk:87378 51444:55056 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T15:28:49.345 info Netsdk:87378 51444:55056 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T16:16:35.941 | |||
| [2026-07-15T16:16:35.941 info Netsdk:87378 23384:16088 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T16:16:35.943 info Netsdk:87378 23384:16088 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043780000 | |||
| [2026-07-15T16:16:35.943 info Netsdk:87378 23384:16088 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T16:16:35.946 info Netsdk:87378 23384:16088 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000F50090, dwUser=0000000000000000]. | |||
| [2026-07-15T16:16:35.946 info Netsdk:87378 23384:16088 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T16:16:35.946 info Netsdk:87378 23384:16088 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T16:16:35.946 info Netsdk:87378 23384:16088 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T16:16:35.947 info Netsdk:87378 23384:16088 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T16:16:35.947 info Netsdk:87378 23384:16088 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T16:17:07.291 | |||
| [2026-07-15T16:17:07.291 info Netsdk:87378 55884:15408 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T16:17:07.294 info Netsdk:87378 55884:15408 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043B80000 | |||
| [2026-07-15T16:17:07.294 info Netsdk:87378 55884:15408 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000331B0090, dwUser=0000000000000000]. | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T16:17:07.298 info Netsdk:87378 55884:15408 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T16:37:35.227 | |||
| [2026-07-15T16:37:35.228 info Netsdk:87378 41232:17592 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T16:37:35.229 info Netsdk:87378 41232:17592 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000045170000 | |||
| [2026-07-15T16:37:35.229 info Netsdk:87378 41232:17592 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T16:37:35.231 info Netsdk:87378 41232:17592 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001970090, dwUser=0000000000000000]. | |||
| [2026-07-15T16:37:35.231 info Netsdk:87378 41232:17592 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T16:37:35.231 info Netsdk:87378 41232:17592 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T16:37:35.231 info Netsdk:87378 41232:17592 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T16:37:35.232 info Netsdk:87378 41232:17592 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T16:37:35.232 info Netsdk:87378 41232:17592 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T17:32:37.183 | |||
| [2026-07-15T17:32:37.183 info Netsdk:87378 55788:38500 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T17:32:37.185 info Netsdk:87378 55788:38500 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000046BC0000 | |||
| [2026-07-15T17:32:37.185 info Netsdk:87378 55788:38500 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T17:32:37.187 info Netsdk:87378 55788:38500 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003530090, dwUser=0000000000000000]. | |||
| [2026-07-15T17:32:37.187 info Netsdk:87378 55788:38500 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T17:32:37.187 info Netsdk:87378 55788:38500 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T17:32:37.188 info Netsdk:87378 55788:38500 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T17:32:37.188 info Netsdk:87378 55788:38500 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T17:32:37.188 info Netsdk:87378 55788:38500 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T17:50:35.489 | |||
| [2026-07-15T17:50:35.489 info Netsdk:87378 19644:14788 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T17:50:35.491 info Netsdk:87378 19644:14788 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000430A0000 | |||
| [2026-07-15T17:50:35.491 info Netsdk:87378 19644:14788 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T17:50:35.494 info Netsdk:87378 19644:14788 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003720090, dwUser=0000000000000000]. | |||
| [2026-07-15T17:50:35.494 info Netsdk:87378 19644:14788 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T17:50:35.494 info Netsdk:87378 19644:14788 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T17:50:35.494 info Netsdk:87378 19644:14788 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T17:50:35.495 info Netsdk:87378 19644:14788 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T17:50:35.495 info Netsdk:87378 19644:14788 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:31:56.191 | |||
| [2026-07-15T18:31:56.191 info Netsdk:87378 9592:54760 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:31:56.194 info Netsdk:87378 9592:54760 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043A70000 | |||
| [2026-07-15T18:31:56.194 info Netsdk:87378 9592:54760 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:31:56.198 info Netsdk:87378 9592:54760 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000016A0090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:31:56.198 info Netsdk:87378 9592:54760 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:31:56.198 info Netsdk:87378 9592:54760 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:31:56.198 info Netsdk:87378 9592:54760 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:31:56.199 info Netsdk:87378 9592:54760 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:31:56.199 info Netsdk:87378 9592:54760 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:33:59.057 | |||
| [2026-07-15T18:33:59.057 info Netsdk:87378 34048:36188 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:33:59.061 info Netsdk:87378 34048:36188 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000414B0000 | |||
| [2026-07-15T18:33:59.061 info Netsdk:87378 34048:36188 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:33:59.064 info Netsdk:87378 34048:36188 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000032480090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:33:59.064 info Netsdk:87378 34048:36188 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:33:59.065 info Netsdk:87378 34048:36188 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:33:59.065 info Netsdk:87378 34048:36188 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:33:59.066 info Netsdk:87378 34048:36188 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:33:59.066 info Netsdk:87378 34048:36188 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:35:39.522 | |||
| [2026-07-15T18:35:39.522 info Netsdk:87378 54292:15972 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:35:39.525 info Netsdk:87378 54292:15972 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000041770000 | |||
| [2026-07-15T18:35:39.525 info Netsdk:87378 54292:15972 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:35:39.528 info Netsdk:87378 54292:15972 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000029E0090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:35:39.528 info Netsdk:87378 54292:15972 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:35:39.528 info Netsdk:87378 54292:15972 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:35:39.528 info Netsdk:87378 54292:15972 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:35:39.529 info Netsdk:87378 54292:15972 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:35:39.529 info Netsdk:87378 54292:15972 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:41:26.810 | |||
| [2026-07-15T18:41:26.810 info Netsdk:87378 50372:20700 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:41:26.812 info Netsdk:87378 50372:20700 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000041BC0000 | |||
| [2026-07-15T18:41:26.812 info Netsdk:87378 50372:20700 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:41:26.816 info Netsdk:87378 50372:20700 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000313A0090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:41:26.816 info Netsdk:87378 50372:20700 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:41:26.816 info Netsdk:87378 50372:20700 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:41:26.816 info Netsdk:87378 50372:20700 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:41:26.817 info Netsdk:87378 50372:20700 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:41:26.817 info Netsdk:87378 50372:20700 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:46:16.507 | |||
| [2026-07-15T18:46:16.507 info Netsdk:87378 52488:41684 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:46:16.510 info Netsdk:87378 52488:41684 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043B30000 | |||
| [2026-07-15T18:46:16.511 info Netsdk:87378 52488:41684 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:46:16.514 info Netsdk:87378 52488:41684 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002CB0090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:46:16.514 info Netsdk:87378 52488:41684 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:46:16.514 info Netsdk:87378 52488:41684 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:46:16.514 info Netsdk:87378 52488:41684 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:46:16.515 info Netsdk:87378 52488:41684 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:46:16.515 info Netsdk:87378 52488:41684 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T18:58:04.636 | |||
| [2026-07-15T18:58:04.636 info Netsdk:87378 2604:30184 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T18:58:04.639 info Netsdk:87378 2604:30184 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042ED0000 | |||
| [2026-07-15T18:58:04.639 info Netsdk:87378 2604:30184 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T18:58:04.643 info Netsdk:87378 2604:30184 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000031150090, dwUser=0000000000000000]. | |||
| [2026-07-15T18:58:04.643 info Netsdk:87378 2604:30184 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T18:58:04.643 info Netsdk:87378 2604:30184 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T18:58:04.643 info Netsdk:87378 2604:30184 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T18:58:04.644 info Netsdk:87378 2604:30184 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T18:58:04.644 info Netsdk:87378 2604:30184 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T19:01:19.664 | |||
| [2026-07-15T19:01:19.664 info Netsdk:87378 46356:55996 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T19:01:19.667 info Netsdk:87378 46356:55996 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000440D0000 | |||
| [2026-07-15T19:01:19.667 info Netsdk:87378 46356:55996 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T19:01:19.671 info Netsdk:87378 46356:55996 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003900090, dwUser=0000000000000000]. | |||
| [2026-07-15T19:01:19.671 info Netsdk:87378 46356:55996 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T19:01:19.671 info Netsdk:87378 46356:55996 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T19:01:19.671 info Netsdk:87378 46356:55996 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T19:01:19.673 info Netsdk:87378 46356:55996 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T19:01:19.673 info Netsdk:87378 46356:55996 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-15T19:04:49.474 | |||
| [2026-07-15T19:04:49.474 info Netsdk:87378 10012:13148 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-15T19:04:49.476 info Netsdk:87378 10012:13148 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000423F0000 | |||
| [2026-07-15T19:04:49.476 info Netsdk:87378 10012:13148 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-15T19:04:49.481 info Netsdk:87378 10012:13148 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000032BC0090, dwUser=0000000000000000]. | |||
| [2026-07-15T19:04:49.481 info Netsdk:87378 10012:13148 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-15T19:04:49.481 info Netsdk:87378 10012:13148 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-15T19:04:49.481 info Netsdk:87378 10012:13148 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-15T19:04:49.482 info Netsdk:87378 10012:13148 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-15T19:04:49.482 info Netsdk:87378 10012:13148 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,143 @@ | |||
| Begin Time:2026-07-16T09:15:07.494 | |||
| [2026-07-16T09:15:07.494 info Netsdk:87378 26040:21780 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T09:15:07.496 info Netsdk:87378 26040:21780 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D960000 | |||
| [2026-07-16T09:15:07.496 info Netsdk:87378 26040:21780 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002B40090, dwUser=0000000000000000]. | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T09:15:07.498 info Netsdk:87378 26040:21780 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T09:27:45.778 | |||
| [2026-07-16T09:27:45.778 info Netsdk:87378 19024:30132 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T09:27:45.780 info Netsdk:87378 19024:30132 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DB70000 | |||
| [2026-07-16T09:27:45.780 info Netsdk:87378 19024:30132 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T09:27:45.782 info Netsdk:87378 19024:30132 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003210090, dwUser=0000000000000000]. | |||
| [2026-07-16T09:27:45.782 info Netsdk:87378 19024:30132 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T09:27:45.782 info Netsdk:87378 19024:30132 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T09:27:45.782 info Netsdk:87378 19024:30132 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T09:27:45.783 info Netsdk:87378 19024:30132 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T09:27:45.783 info Netsdk:87378 19024:30132 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T10:21:30.002 | |||
| [2026-07-16T10:21:30.002 info Netsdk:87378 36120:30244 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T10:21:30.004 info Netsdk:87378 36120:30244 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000043000000 | |||
| [2026-07-16T10:21:30.004 info Netsdk:87378 36120:30244 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003350090, dwUser=0000000000000000]. | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T10:21:30.006 info Netsdk:87378 36120:30244 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T10:26:00.681 | |||
| [2026-07-16T10:26:00.681 info Netsdk:87378 30332:12796 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T10:26:00.682 info Netsdk:87378 30332:12796 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000042E30000 | |||
| [2026-07-16T10:26:00.682 info Netsdk:87378 30332:12796 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T10:26:00.685 info Netsdk:87378 30332:12796 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000018A0090, dwUser=0000000000000000]. | |||
| [2026-07-16T10:26:00.685 info Netsdk:87378 30332:12796 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T10:26:00.685 info Netsdk:87378 30332:12796 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T10:26:00.685 info Netsdk:87378 30332:12796 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T10:26:00.686 info Netsdk:87378 30332:12796 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T10:26:00.686 info Netsdk:87378 30332:12796 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T10:28:31.231 | |||
| [2026-07-16T10:28:31.231 info Netsdk:87378 11372:44312 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T10:28:31.232 info Netsdk:87378 11372:44312 AVNetSDKMgr.cpp:551]avnetsdk module handle: 0000000044800000 | |||
| [2026-07-16T10:28:31.232 info Netsdk:87378 11372:44312 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T10:28:31.234 info Netsdk:87378 11372:44312 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001530090, dwUser=0000000000000000]. | |||
| [2026-07-16T10:28:31.234 info Netsdk:87378 11372:44312 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T10:28:31.234 info Netsdk:87378 11372:44312 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T10:28:31.234 info Netsdk:87378 11372:44312 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T10:28:31.235 info Netsdk:87378 11372:44312 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T10:28:31.235 info Netsdk:87378 11372:44312 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T11:46:29.281 | |||
| [2026-07-16T11:46:29.281 info Netsdk:87378 42712:15536 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T11:46:29.283 info Netsdk:87378 42712:15536 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DE80000 | |||
| [2026-07-16T11:46:29.283 info Netsdk:87378 42712:15536 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T11:46:29.284 info Netsdk:87378 42712:15536 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002BD0090, dwUser=0000000000000000]. | |||
| [2026-07-16T11:46:29.284 info Netsdk:87378 42712:15536 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T11:46:29.284 info Netsdk:87378 42712:15536 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T11:46:29.284 info Netsdk:87378 42712:15536 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T11:46:29.285 info Netsdk:87378 42712:15536 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T11:46:29.285 info Netsdk:87378 42712:15536 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T11:47:36.840 | |||
| [2026-07-16T11:47:36.840 info Netsdk:87378 3712:11748 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T11:47:36.842 info Netsdk:87378 3712:11748 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003CCF0000 | |||
| [2026-07-16T11:47:36.842 info Netsdk:87378 3712:11748 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=000000002D830090, dwUser=0000000000000000]. | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T11:47:36.844 info Netsdk:87378 3712:11748 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T11:48:43.807 | |||
| [2026-07-16T11:48:43.807 info Netsdk:87378 9080:42116 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T11:48:43.808 info Netsdk:87378 9080:42116 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D8E0000 | |||
| [2026-07-16T11:48:43.808 info Netsdk:87378 9080:42116 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003650090, dwUser=0000000000000000]. | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T11:48:43.811 info Netsdk:87378 9080:42116 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T11:50:21.648 | |||
| [2026-07-16T11:50:21.648 info Netsdk:87378 22944:46096 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T11:50:21.650 info Netsdk:87378 22944:46096 AVNetSDKMgr.cpp:551]avnetsdk module handle: 00000000445D0000 | |||
| [2026-07-16T11:50:21.650 info Netsdk:87378 22944:46096 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T11:50:21.652 info Netsdk:87378 22944:46096 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000030A80090, dwUser=0000000000000000]. | |||
| [2026-07-16T11:50:21.652 info Netsdk:87378 22944:46096 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T11:50:21.652 info Netsdk:87378 22944:46096 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T11:50:21.652 info Netsdk:87378 22944:46096 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T11:50:21.653 info Netsdk:87378 22944:46096 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T11:50:21.653 info Netsdk:87378 22944:46096 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T13:45:13.672 | |||
| [2026-07-16T13:45:13.672 info Netsdk:87378 44892:30208 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T13:45:13.673 info Netsdk:87378 44892:30208 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003D8C0000 | |||
| [2026-07-16T13:45:13.673 info Netsdk:87378 44892:30208 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000000FF0090, dwUser=0000000000000000]. | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T13:45:13.675 info Netsdk:87378 44892:30208 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T15:34:08.682 | |||
| [2026-07-16T15:34:08.682 info Netsdk:87378 47556:49440 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T15:34:08.683 info Netsdk:87378 47556:49440 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DEC0000 | |||
| [2026-07-16T15:34:08.683 info Netsdk:87378 47556:49440 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035B10090, dwUser=0000000000000000]. | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T15:34:08.686 info Netsdk:87378 47556:49440 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T16:04:16.810 | |||
| [2026-07-16T16:04:16.810 info Netsdk:87378 50048:30748 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T16:04:16.814 info Netsdk:87378 50048:30748 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E5A0000 | |||
| [2026-07-16T16:04:16.815 info Netsdk:87378 50048:30748 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T16:04:16.818 info Netsdk:87378 50048:30748 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000003A00090, dwUser=0000000000000000]. | |||
| [2026-07-16T16:04:16.818 info Netsdk:87378 50048:30748 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T16:04:16.818 info Netsdk:87378 50048:30748 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T16:04:16.818 info Netsdk:87378 50048:30748 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T16:04:16.819 info Netsdk:87378 50048:30748 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T16:04:16.819 info Netsdk:87378 50048:30748 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-16T17:04:47.158 | |||
| [2026-07-16T17:04:47.158 info Netsdk:87378 47900:39216 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-16T17:04:47.160 info Netsdk:87378 47900:39216 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E4F0000 | |||
| [2026-07-16T17:04:47.160 info Netsdk:87378 47900:39216 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-16T17:04:47.162 info Netsdk:87378 47900:39216 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000036190090, dwUser=0000000000000000]. | |||
| [2026-07-16T17:04:47.162 info Netsdk:87378 47900:39216 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-16T17:04:47.162 info Netsdk:87378 47900:39216 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-16T17:04:47.162 info Netsdk:87378 47900:39216 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-16T17:04:47.163 info Netsdk:87378 47900:39216 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-16T17:04:47.163 info Netsdk:87378 47900:39216 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,66 @@ | |||
| Begin Time:2026-07-17T09:16:43.790 | |||
| [2026-07-17T09:16:43.790 info Netsdk:87378 35492:36132 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T09:16:43.791 info Netsdk:87378 35492:36132 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DE90000 | |||
| [2026-07-17T09:16:43.791 info Netsdk:87378 35492:36132 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T09:16:43.793 info Netsdk:87378 35492:36132 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001500090, dwUser=0000000000000000]. | |||
| [2026-07-17T09:16:43.794 info Netsdk:87378 35492:36132 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T09:16:43.794 info Netsdk:87378 35492:36132 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T09:16:43.794 info Netsdk:87378 35492:36132 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T09:16:43.794 info Netsdk:87378 35492:36132 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T09:16:43.794 info Netsdk:87378 35492:36132 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-17T10:27:15.280 | |||
| [2026-07-17T10:27:15.280 info Netsdk:87378 39052:35572 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T10:27:15.281 info Netsdk:87378 39052:35572 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E400000 | |||
| [2026-07-17T10:27:15.281 info Netsdk:87378 39052:35572 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T10:27:15.283 info Netsdk:87378 39052:35572 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000039B0090, dwUser=0000000000000000]. | |||
| [2026-07-17T10:27:15.283 info Netsdk:87378 39052:35572 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T10:27:15.283 info Netsdk:87378 39052:35572 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T10:27:15.283 info Netsdk:87378 39052:35572 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T10:27:15.285 info Netsdk:87378 39052:35572 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T10:27:15.285 info Netsdk:87378 39052:35572 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-17T11:07:53.020 | |||
| [2026-07-17T11:07:53.020 info Netsdk:87378 40860:19880 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T11:07:53.022 info Netsdk:87378 40860:19880 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E1C0000 | |||
| [2026-07-17T11:07:53.022 info Netsdk:87378 40860:19880 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T11:07:53.023 info Netsdk:87378 40860:19880 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035D80090, dwUser=0000000000000000]. | |||
| [2026-07-17T11:07:53.023 info Netsdk:87378 40860:19880 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T11:07:53.024 info Netsdk:87378 40860:19880 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T11:07:53.024 info Netsdk:87378 40860:19880 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T11:07:53.024 info Netsdk:87378 40860:19880 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T11:07:53.024 info Netsdk:87378 40860:19880 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-17T11:38:35.631 | |||
| [2026-07-17T11:38:35.631 info Netsdk:87378 24152:42184 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T11:38:35.632 info Netsdk:87378 24152:42184 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DE10000 | |||
| [2026-07-17T11:38:35.632 info Netsdk:87378 24152:42184 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T11:38:35.635 info Netsdk:87378 24152:42184 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=00000000015D0090, dwUser=0000000000000000]. | |||
| [2026-07-17T11:38:35.635 info Netsdk:87378 24152:42184 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T11:38:35.635 info Netsdk:87378 24152:42184 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T11:38:35.635 info Netsdk:87378 24152:42184 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T11:38:35.636 info Netsdk:87378 24152:42184 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T11:38:35.636 info Netsdk:87378 24152:42184 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-17T11:47:14.928 | |||
| [2026-07-17T11:47:14.928 info Netsdk:87378 42124:41012 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T11:47:14.930 info Netsdk:87378 42124:41012 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DF60000 | |||
| [2026-07-17T11:47:14.930 info Netsdk:87378 42124:41012 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T11:47:14.932 info Netsdk:87378 42124:41012 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035C50090, dwUser=0000000000000000]. | |||
| [2026-07-17T11:47:14.932 info Netsdk:87378 42124:41012 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T11:47:14.932 info Netsdk:87378 42124:41012 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T11:47:14.932 info Netsdk:87378 42124:41012 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T11:47:14.933 info Netsdk:87378 42124:41012 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T11:47:14.933 info Netsdk:87378 42124:41012 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-07-17T15:47:42.627 | |||
| [2026-07-17T15:47:42.627 info Netsdk:87378 77660:19660 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-17T15:47:42.632 info Netsdk:87378 77660:19660 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E1C0000 | |||
| [2026-07-17T15:47:42.632 info Netsdk:87378 77660:19660 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-17T15:47:42.639 info Netsdk:87378 77660:19660 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000002890090, dwUser=0000000000000000]. | |||
| [2026-07-17T15:47:42.639 info Netsdk:87378 77660:19660 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-17T15:47:42.639 info Netsdk:87378 77660:19660 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-17T15:47:42.639 info Netsdk:87378 77660:19660 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-17T15:47:42.641 info Netsdk:87378 77660:19660 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-17T15:47:42.641 info Netsdk:87378 77660:19660 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,11 @@ | |||
| Begin Time:2026-07-21T15:55:24.438 | |||
| [2026-07-21T15:55:24.438 info Netsdk:87378 54276:27440 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-07-21T15:55:24.440 info Netsdk:87378 54276:27440 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DF00000 | |||
| [2026-07-21T15:55:24.440 info Netsdk:87378 54276:27440 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-07-21T15:55:24.442 info Netsdk:87378 54276:27440 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001480090, dwUser=0000000000000000]. | |||
| [2026-07-21T15:55:24.442 info Netsdk:87378 54276:27440 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-07-21T15:55:24.442 info Netsdk:87378 54276:27440 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-07-21T15:55:24.442 info Netsdk:87378 54276:27440 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-07-21T15:55:24.443 info Netsdk:87378 54276:27440 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-07-21T15:55:24.443 info Netsdk:87378 54276:27440 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -0,0 +1,22 @@ | |||
| Begin Time:2026-08-04T13:49:05.612 | |||
| [2026-08-04T13:49:05.612 info Netsdk:87378 50660:65192 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-08-04T13:49:05.616 info Netsdk:87378 50660:65192 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003E6C0000 | |||
| [2026-08-04T13:49:05.616 info Netsdk:87378 50660:65192 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-08-04T13:49:05.620 info Netsdk:87378 50660:65192 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000001DA0090, dwUser=0000000000000000]. | |||
| [2026-08-04T13:49:05.620 info Netsdk:87378 50660:65192 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-08-04T13:49:05.620 info Netsdk:87378 50660:65192 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-08-04T13:49:05.620 info Netsdk:87378 50660:65192 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-08-04T13:49:05.621 info Netsdk:87378 50660:65192 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-08-04T13:49:05.621 info Netsdk:87378 50660:65192 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| Begin Time:2026-08-04T14:25:28.914 | |||
| [2026-08-04T14:25:28.914 info Netsdk:87378 14308:5660 AVNetSDKMgr.cpp:506]Load avnetsdk library dynamically | |||
| [2026-08-04T14:25:28.917 info Netsdk:87378 14308:5660 AVNetSDKMgr.cpp:551]avnetsdk module handle: 000000003DFD0000 | |||
| [2026-08-04T14:25:28.917 info Netsdk:87378 14308:5660 AVNetSDKMgr.cpp:826]Load configsdk dynamically | |||
| [2026-08-04T14:25:28.920 info Netsdk:87378 14308:5660 netsdk.cpp:302]Enter CLIENT_SetAutoReconnect:[cbAutoConnect=0000000035C50090, dwUser=0000000000000000]. | |||
| [2026-08-04T14:25:28.920 info Netsdk:87378 14308:5660 netsdk.cpp:304]Leave CLIENT_SetAutoReconnect. | |||
| [2026-08-04T14:25:28.920 info Netsdk:87378 14308:5660 netsdk.cpp:326]Enter CLIENT_SetConnectTime:[nWaitTime=5000, nTryTimes=1]. | |||
| [2026-08-04T14:25:28.920 info Netsdk:87378 14308:5660 netsdk.cpp:339]Leave CLIENT_SetConnectTime. | |||
| [2026-08-04T14:25:28.921 info Netsdk:87378 14308:5660 netsdk.cpp:352]Enter CLIENT_SetNetworkParam:[nWaittime=0, nConnectTime=10000, nConnectTryNum=0, nSubConnectSpaceTime=0, nGetDevInfoTime=3000, nConnectBufSize=0, nGetConnInfoTime=3000, nSearchRecordTime=0, nsubDisconnetTime=0, byNetType=0, byPlaybackBufSize=0, bDetectDisconnTime=0, bKeepLifeInterval=0, nPicBufSize=0]. | |||
| [2026-08-04T14:25:28.921 info Netsdk:87378 14308:5660 netsdk.cpp:367]Leave CLIENT_SetNetworkParam. | |||
| @ -1,4 +1,20 @@ | |||
| [2025-09-16 11:20:34.679][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/workspace/inspect-nvr/lib/zlib1.dll], hHandleRet[1841233920] | |||
| [2025-09-16 11:20:34.679][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1. | |||
| [2025-09-16 11:20:34.679][INF] The COM:Core ver is 6.1.9.47, 2022_11_11. Async:1. | |||
| [2025-09-16 11:20:34.679][INF] This HCNetSDK ver is 6.1.9.47 Ver 2022_11_11. | |||
| [2026-08-04 14:25:27.896][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/workspace/inspect-nvr/lib/zlib1.dll], hHandleRet[1892941824] | |||
| [2026-08-04 14:25:27.896][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1. | |||
| [2026-08-04 14:25:27.896][INF] The COM:Core ver is 6.1.9.47, 2022_11_11. Async:1. | |||
| [2026-08-04 14:25:27.896][INF] This HCNetSDK ver is 6.1.9.47 Ver 2022_11_11. | |||
| [2026-08-04 14:25:40.005][INF] Login dev 192.168.1.249:8000. | |||
| [2026-08-04 14:25:40.005][INF] dwTotalNum[2048] | |||
| [2026-08-04 14:25:40.026][INF] Private connect 192.168.1.249:8000 sock=5072 this=0x45304904 cmd=0x10000 port=50953 | |||
| [2026-08-04 14:25:40.026][INF] LogonDev1 in[192.168.1.249:8000] | |||
| [2026-08-04 14:25:40.029][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/workspace/inspect-nvr/lib/libcrypto-1_1-x64.dll], hHandleRet[1581252608] | |||
| [2026-08-04 14:25:40.029][DBG] Load [libcrypto-1_1-x64.dll] SUCC, Real Path[D:\workspace\inspect-nvr\lib\libcrypto-1_1-x64.dll] | |||
| [2026-08-04 14:25:40.031][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/workspace/inspect-nvr/lib/libssl-1_1-x64.dll], hHandleRet[-195690496] | |||
| [2026-08-04 14:25:40.031][DBG] Load [libssl-1_1-x64.dll] SUCC, Real Path[D:\workspace\inspect-nvr\lib\libssl-1_1-x64.dll] | |||
| [2026-08-04 14:25:40.031][INF] SSLTRANSAPI::IsAllAPILoaded, SSL_library_init Unload | |||
| [2026-08-04 14:25:40.031][INF] OpenSSL, Not All Function Loaded! | |||
| [2026-08-04 14:25:40.031][INF] SSLTRANSAPI::PrintVersion, OpenSSL version info [OpenSSL 1.1.1l 24 Aug 2021] | |||
| [2026-08-04 14:25:40.031][INF] CSSLTrans::SSLCtxInit, dwSSLVersion[6], m_fnTLSServerMethod | |||
| [2026-08-04 14:25:40.034][ERR] CSSLTrans::SSLTrans_CTX_Load_CA, invalid path[D:/workspace/inspect-nvr/lib/cert/\] | |||
| [2026-08-04 16:37:07.588][INF] COM_Logout[0][0] | |||
| [2026-08-04 16:37:07.593][DBG] CUserMgr::UnRegisterHeartProxy[0] | |||
| [2026-08-04 16:37:07.594][INF] Private connect 192.168.1.249:8000 sock=5076 this=0x45304904 cmd=0x10100 port=56011 | |||
| @ -0,0 +1,209 @@ | |||
| package com.inspect.nvr.controller; | |||
| import com.inspect.nvr.domain.Infrared.Camera; | |||
| import com.inspect.nvr.hikVision.utils.AjaxResult; | |||
| import com.inspect.nvr.tempCount.TempCount; | |||
| import com.inspect.nvr.utils.StringUtils; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.net.ftp.FTPFile; | |||
| import org.apache.commons.net.ftp.FTPSClient; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.annotation.Resource; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.nio.file.Files; | |||
| import java.nio.file.Path; | |||
| import java.nio.file.Paths; | |||
| import java.io.*; | |||
| import java.nio.file.*; | |||
| import java.util.*; | |||
| import java.util.concurrent.TimeUnit; | |||
| import static java.util.Set.*; | |||
| @CrossOrigin | |||
| @Slf4j | |||
| @Controller | |||
| @RequestMapping | |||
| public class Test { | |||
| @Resource | |||
| private TempCount tempCount; | |||
| @PostMapping("/hw/test2") | |||
| @ResponseBody | |||
| @CrossOrigin | |||
| public void cameraHong1( @RequestBody Camera camera) throws InterruptedException { | |||
| int i = 0; | |||
| int j = 0; | |||
| List<String> strings = listJpgFilePaths(camera.getAddress()); | |||
| for (String path : strings) { | |||
| log.info("path:{}",path); | |||
| InputStream inputStream = downloadFtp(path); | |||
| if(StringUtils.isNotNull(inputStream)){ | |||
| log.info("处理图片{}",i++); | |||
| } else { | |||
| log.info("下载图片失败{}",j++); | |||
| } | |||
| } | |||
| } | |||
| @PostMapping("/hw/test3") | |||
| @ResponseBody | |||
| @CrossOrigin | |||
| public void cameraHong3( @RequestBody Camera camera) throws InterruptedException { | |||
| int i = 0; | |||
| int j = 0; | |||
| InputStream inputStream = downloadFtp(camera.getAddress()); | |||
| if(StringUtils.isNotNull(inputStream)){ | |||
| log.info("处理图片{}",i++); | |||
| } else { | |||
| log.info("下载图片失败{}",j++); | |||
| } | |||
| } | |||
| /** | |||
| * 查询FTP指定目录下所有JPG文件的完整路径 | |||
| * @return JPG文件路径列表,如:["1/2025/09/16/78/CCD/file1.jpg", ...] | |||
| */ | |||
| public List<String> listJpgFilePaths(String path) { | |||
| List<String> jpgPaths = new ArrayList<>(); | |||
| FTPSClient ftps = null; | |||
| // 目标目录 | |||
| String targetDir = path; | |||
| try { | |||
| // 初始化FTPS客户端(隐式SSL) | |||
| ftps = new FTPSClient(true); | |||
| // 连接服务器 | |||
| ftps.connect("192.168.4.123", 10990); | |||
| log.info("已连接到FTP服务器: 192.168.4.123:10990"); | |||
| // 登录 | |||
| boolean loginRes = ftps.login("ftpuser", "atia2018"); | |||
| System.out.println("登录结果: " + loginRes); | |||
| if (!loginRes) { | |||
| log.error("FTP登录失败,请检查用户名和密码"); | |||
| return jpgPaths; | |||
| } | |||
| // 配置FTP参数 | |||
| ftps.enterLocalPassiveMode(); | |||
| ftps.setControlEncoding("UTF-8"); | |||
| // 列出目标目录下的所有文件 | |||
| FTPFile[] files = ftps.listFiles(targetDir); | |||
| if (files == null) { | |||
| log.error("无法获取目录内容,可能目录不存在或无权限: " + targetDir); | |||
| return jpgPaths; | |||
| } | |||
| // 筛选JPG文件并收集完整路径 | |||
| for (FTPFile file : files) { | |||
| // 只处理文件,排除子目录 | |||
| if (file.isFile()) { | |||
| String fileName = file.getName(); | |||
| log.info("文件名:{}",fileName); | |||
| // 检查是否为JPG文件(不区分大小写) | |||
| String fullPath = targetDir + fileName; | |||
| jpgPaths.add(fullPath); | |||
| } | |||
| } | |||
| log.info("在目录 {} 下共找到 {} 个JPG文件", targetDir, jpgPaths.size()); | |||
| } catch (Exception e) { | |||
| log.error("查询FTP文件时发生错误", e); | |||
| } finally { | |||
| // 关闭FTP连接 | |||
| if (ftps != null && ftps.isConnected()) { | |||
| try { | |||
| ftps.logout(); | |||
| ftps.disconnect(); | |||
| log.info("FTP连接已关闭"); | |||
| } catch (Exception e) { | |||
| log.error("关闭FTP连接时发生错误", e); | |||
| } | |||
| } | |||
| } | |||
| return jpgPaths; | |||
| } | |||
| public InputStream downloadFtp(String downloadPath) { | |||
| FTPSClient ftps = null; | |||
| InputStream inputStream = null; | |||
| try { | |||
| ftps = new FTPSClient(true); | |||
| ftps.connect("192.168.4.123", 10990); | |||
| boolean loginRes = ftps.login("ftpuser", "atia2018"); | |||
| log.info("FTP登录结果: {}", loginRes); | |||
| if (!loginRes) { | |||
| log.error("FTP登录失败"); | |||
| return null; | |||
| } | |||
| ftps.setFileType(2); // 二进制模式 | |||
| ftps.enterLocalPassiveMode(); | |||
| ftps.setControlEncoding("UTF-8"); | |||
| ftps.setFileTransferMode(10); | |||
| ftps.execPROT("P"); | |||
| // 获取文件流 | |||
| inputStream = ftps.retrieveFileStream(downloadPath); | |||
| if (inputStream == null) { | |||
| log.warn("[FTP] DOWNLOAD FAIL, EMPTY STREAM: {}", downloadPath); | |||
| return null; | |||
| } | |||
| // 将数据读取到内存中 | |||
| ByteArrayOutputStream buffer = new ByteArrayOutputStream(); | |||
| int nRead; | |||
| byte[] data = new byte[8192]; | |||
| while ((nRead = inputStream.read(data, 0, data.length)) != -1) { | |||
| buffer.write(data, 0, nRead); | |||
| } | |||
| // 完成文件传输操作 | |||
| boolean completed = ftps.completePendingCommand(); | |||
| if (!completed) { | |||
| log.warn("FTP文件传输未正确完成: {}", downloadPath); | |||
| } | |||
| // 关闭原始流(重要:必须在completePendingCommand之后关闭) | |||
| inputStream.close(); | |||
| inputStream = null; // 防止finally再次关闭 | |||
| // 创建新的InputStream返回 | |||
| byte[] fileData = buffer.toByteArray(); | |||
| log.info("成功下载文件: {}, 大小: {} 字节", downloadPath, fileData.length); | |||
| return new ByteArrayInputStream(fileData); | |||
| } catch (Exception e) { | |||
| log.error("FTP下载错误: " + e.getMessage(), e); | |||
| return null; | |||
| } finally { | |||
| // 关闭原始输入流 | |||
| if (inputStream != null) { | |||
| try { | |||
| inputStream.close(); | |||
| } catch (IOException ignored) {} | |||
| } | |||
| // 关闭FTP连接 | |||
| if (ftps != null && ftps.isConnected()) { | |||
| try { | |||
| ftps.logout(); | |||
| ftps.disconnect(); | |||
| log.info("FTP连接已关闭"); | |||
| } catch (IOException e) { | |||
| log.error("FTP断开连接错误: " + e.getMessage(), e); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,13 @@ | |||
| package com.inspect.nvr.domain.common; | |||
| import lombok.Data; | |||
| @Data | |||
| public class AjaxResultResponse { | |||
| private Integer code; | |||
| private String msg; | |||
| private Object data; | |||
| } | |||
| @ -0,0 +1,11 @@ | |||
| package com.inspect.nvr.domain.common; | |||
| import lombok.Data; | |||
| @Data | |||
| public class FileUploadRequest { | |||
| private String filename; | |||
| private String uploadFile; | |||
| } | |||
| @ -0,0 +1,64 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import com.inspect.nvr.ivs.pojo.IvsCamera; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| /** | |||
| * IVS 获取子设备列表响应。摄像机扩展信息放在 cameraBriefExInfos 中。 | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsDeviceListResponse implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer resultCode; | |||
| private Object cameraBriefInfos; | |||
| private Object audioBriefInfos; | |||
| private Object alarmBriefInfos; | |||
| private Object cameraBriefInfosV2; | |||
| private Object shadowCameraBriefInfos; | |||
| private CameraBriefExInfos cameraBriefExInfos; | |||
| private List<Object> exceptionDomain; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class CameraBriefExInfos implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private int total; | |||
| private IndexRange indexRange; | |||
| private CameraBriefInfoExList cameraBriefInfoExList; | |||
| } | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class CameraBriefInfoExList implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private List<IvsCamera> cameraBriefInfoExes; | |||
| } | |||
| } | |||
| @ -0,0 +1,20 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Integer resultCode response used by the IVS platform operations. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsOperationResultView implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer resultCode; | |||
| } | |||
| @ -0,0 +1,24 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Request body for the IVS add-preset operation. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPresetAddRequest implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private String cameraCode; | |||
| private String presetName; | |||
| private Integer focusSwitch; | |||
| } | |||
| @ -0,0 +1,39 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Request body for the IVS preset-name modification operation. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPresetModifyRequest implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private String cameraCode; | |||
| private PtzPresetInfo ptzPresetInfo; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class PtzPresetInfo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer presetIndex; | |||
| private String presetName; | |||
| private Integer focusSwitch; | |||
| private String reserve; | |||
| } | |||
| } | |||
| @ -0,0 +1,22 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Common response for IVS preset add/delete operations. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPresetOperationView implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer resultCode; | |||
| private Integer presetIndex; | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Request body for changing the IVS preset account password. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPresetUserPasswordRequest implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private String userName; | |||
| private String password; | |||
| } | |||
| @ -0,0 +1,31 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** IVS /device/ptzcontrol 云台控制请求。 */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPtzControlRequest implements Serializable { | |||
| /** Java 序列化版本号,保证请求对象在序列化时的兼容性。 */ | |||
| private static final long serialVersionUID = 1L; | |||
| /** IVS 摄像机完整编码,格式为设备编码#域编码。 */ | |||
| private String cameraCode; | |||
| /** IVS 云台控制码,1~38;本次补齐 20~28 的海康映射。 */ | |||
| private Integer controlCode; | |||
| /** 云台控制参数1,按控制码表示运动模式、辅助设备类型或空参数。 */ | |||
| private String controlPara1; | |||
| /** 云台控制参数2,按控制码表示速度或空参数。 */ | |||
| private String controlPara2; | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** Strict response for IVS /device/ptzcontrol. */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsPtzControlResponse implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer resultCode; | |||
| private Integer lockStatus; | |||
| } | |||
| @ -0,0 +1,29 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** | |||
| * Strict response for the IVS /video/rtspurl/v1.0 contract. | |||
| * | |||
| * <p>The northbound contract contains only resultCode and rtspURL. Keep this | |||
| * type separate from the application's legacy multi-protocol view so that | |||
| * null or implementation-specific URL fields cannot leak into the protocol | |||
| * response.</p> | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsRtspUrlResponse implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Integer resultCode; | |||
| private String rtspURL; | |||
| } | |||
| @ -0,0 +1,29 @@ | |||
| package com.inspect.nvr.domain.ivs; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| /** | |||
| * IVS 4.1.12.1 平台抓图任务创建响应。 | |||
| * | |||
| * <p>IVS 文档要求 resultCode 和 taskID 位于响应顶层,不能再嵌套 resultBody。</p> | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class IvsSnapshotCommandResponse implements Serializable { | |||
| /** Java 序列化版本号,保证响应对象在序列化过程中的兼容性。 */ | |||
| private static final long serialVersionUID = 1L; | |||
| /** IVS 业务结果码,0 表示平台抓图任务创建成功。 */ | |||
| private Integer resultCode; | |||
| /** IVS 平台抓图任务标识,供后续抓图列表和图片下载接口使用。 */ | |||
| private String taskID; | |||
| } | |||
| @ -0,0 +1,82 @@ | |||
| package com.inspect.nvr.hik.controller; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackErrorResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackClipRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackResponse; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackClipFile; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackClipService; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackService; | |||
| import org.springframework.http.HttpHeaders; | |||
| import org.springframework.http.MediaType; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.CrossOrigin; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; | |||
| import javax.annotation.Resource; | |||
| @RestController | |||
| @CrossOrigin(exposedHeaders = HttpHeaders.CONTENT_DISPOSITION) | |||
| @RequestMapping("/hik/nvr/playback") | |||
| public class HikNvrPlaybackController { | |||
| /** MP4 下载响应使用的标准媒体类型。 */ | |||
| private static final MediaType MP4_MEDIA_TYPE = | |||
| MediaType.parseMediaType("video/mp4"); | |||
| /** 海康录像查询服务。 */ | |||
| @Resource | |||
| private HikNvrPlaybackService playbackService; | |||
| /** 按中心时刻生成 MP4 片段并管理临时文件的服务。 */ | |||
| @Resource | |||
| private HikNvrPlaybackClipService playbackClipService; | |||
| /** | |||
| * 查询指定海康 NVR 通道在时间范围内的录像区间,并生成可播放的 RTSP 地址。 | |||
| * | |||
| * @param request NVR 登录、通道和北京时间范围参数 | |||
| * @return 录像查询结果及 RTSP 回放地址 | |||
| */ | |||
| @PostMapping("/search") | |||
| public ResponseEntity<HikNvrPlaybackResponse> search( | |||
| @RequestBody HikNvrPlaybackRequest request) { | |||
| // 调用回放服务查询设备录像并构造 RTSP 地址。 | |||
| return ResponseEntity.ok(playbackService.search(request)); | |||
| } | |||
| /** | |||
| * 生成中心时刻前后指定秒数的连续录像,并作为 MP4 附件流式返回。 | |||
| * | |||
| * @param request 设备树所选 cameraCode、中心时刻和前后秒数 | |||
| * @return 带安全文件名和长度的 MP4 下载响应 | |||
| */ | |||
| @PostMapping( | |||
| value = "/clips/download", | |||
| consumes = MediaType.APPLICATION_JSON_VALUE, | |||
| produces = "video/mp4") | |||
| public ResponseEntity<StreamingResponseBody> downloadClip( | |||
| @RequestBody HikNvrPlaybackClipRequest request) { | |||
| // 在提交响应头前完成录像查询、SDK下载和MP4封装,失败时仍可返回统一JSON错误。 | |||
| HikNvrPlaybackClipFile clipFile = | |||
| playbackClipService.createClip(request); | |||
| // 下载响应只暴露安全文件名和文件长度,不包含NVR账号密码或临时路径。 | |||
| HttpHeaders headers = new HttpHeaders(); | |||
| headers.setContentType(MP4_MEDIA_TYPE); | |||
| headers.setContentLength(clipFile.getContentLength()); | |||
| headers.set( | |||
| HttpHeaders.CONTENT_DISPOSITION, | |||
| "attachment; filename=\"" + clipFile.getDownloadFileName() + "\""); | |||
| headers.setCacheControl("no-store"); | |||
| // 响应写完或客户端断开后由服务在finally中清理临时文件。 | |||
| StreamingResponseBody body = | |||
| outputStream -> playbackClipService.writeAndDelete( | |||
| clipFile, outputStream); | |||
| return ResponseEntity.ok() | |||
| .headers(headers) | |||
| .body(body); | |||
| } | |||
| } | |||
| @ -0,0 +1,47 @@ | |||
| package com.inspect.nvr.hik.controller; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackErrorResponse; | |||
| import com.inspect.nvr.hik.exception.HikNvrPlaybackException; | |||
| import com.inspect.nvr.controller.IvsCameraController; | |||
| import com.inspect.nvr.controller.IvsServerController; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.http.converter.HttpMessageNotReadableException; | |||
| import org.springframework.web.bind.annotation.ExceptionHandler; | |||
| import org.springframework.web.bind.annotation.RestControllerAdvice; | |||
| @RestControllerAdvice(assignableTypes = { | |||
| HikNvrPlaybackController.class, | |||
| HikNvrPlaybackHlsController.class, | |||
| HikNvrPlaybackUiController.class, | |||
| HikNvrUiActionController.class, | |||
| IvsCameraController.class, | |||
| IvsServerController.class | |||
| }) | |||
| public class HikNvrPlaybackExceptionHandler { | |||
| @ExceptionHandler(HikNvrPlaybackException.class) | |||
| /** 将统一海康/IVS 业务异常转换为 HTTP 错误响应。 */ | |||
| public ResponseEntity<HikNvrPlaybackErrorResponse> handlePlaybackException( | |||
| HikNvrPlaybackException exception) { | |||
| // 组装错误码和中文错误消息。 | |||
| HikNvrPlaybackErrorResponse response = HikNvrPlaybackErrorResponse.builder() | |||
| .code(exception.getCode()) | |||
| .message(exception.getMessage()) | |||
| .build(); | |||
| // 使用异常携带的 HTTP 状态码返回错误响应。 | |||
| return ResponseEntity.status(exception.getStatus()).body(response); | |||
| } | |||
| @ExceptionHandler(HttpMessageNotReadableException.class) | |||
| /** 将 JSON 反序列化失败转换为统一的 400 响应。 */ | |||
| public ResponseEntity<HikNvrPlaybackErrorResponse> handleUnreadableRequestBody( | |||
| HttpMessageNotReadableException exception) { | |||
| // 组装固定的请求体格式错误响应。 | |||
| HikNvrPlaybackErrorResponse response = HikNvrPlaybackErrorResponse.builder() | |||
| .code(-1) | |||
| .message("请求体格式错误,请检查JSON字段类型和格式") | |||
| .build(); | |||
| // 返回 HTTP 400,提示调用方检查 JSON 类型和格式。 | |||
| return ResponseEntity.badRequest().body(response); | |||
| } | |||
| } | |||
| @ -0,0 +1,83 @@ | |||
| package com.inspect.nvr.hik.controller; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackErrorResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackHlsControlRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackHlsSession; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackRequest; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackHlsService; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.CrossOrigin; | |||
| import org.springframework.web.bind.annotation.DeleteMapping; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import javax.annotation.Resource; | |||
| @RestController | |||
| @CrossOrigin | |||
| @RequestMapping("/hik/nvr/playback/hls") | |||
| public class HikNvrPlaybackHlsController { | |||
| /** HLS 回放会话服务。 */ | |||
| @Resource | |||
| private HikNvrPlaybackHlsService playbackHlsService; | |||
| /** | |||
| * 创建由海康 SDK 驱动、由 FFmpeg 输出 HLS 的历史回放会话。 | |||
| * | |||
| * @param request NVR、通道及录像时间范围参数 | |||
| * @return HLS 会话标识、状态和播放地址 | |||
| */ | |||
| @PostMapping("/sessions") | |||
| public ResponseEntity<HikNvrPlaybackHlsSession> create( | |||
| @RequestBody HikNvrPlaybackRequest request) { | |||
| // 调用 HLS 服务创建受 SDK 控制的回放会话。 | |||
| return ResponseEntity.ok(playbackHlsService.create(request)); | |||
| } | |||
| /** | |||
| * 查询指定 HLS 回放会话的当前状态和播放地址。 | |||
| * | |||
| * @param sessionId 服务端创建的会话标识 | |||
| * @return 会话状态及最新的 HLS 地址 | |||
| */ | |||
| @GetMapping("/sessions/{sessionId}") | |||
| public ResponseEntity<HikNvrPlaybackHlsSession> get( | |||
| @PathVariable("sessionId") String sessionId) { | |||
| // 查询指定会话当前状态和最新 HLS 地址。 | |||
| return ResponseEntity.ok(playbackHlsService.get(sessionId)); | |||
| } | |||
| /** | |||
| * 对指定 HLS 回放会话执行暂停、恢复、倍速、定位或重新开始等控制动作。 | |||
| * | |||
| * @param sessionId 服务端创建的会话标识 | |||
| * @param request 控制动作及其附加参数 | |||
| * @return 控制后的会话状态 | |||
| */ | |||
| @PostMapping("/sessions/{sessionId}/controls") | |||
| public ResponseEntity<HikNvrPlaybackHlsSession> control( | |||
| @PathVariable("sessionId") String sessionId, | |||
| @RequestBody HikNvrPlaybackHlsControlRequest request) { | |||
| // 将控制动作交给 HLS 会话服务执行。 | |||
| return ResponseEntity.ok(playbackHlsService.control(sessionId, request)); | |||
| } | |||
| /** | |||
| * 删除 HLS 回放会话并释放底层 SDK、FFmpeg 和注册表资源。 | |||
| * | |||
| * @param sessionId 服务端创建的会话标识 | |||
| * @return 无响应体的成功结果 | |||
| */ | |||
| @DeleteMapping("/sessions/{sessionId}") | |||
| public ResponseEntity<Void> delete( | |||
| @PathVariable("sessionId") String sessionId) { | |||
| // 删除会话并停止 SDK/FFmpeg 资源。 | |||
| playbackHlsService.delete(sessionId); | |||
| return ResponseEntity.noContent().build(); | |||
| } | |||
| } | |||
| @ -0,0 +1,88 @@ | |||
| package com.inspect.nvr.hik.controller; | |||
| import com.inspect.nvr.hik.domain.HikNvrCameraTarget; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackErrorResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackHlsControlRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackHlsSession; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackUiConfig; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackUiSessionRequest; | |||
| import com.inspect.nvr.hik.service.HikNvrCameraTargetService; | |||
| import com.inspect.nvr.hik.service.HikNvrDeviceTreeService; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackHlsService; | |||
| import com.inspect.nvr.hik.service.HikNvrPlaybackRequestFactory; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.CrossOrigin; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import javax.annotation.Resource; | |||
| @RestController | |||
| @CrossOrigin | |||
| @RequestMapping("/hik/nvr/playback/hls/ui") | |||
| public class HikNvrPlaybackUiController { | |||
| /** 浏览器 HLS 回放会话服务。 */ | |||
| @Resource | |||
| private HikNvrPlaybackHlsService playbackHlsService; | |||
| /** 从 NVR 表和 ivs_camera 查询并转换浏览器设备树。 */ | |||
| @Resource | |||
| private HikNvrDeviceTreeService deviceTreeService; | |||
| /** 根据 cameraCode 查询摄像机并解析所属 NVR、通道和服务端凭据。 */ | |||
| @Resource | |||
| private HikNvrCameraTargetService cameraTargetService; | |||
| /** 使用数据库 NVR 参数组装内部回放请求。 */ | |||
| @Resource | |||
| private HikNvrPlaybackRequestFactory playbackRequestFactory; | |||
| /** | |||
| * 从 NVR 表和 ivs_camera 返回浏览器所需的多 NVR 设备树与默认选择。 | |||
| * | |||
| * @return 不包含 NVR 密码的控制台配置 | |||
| */ | |||
| @GetMapping("/config") | |||
| public ResponseEntity<HikNvrPlaybackUiConfig> config() { | |||
| // 查询全部启用 NVR 及其 ivs_camera 子节点,并返回不含账号密码的公开配置。 | |||
| return ResponseEntity.ok(deviceTreeService.loadConfig()); | |||
| } | |||
| /** | |||
| * 根据页面提交的 cameraCode 和时间范围创建 HLS 回放会话。 | |||
| * | |||
| * @param request 页面侧回放请求,不包含后端固定保存的 NVR 密码 | |||
| * @return 新建的 HLS 回放会话信息 | |||
| */ | |||
| @PostMapping("/sessions") | |||
| public ResponseEntity<HikNvrPlaybackHlsSession> create( | |||
| @RequestBody HikNvrPlaybackUiSessionRequest request) { | |||
| // 只接受设备树返回的完整 cameraCode,并从数据库解析真实 NVR 与通道。 | |||
| HikNvrCameraTarget cameraTarget = cameraTargetService.resolve( | |||
| request == null ? null : request.getCameraCode()); | |||
| // 使用 cameraCode 解析结果和已校验页面条件组装内部 SDK 请求。 | |||
| HikNvrPlaybackRequest playbackRequest = | |||
| playbackRequestFactory.create(request, cameraTarget); | |||
| // 使用已绑定 cameraCode、通道和 NVR 凭据的请求创建回放会话。 | |||
| return ResponseEntity.ok(playbackHlsService.create(playbackRequest)); | |||
| } | |||
| /** | |||
| * 使用 cameraCode 校验并控制页面创建的 HLS 回放会话。 | |||
| * | |||
| * @param sessionId 页面当前持有的回放会话标识 | |||
| * @param request cameraCode、暂停/恢复等控制动作及附加参数 | |||
| * @return 控制后的会话状态 | |||
| */ | |||
| @PostMapping("/sessions/{sessionId}/controls") | |||
| public ResponseEntity<HikNvrPlaybackHlsSession> control( | |||
| @PathVariable("sessionId") String sessionId, | |||
| @RequestBody HikNvrPlaybackHlsControlRequest request) { | |||
| // UI 控制强制同时校验 sessionId 与 cameraCode,防止旧页面状态控制到其他摄像机。 | |||
| return ResponseEntity.ok( | |||
| playbackHlsService.controlByCameraCode(sessionId, request)); | |||
| } | |||
| } | |||
| @ -0,0 +1,165 @@ | |||
| package com.inspect.nvr.hik.controller; | |||
| import com.inspect.nvr.hik.domain.HikNvrLiveStreamResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrPlaybackErrorResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrPresetListResponse; | |||
| import com.inspect.nvr.hik.domain.HikNvrUiActionRequest; | |||
| import com.inspect.nvr.hik.domain.HikNvrUiActionResponse; | |||
| import com.inspect.nvr.hik.exception.HikNvrPlaybackException; | |||
| import com.inspect.nvr.hik.service.HikNvrCredentialService; | |||
| import com.inspect.nvr.hik.service.HikNvrLiveStreamService; | |||
| import com.inspect.nvr.hik.service.HikNvrUiActionService; | |||
| import org.springframework.http.HttpHeaders; | |||
| import org.springframework.http.MediaType; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.CrossOrigin; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import javax.annotation.Resource; | |||
| @RestController | |||
| @CrossOrigin | |||
| @RequestMapping("/hik/nvr/playback/hls/ui/actions") | |||
| public class HikNvrUiActionController { | |||
| /** 海康云台、预置位和抓图操作服务。 */ | |||
| @Resource | |||
| private HikNvrUiActionService actionService; | |||
| /** 海康实时拉流服务。 */ | |||
| @Resource | |||
| private HikNvrLiveStreamService liveStreamService; | |||
| /** 按页面选择的 NVR IP 从数据库读取服务端凭据。 */ | |||
| @Resource | |||
| private HikNvrCredentialService credentialService; | |||
| /** | |||
| * 接收海康 NVR 云台控制指令。 | |||
| */ | |||
| @PostMapping("/ptz") | |||
| /** 代理海康云台动作请求。 */ | |||
| public ResponseEntity<HikNvrUiActionResponse> ptz(@RequestBody HikNvrUiActionRequest request) { | |||
| // 绑定页面所选 NVR 后执行云台动作,避免相同通道号被发送到默认设备。 | |||
| return ResponseEntity.ok(actionServiceFor(request).ptz(request)); | |||
| } | |||
| /** | |||
| * 调用指定通道的海康预置位。 | |||
| */ | |||
| @PostMapping("/preset") | |||
| /** 代理海康预置位调用请求。 */ | |||
| public ResponseEntity<HikNvrUiActionResponse> preset(@RequestBody HikNvrUiActionRequest request) { | |||
| // 绑定页面所选 NVR 后执行预置位。 | |||
| return ResponseEntity.ok(actionServiceFor(request).preset(request)); | |||
| } | |||
| /** | |||
| * 保存当前云台位置为指定的海康预置位。 | |||
| */ | |||
| @PostMapping("/preset/create") | |||
| /** 代理海康预置位保存请求。 */ | |||
| public ResponseEntity<HikNvrUiActionResponse> createPreset(@RequestBody HikNvrUiActionRequest request) { | |||
| // 绑定页面所选 NVR 后保存当前位置并写入预置位名称。 | |||
| return ResponseEntity.ok(actionServiceFor(request).createPreset(request)); | |||
| } | |||
| /** | |||
| * 读取指定通道的海康预置位列表。 | |||
| */ | |||
| @GetMapping("/presets") | |||
| public ResponseEntity<HikNvrPresetListResponse> listPresets( | |||
| @RequestParam("channel") Integer channel, | |||
| @RequestParam("nvrIp") String nvrIp) { | |||
| // 创建内部请求对象并读取 NVR 当前预置位列表。 | |||
| HikNvrUiActionRequest request = new HikNvrUiActionRequest(); | |||
| request.setNvrIp(nvrIp); | |||
| request.setChannel(channel); | |||
| // 绑定页面所选 NVR 后委托海康 ISAPI 列表读取能力。 | |||
| return ResponseEntity.ok(actionServiceFor(request).listPresets(request)); | |||
| } | |||
| /** | |||
| * 抓取海康 NVR 当前通道的 JPEG 图片。 | |||
| */ | |||
| @PostMapping(value = "/snapshot", produces = MediaType.IMAGE_JPEG_VALUE) | |||
| /** 代理海康 JPEG 抓图请求。 */ | |||
| public ResponseEntity<byte[]> snapshot(@RequestBody HikNvrUiActionRequest request) { | |||
| // 绑定页面所选 NVR 后调用海康抓图服务获取 JPEG 字节。 | |||
| byte[] image = actionServiceFor(request).snapshot(request); | |||
| // 从请求中提取通道号用于响应文件名和响应头。 | |||
| int channel = request == null || request.getChannel() == null ? 0 : request.getChannel(); | |||
| String filename = "nvr-ch" + channel + "-" + System.currentTimeMillis() + ".jpg"; | |||
| return ResponseEntity.ok() | |||
| .contentType(MediaType.IMAGE_JPEG) | |||
| .contentLength(image.length) | |||
| .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"") | |||
| .header("X-Capture-Channel", String.valueOf(channel)) | |||
| .body(image); | |||
| } | |||
| /** | |||
| * 启动指定通道的实时拉流任务。 | |||
| */ | |||
| @PostMapping("/live/start") | |||
| /** 代理实时拉流启动请求。 */ | |||
| public ResponseEntity<HikNvrLiveStreamResponse> startLive(@RequestBody HikNvrUiActionRequest request) { | |||
| // 从页面请求提取设备树完整 cameraCode 和可选码流类型。 | |||
| String cameraCode = request == null ? null : request.getCameraCode(); | |||
| Integer streamType = request == null ? null : request.getStreamType(); | |||
| // 实时服务通过现有 IVS 媒体接口解析 cameraCode 并取得 RTSP 源地址。 | |||
| return ResponseEntity.ok(liveStreamService.start(cameraCode, streamType)); | |||
| } | |||
| /** | |||
| * 停止指定通道的实时拉流任务。 | |||
| */ | |||
| @PostMapping("/live/stop") | |||
| /** 代理实时拉流停止请求。 */ | |||
| public ResponseEntity<HikNvrLiveStreamResponse> stopLive(@RequestBody HikNvrUiActionRequest request) { | |||
| // 从页面请求提取要停止的完整 cameraCode。 | |||
| String cameraCode = request == null ? null : request.getCameraCode(); | |||
| // 只停止该 cameraCode 对应的流,不影响设备树中的其他摄像机。 | |||
| return ResponseEntity.ok(liveStreamService.stop(cameraCode)); | |||
| } | |||
| /** | |||
| * 查询指定通道的实时拉流状态。 | |||
| */ | |||
| @GetMapping("/live/status") | |||
| public ResponseEntity<HikNvrLiveStreamResponse> liveStatus( | |||
| @RequestParam("cameraCode") String cameraCode) { | |||
| // 按设备树完整 cameraCode 查询唯一实时拉流状态。 | |||
| return ResponseEntity.ok(liveStreamService.status(cameraCode)); | |||
| } | |||
| /** | |||
| * 为页面请求绑定数据库中已启用的目标 NVR。 | |||
| * | |||
| * @param request 页面操作请求,必须包含所选 NVR IP | |||
| * @return 绑定数据库目标 NVR 的海康操作服务 | |||
| */ | |||
| private HikNvrUiActionService actionServiceFor(HikNvrUiActionRequest request) { | |||
| // 多 NVR 环境必须明确目标 IP,禁止按固定配置或隐式默认设备执行控制。 | |||
| if (request == null || !hasText(request.getNvrIp())) { | |||
| throw HikNvrPlaybackException.badRequest("NVR IP不能为空"); | |||
| } | |||
| // 只允许绑定数据库中已启用的 NVR,页面无法直接提供账号密码。 | |||
| return actionService.forNvr( | |||
| credentialService.resolveByIp(request.getNvrIp().trim())); | |||
| } | |||
| /** | |||
| * 判断页面提交的 NVR IP 是否包含有效文本。 | |||
| * | |||
| * @param value 待检查文本 | |||
| * @return 非空且不全为空白时返回 true | |||
| */ | |||
| private boolean hasText(String value) { | |||
| // 空文本不能定位数据库 NVR。 | |||
| return value != null && !value.trim().isEmpty(); | |||
| } | |||
| } | |||
| @ -0,0 +1,64 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import com.inspect.nvr.domain.Infrared.NvrInfo; | |||
| /** | |||
| * 由 IVS 完整摄像机编码解析出的海康 NVR 回放目标。 | |||
| * | |||
| * <p>浏览器只提交 {@code cameraCode},NVR 地址、端口、账号、密码和通道号 | |||
| * 均由服务端根据 {@code ivs_camera} 与 {@code basedata_eqpbook_nvr} 解析。</p> | |||
| */ | |||
| public class HikNvrCameraTarget { | |||
| /** 已校验并去除首尾空白的 IVS 完整摄像机编码。 */ | |||
| private final String cameraCode; | |||
| /** 从完整摄像机编码中解析出的页面逻辑通道号。 */ | |||
| private final Integer channel; | |||
| /** 从数据库读取且包含完整服务端凭据的所属 NVR。 */ | |||
| private final NvrInfo nvrInfo; | |||
| /** | |||
| * 保存一次 cameraCode 解析得到的摄像机、通道和 NVR 结果。 | |||
| * | |||
| * @param cameraCode IVS 完整摄像机编码 | |||
| * @param channel 解析出的页面逻辑通道号 | |||
| * @param nvrInfo 摄像机所属 NVR 的数据库连接信息 | |||
| */ | |||
| public HikNvrCameraTarget( | |||
| String cameraCode, | |||
| Integer channel, | |||
| NvrInfo nvrInfo) { | |||
| this.cameraCode = cameraCode; | |||
| this.channel = channel; | |||
| this.nvrInfo = nvrInfo; | |||
| } | |||
| /** | |||
| * 返回已校验的 IVS 完整摄像机编码。 | |||
| * | |||
| * @return 完整 cameraCode | |||
| */ | |||
| public String getCameraCode() { | |||
| return cameraCode; | |||
| } | |||
| /** | |||
| * 返回海康回放使用的页面逻辑通道号。 | |||
| * | |||
| * @return 正整数通道号 | |||
| */ | |||
| public Integer getChannel() { | |||
| return channel; | |||
| } | |||
| /** | |||
| * 返回摄像机所属 NVR 的数据库连接信息。 | |||
| * | |||
| * @return 仅在服务端使用的 NVR 参数 | |||
| */ | |||
| public NvrInfo getNvrInfo() { | |||
| return nvrInfo; | |||
| } | |||
| } | |||
| @ -0,0 +1,40 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrLiveStreamResponse { | |||
| /** 实时流绑定的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 实时流所属 NVR IP。 */ | |||
| private String nvrIp; | |||
| /** 页面逻辑通道号。 */ | |||
| private Integer channel; | |||
| /** 码流类型。 */ | |||
| private Integer streamType; | |||
| /** 流标识。 */ | |||
| private String streamId; | |||
| /** 会话状态。 */ | |||
| private String status; | |||
| /** HLS 播放地址。 */ | |||
| private String hlsUrl; | |||
| /** HTTP-FLV 播放地址。 */ | |||
| private String flvUrl; | |||
| /** 状态说明。 */ | |||
| private String message; | |||
| } | |||
| @ -0,0 +1,31 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| /** | |||
| * 按中心时刻生成海康 NVR 录像下载片段的请求。 | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackClipRequest { | |||
| /** 设备树当前选中的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 下载录像使用的码流类型,默认使用主码流。 */ | |||
| private Integer streamType; | |||
| /** 下载片段的中心时刻,固定按北京时间解释。 */ | |||
| private String centerTime; | |||
| /** 中心时刻之前截取的秒数,默认 30 秒。 */ | |||
| private Integer beforeSeconds; | |||
| /** 中心时刻之后截取的秒数,默认 30 秒。 */ | |||
| private Integer afterSeconds; | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackErrorResponse { | |||
| /** 参数错误或海康 SDK 错误码。 */ | |||
| private int code; | |||
| /** 中文错误说明。 */ | |||
| private String message; | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| public enum HikNvrPlaybackHlsControlAction { | |||
| /** 暂停回放。 */ | |||
| PAUSE, | |||
| /** 恢复回放。 */ | |||
| RESUME, | |||
| /** 设置原生倍速。 */ | |||
| SET_SPEED, | |||
| /** 跳转到指定时间。 */ | |||
| SEEK, | |||
| /** 停止会话。 */ | |||
| STOP | |||
| } | |||
| @ -0,0 +1,31 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackHlsControlRequest { | |||
| /** UI 设备树选中的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 回放控制动作。 */ | |||
| private HikNvrPlaybackHlsControlAction action; | |||
| /** 回放倍速,仅 SET_SPEED 使用。 */ | |||
| private Integer speed; | |||
| /** 跳转时间,仅 SEEK 使用。 */ | |||
| private String seekTime; | |||
| /** 判断倍速是否为海康原生支持的 1、2、4、8 倍速。 */ | |||
| public static boolean isSupportedSpeed(Integer speed) { | |||
| // 只接受海康原生支持的 1、2、4、8 倍速。 | |||
| return speed != null && (speed == 1 || speed == 2 || speed == 4 || speed == 8); | |||
| } | |||
| } | |||
| @ -0,0 +1,39 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.util.List; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackHlsSession { | |||
| /** 当前回放会话绑定的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 服务端生成的回放会话标识。 */ | |||
| private String sessionId; | |||
| /** HLS 回放会话状态。 */ | |||
| private HikNvrPlaybackHlsStatus status; | |||
| /** 浏览器使用的 HLS 播放地址。 */ | |||
| private String hlsUrl; | |||
| /** HLS 流代次。 */ | |||
| private int generation; | |||
| /** 当前海康 NVR 原生回放倍速。 */ | |||
| private int speed; | |||
| /** 实际连续录像起止时间。 */ | |||
| private List<String> actualTimeRange; | |||
| /** 最近视频帧携带的当前回放时间。 */ | |||
| private String currentTime; | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| public enum HikNvrPlaybackHlsStatus { | |||
| /** 会话已创建,等待首个 HLS 切片。 */ | |||
| STARTING, | |||
| /** HLS 已可播放。 */ | |||
| PLAYING, | |||
| /** 回放已暂停。 */ | |||
| PAUSED, | |||
| /** 会话已停止。 */ | |||
| STOPPED, | |||
| /** 媒体链路失败。 */ | |||
| FAILED | |||
| } | |||
| @ -0,0 +1,21 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.util.List; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackRecord { | |||
| /** 实际录像起止时间。 */ | |||
| private List<String> timeRange; | |||
| /** 包含设备登录信息的 RTSP 历史回放地址。 */ | |||
| private String rtspUrl; | |||
| } | |||
| @ -0,0 +1,43 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackRequest { | |||
| /** UI 回放目标对应的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 海康 NVR IP 地址。 */ | |||
| private String nvrIp; | |||
| /** 海康 SDK 服务端口。 */ | |||
| private Integer sdkPort; | |||
| /** RTSP 服务端口。 */ | |||
| private Integer rtspPort; | |||
| /** 页面逻辑或海康 SDK 实际通道号。 */ | |||
| private Integer channel; | |||
| /** 码流类型,1 为主码流,2 为子码流。 */ | |||
| private Integer streamType; | |||
| /** NVR 登录账号。 */ | |||
| private String username; | |||
| /** NVR 登录密码,只允许写入。 */ | |||
| private String password; | |||
| /** 查询开始时间,按北京时间解释。 */ | |||
| private String startTime; | |||
| /** 查询结束时间,按北京时间解释。 */ | |||
| private String endTime; | |||
| } | |||
| @ -0,0 +1,44 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.util.ArrayList; | |||
| import java.util.Collections; | |||
| import java.util.List; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackResponse { | |||
| /** 结果编码,0 表示查询成功。 */ | |||
| private int code; | |||
| /** 结果说明。 */ | |||
| private String message; | |||
| /** 查询范围内是否存在录像。 */ | |||
| private boolean hasRecord; | |||
| /** 实际连续录像区间列表。 */ | |||
| private List<HikNvrPlaybackRecord> records; | |||
| /** 使用录像列表创建统一成功响应。 */ | |||
| public static HikNvrPlaybackResponse success(List<HikNvrPlaybackRecord> records) { | |||
| // 将空结果转换为空列表,避免响应中出现 null。 | |||
| List<HikNvrPlaybackRecord> safeRecords = records == null | |||
| ? Collections.emptyList() | |||
| : new ArrayList<>(records); | |||
| // 组装统一的成功回放响应。 | |||
| return HikNvrPlaybackResponse.builder() | |||
| .code(0) | |||
| .message("success") | |||
| .hasRecord(!safeRecords.isEmpty()) | |||
| .records(safeRecords) | |||
| .build(); | |||
| } | |||
| } | |||
| @ -0,0 +1,97 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.util.List; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackUiConfig { | |||
| /** 设备显示名称。 */ | |||
| private String deviceName; | |||
| /** 页面使用的固定时区。 */ | |||
| private String timezone; | |||
| /** 后端是否配置完整。 */ | |||
| private boolean configured; | |||
| /** 页面展示的 NVR IP。 */ | |||
| private String nvrIp; | |||
| /** 页面默认选中的 NVR IP。 */ | |||
| private String defaultNvrIp; | |||
| /** 默认通道号。 */ | |||
| private Integer defaultChannel; | |||
| /** 页面默认选中的 IVS 完整摄像机编码。 */ | |||
| private String defaultCameraCode; | |||
| /** 页面设备树中的可选通道。 */ | |||
| private List<Channel> channels; | |||
| /** 页面设备树中的 NVR 节点及其摄像机子节点。 */ | |||
| private List<Nvr> nvrs; | |||
| /** | |||
| * 设备树中的非敏感 NVR 节点。 | |||
| * | |||
| * <p>账号和密码只在服务端使用,本对象只返回设备标识、名称、IP 和摄像机列表。</p> | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class Nvr { | |||
| /** NVR 数据库主键。 */ | |||
| private Long nvrId; | |||
| /** NVR 页面显示名称。 */ | |||
| private String name; | |||
| /** NVR IP 地址。 */ | |||
| private String nvrIp; | |||
| /** 该 NVR 是否具备完整的服务端连接参数。 */ | |||
| private boolean configured; | |||
| /** 当前 NVR 下从 ivs_camera 读取的摄像机通道。 */ | |||
| private List<Channel> channels; | |||
| } | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class Channel { | |||
| /** IVS 摄像机完整编码,是页面请求设备能力时使用的唯一摄像机标识。 */ | |||
| private String cameraCode; | |||
| /** SDK 通道号。 */ | |||
| private Integer channel; | |||
| /** 所属 NVR 数据库主键。 */ | |||
| private Long nvrId; | |||
| /** 所属 NVR IP,仅用于页面展示和兼容旧视图,不作为设备能力请求标识。 */ | |||
| private String nvrIp; | |||
| /** 所属 NVR 页面显示名称。 */ | |||
| private String nvrName; | |||
| /** 通道显示名称。 */ | |||
| private String name; | |||
| /** 设备分组名称。 */ | |||
| private String group; | |||
| } | |||
| } | |||
| @ -0,0 +1,25 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPlaybackUiSessionRequest { | |||
| /** 页面设备树当前选中的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 页面请求的码流类型。 */ | |||
| private Integer streamType; | |||
| /** 北京时间开始时间。 */ | |||
| private String startTime; | |||
| /** 北京时间结束时间。 */ | |||
| private String endTime; | |||
| } | |||
| @ -0,0 +1,47 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrPresetListResponse { | |||
| /** 页面逻辑通道号。 */ | |||
| private Integer channel; | |||
| /** 海康 SDK 通道号。 */ | |||
| private Integer sdkChannel; | |||
| /** 预置位数量。 */ | |||
| private Integer count; | |||
| /** 列表读取说明。 */ | |||
| private String message; | |||
| @Builder.Default | |||
| /** 设备返回的预置位列表。 */ | |||
| private List<Preset> presets = new ArrayList<>(); | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public static class Preset { | |||
| /** 预置位编号。 */ | |||
| private Integer id; | |||
| /** 预置位名称。 */ | |||
| private String name; | |||
| /** 是否启用。 */ | |||
| private Boolean enabled; | |||
| } | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| /** | |||
| * 海康云台方向动作的执行模式。 | |||
| * | |||
| * <p>IVS 的 controlPara1 会在适配层转换成该模式;浏览器侧原有云台接口默认使用连续模式。</p> | |||
| */ | |||
| public enum HikNvrPtzMode { | |||
| /** 发送开始指令后,经过默认点动时长自动发送停止指令。 */ | |||
| POINT, | |||
| /** 只发送开始指令,直到调用停止指令才结束运动。 */ | |||
| CONTINUOUS | |||
| } | |||
| @ -0,0 +1,40 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| /** | |||
| * 浏览器安全的 NVR 操作请求;设备账号密码始终由服务端数据库提供,浏览器不会传递。 | |||
| */ | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrUiActionRequest { | |||
| /** 实时预览请求使用的 IVS 完整摄像机编码。 */ | |||
| private String cameraCode; | |||
| /** 页面设备树当前选中的 NVR IP。 */ | |||
| private String nvrIp; | |||
| /** 页面逻辑通道号,从 1 开始。 */ | |||
| private Integer channel; | |||
| /** 云台动作名称。 */ | |||
| private String action; | |||
| /** 云台动作速度。 */ | |||
| private Integer speed; | |||
| /** 预置位编号。 */ | |||
| private Integer preset; | |||
| /** 新增预置位名称。 */ | |||
| private String presetName; | |||
| /** 实时预览码流类型。 */ | |||
| private Integer streamType; | |||
| } | |||
| @ -0,0 +1,22 @@ | |||
| package com.inspect.nvr.hik.domain; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.Builder; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @Builder | |||
| @NoArgsConstructor | |||
| @AllArgsConstructor | |||
| public class HikNvrUiActionResponse { | |||
| /** 是否执行成功。 */ | |||
| private boolean success; | |||
| /** 操作说明。 */ | |||
| private String message; | |||
| /** 海康 SDK 实际通道号。 */ | |||
| private Integer sdkChannel; | |||
| } | |||
| @ -0,0 +1,78 @@ | |||
| package com.inspect.nvr.hik.exception; | |||
| import org.springframework.http.HttpStatus; | |||
| public class HikNvrPlaybackException extends RuntimeException { | |||
| /** 对外返回的业务或 SDK 错误码。 */ | |||
| private final int code; | |||
| /** 对应的 HTTP 响应状态。 */ | |||
| private final HttpStatus status; | |||
| private HikNvrPlaybackException( | |||
| int code, | |||
| HttpStatus status, | |||
| String message, | |||
| Throwable cause) { | |||
| super(message, cause); | |||
| this.code = code; | |||
| this.status = status; | |||
| } | |||
| /** 创建参数错误异常。 */ | |||
| public static HikNvrPlaybackException badRequest(String message) { | |||
| // 创建 HTTP 400 参数错误。 | |||
| return new HikNvrPlaybackException(-1, HttpStatus.BAD_REQUEST, message, null); | |||
| } | |||
| /** 创建不带原始原因的 SDK/设备错误异常。 */ | |||
| public static HikNvrPlaybackException sdkFailure(int code, String message) { | |||
| // 创建 HTTP 502 厂商 SDK/设备调用错误。 | |||
| return new HikNvrPlaybackException(code, HttpStatus.BAD_GATEWAY, message, null); | |||
| } | |||
| /** 创建带原始原因的 SDK/设备错误异常。 */ | |||
| public static HikNvrPlaybackException sdkFailure( | |||
| int code, | |||
| String message, | |||
| Throwable cause) { | |||
| // 创建带原始异常原因的 HTTP 502 设备错误。 | |||
| return new HikNvrPlaybackException(code, HttpStatus.BAD_GATEWAY, message, cause); | |||
| } | |||
| /** 创建带原始原因的媒体链路错误异常。 */ | |||
| public static HikNvrPlaybackException mediaFailure(String message, Throwable cause) { | |||
| // 创建 HTTP 503 媒体链路错误。 | |||
| return new HikNvrPlaybackException(-3, HttpStatus.SERVICE_UNAVAILABLE, message, cause); | |||
| } | |||
| /** 创建不带原始原因的媒体链路错误异常。 */ | |||
| public static HikNvrPlaybackException mediaFailure(String message) { | |||
| // 创建不带原始异常的 HTTP 503 媒体错误。 | |||
| return new HikNvrPlaybackException(-3, HttpStatus.SERVICE_UNAVAILABLE, message, null); | |||
| } | |||
| /** 创建资源不存在异常。 */ | |||
| public static HikNvrPlaybackException notFound(String message) { | |||
| // 创建 HTTP 404 资源不存在错误。 | |||
| return new HikNvrPlaybackException(-4, HttpStatus.NOT_FOUND, message, null); | |||
| } | |||
| /** 创建状态冲突异常。 */ | |||
| public static HikNvrPlaybackException conflict(String message) { | |||
| // 创建 HTTP 409 状态冲突错误。 | |||
| return new HikNvrPlaybackException(-5, HttpStatus.CONFLICT, message, null); | |||
| } | |||
| /** 返回业务错误码。 */ | |||
| public int getCode() { | |||
| // 返回业务错误码。 | |||
| return code; | |||
| } | |||
| /** 返回 HTTP 状态。 */ | |||
| public HttpStatus getStatus() { | |||
| // 返回 HTTP 状态码。 | |||
| return status; | |||
| } | |||
| } | |||