# graduation-design **Repository Path**: northpoleforce/graduation-design ## Basic Information - **Project Name**: graduation-design - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-29 - **Last Updated**: 2026-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Jetson NetSDK Demo 这个仓库面向 `NVIDIA Jetson` 上的 Dahua NetSDK 集成,当前包含三类应用: - `netsdk_demo`:命令行工具,负责设备信息、能力扫描、录流、抓拍。 - `netsdk_bridge`:常驻桥接进程,负责 PTZ 状态与控制。 - `console`:零依赖 Node.js Web 控制台,负责静态页面、HTTP API、WebSocket 和视频代理。 当前工程已经改成脚本化入口,日常使用不需要再手敲长命令。 ## 目录结构 ```text . ├── apps │ ├── bridge │ │ ├── CMakeLists.txt │ │ └── src/netsdk_bridge.cpp │ ├── console │ │ ├── public │ │ │ ├── app.css │ │ │ ├── app.js │ │ │ └── index.html │ │ └── server.js │ └── demo │ ├── CMakeLists.txt │ └── src/netsdk_demo.cpp ├── cmake │ └── NetSDK.cmake ├── config │ ├── console.env.example │ └── device.env.example ├── docs ├── scripts │ ├── build.sh │ ├── common.sh │ ├── run-console.sh │ └── run-demo.sh ├── third_party └── CMakeLists.txt ``` 这次调整的目标是: - 源码入口统一收敛到 `apps/` - 共享构建逻辑收敛到 `cmake/` - 本地运行配置收敛到 `config/` - 构建与启动动作收敛到 `scripts/` ## 环境要求 建议直接在 Jetson 本机编译和运行,因为仓库里的 SDK 动态库是 `Linux aarch64` 版本。 至少需要: - `cmake` - `g++` - `make` 或 `ninja` - `node` - `ffmpeg` Ubuntu / Jetson 常见安装方式: ```bash sudo apt update sudo apt install -y build-essential cmake nodejs ffmpeg ``` ## 快速开始 先准备本地配置文件: ```bash cp config/device.env.example config/device.env cp config/console.env.example config/console.env ``` 然后编辑: - `config/device.env` - `config/console.env` 至少填好这些值: - `NETSDK_DEVICE_HOST` - `NETSDK_DEVICE_USER` - `NETSDK_DEVICE_PASSWORD` ### 1. 构建 ```bash ./scripts/build.sh ``` 常用可选环境变量: - `BUILD_DIR`:默认 `./build` - `BUILD_TYPE`:默认 `Release` - `BUILD_JOBS`:默认自动探测 CPU 核数 - `NETSDK_ROOT`:覆盖默认 SDK 目录 构建产物统一输出到: ```text build/bin/netsdk_demo build/bin/netsdk_bridge ``` ### 2. 运行命令行工具 查询设备信息: ```bash ./scripts/run-demo.sh info ``` 扫描能力并生成报告: ```bash ./scripts/run-demo.sh caps --output ./output/capabilities.md ``` 录制码流: ```bash ./scripts/run-demo.sh record \ --channel 0 \ --stream main \ --seconds 15 \ --output ./output/ch0_main.dav ``` 抓拍 JPEG: ```bash ./scripts/run-demo.sh snapshot \ --channel 0 \ --stream main \ --output ./output/ch0_main.jpg ``` `run-demo.sh` 会自动: - 加载 `config/device.env` - 在缺少二进制时自动触发构建 - 调用 `build/bin/netsdk_demo` 如果你仍然想直接跑二进制,也可以。`netsdk_demo` 现在支持从环境变量读取默认连接参数: - `NETSDK_DEVICE_HOST` - `NETSDK_DEVICE_PORT` - `NETSDK_DEVICE_USER` - `NETSDK_DEVICE_PASSWORD` - `NETSDK_LOCAL_IP` ### 3. 启动 Web 控制台 ```bash ./scripts/run-console.sh ``` 脚本会自动: - 加载 `config/device.env` - 加载 `config/console.env` - 在缺少桥接二进制时自动触发构建 - 启动 `apps/console/server.js` 浏览器打开: ```text http://:8080 ``` 如果你想临时覆盖配置,仍然可以附加命令行参数,例如: ```bash ./scripts/run-console.sh --http-port 9090 ``` ## 配置说明 ### `config/device.env` ```bash NETSDK_DEVICE_HOST=192.168.1.108 NETSDK_DEVICE_PORT=37777 NETSDK_DEVICE_USER=admin NETSDK_DEVICE_PASSWORD=YourPassword NETSDK_LOCAL_IP= ``` ### `config/console.env` ```bash NETSDK_HTTP_HOST=0.0.0.0 NETSDK_HTTP_PORT=8080 NETSDK_BRIDGE_PATH=build/bin/netsdk_bridge NETSDK_WIDE_CHANNEL=0 NETSDK_PTZ_CHANNEL=1 NETSDK_WIDE_STREAM=extra1 NETSDK_PTZ_STREAM=main NETSDK_STATE_INTERVAL_MS=250 FFMPEG_BIN=ffmpeg ``` 仓库默认忽略: - `config/*.env` - `build/` - `output/` - `tmp/` 所以本地设备密码不会被误提交。 ## 设计说明 当前结构有几个明确取舍: - C++ 可执行文件按应用拆到 `apps/demo` 和 `apps/bridge`,避免根目录继续堆业务代码。 - SDK 链接逻辑抽到 `cmake/NetSDK.cmake`,避免多个 target 重复维护动态库配置。 - 构建产物统一到 `build/bin/`,脚本和运行时路径不再依赖 `build/demo/`、`build/bridge/` 这种目标私有目录。 - Web 控制台从 `web/` 收敛到 `apps/console/`,和其他应用保持同级。 - 设备连接参数统一走环境变量,适合脚本化、systemd、CI 和多环境切换。 ## 常见问题 ### 1. 为什么建议在 Jetson 上本机编译 因为 SDK 动态库是 `aarch64 Linux` 版本,不适合直接在 macOS 或 x86_64 Linux 主机上链接运行。 ### 2. 提示找不到 `libdhnetsdk.so` 优先检查: - `NETSDK_ROOT` 是否指向正确 SDK 根目录 - `third_party/` 下的 SDK 目录是否完整 - 是否在 Jetson / aarch64 Linux 环境中运行 ### 3. `run-console.sh` 启动失败 优先检查: - `node` 是否存在 - `ffmpeg` 是否存在 - `config/device.env` 是否填写了设备连接参数 - `config/console.env` 中的通道与码流配置是否正确 ### 4. 输出的 `.dav` 文件如何处理 `.dav` 是设备原始码流封装,后续可以再接 `ffmpeg`、GStreamer 或厂商工具做转换和处理。 ## 参考资料 - `third_party/dahua_netsdk_aarch64_v3.060.0000003.0.r.251127/Doc/NetSDK_Programming_Guide.pdf` - `third_party/dahua_netsdk_aarch64_v3.060.0000003.0.r.251127/Doc/NetSDK_Developer_Manual.chm`