hikvision-video-api/README.md

200 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 海康威视视频应用服务 API — Spring Boot 集成
## 功能概述
| 接口 | 说明 |
|------|------|
| `GET /api/cameras` | 分页获取摄像头资源列表 |
| `GET /api/cameras/{cameraIndexCode}` | 查询摄像头详情 |
| `GET /api/cameras/{cameraIndexCode}/preview-url` | 快捷获取实时预览播放地址 |
| `POST /api/cameras/preview-url` | 获取实时预览播放地址(完整参数) |
| `POST /api/cameras/playback-url` | 获取录像回放播放地址 |
---
## Web 监控界面
启动后访问 `http://localhost:8080` 即可打开视频监控界面:
- 左侧配置平台 IP / AppKey / AppSecret点击「连接插件 & 初始化」
- 自动加载摄像头列表,点击任意摄像头即可播放实时视频
- 支持**实时预览** / **录像回放**切换
- 支持 1/4/9 分屏显示
- 抓图、本地录像等快捷操作
> **前提:** 在 Windows 客户端安装海康官方 `VideoWebPlugin.exe`
> 并将 JS 插件文件放入 `src/main/resources/static/js/` 目录。
---
## 快速开始
### 1. 配置 application.yml
```yaml
hikvision:
api:
host: https://192.168.1.100 # 平台IP或域名
app-key: your_app_key # 开放平台应用AppKey
app-secret: your_app_secret # 开放平台应用AppSecret
```
> AppKey/AppSecret 在海康 iSecure Center 开放平台 → 应用管理 → 创建应用 后获取。
### 2. 编译运行
```bash
mvn clean package -DskipTests
java -jar target/hikvision-video-api-1.0.0.jar
```
---
## 接口调用示例
### 获取摄像头列表
```bash
curl "http://localhost:8080/api/cameras?pageNo=1&pageSize=20"
```
响应:
```json
{
"code": 200,
"msg": "success",
"data": {
"total": 100,
"pageNo": 1,
"pageSize": 20,
"totalPage": 5,
"list": [
{
"cameraIndexCode": "abc123",
"cameraName": "1号楼入口",
"onlineStatus": "1",
"installPlace": "1号楼大门"
}
]
}
}
```
---
### 获取实时预览播放地址RTSP
```bash
curl "http://localhost:8080/api/cameras/abc123/preview-url?protocol=1"
```
响应:
```json
{
"code": 200,
"data": {
"url": "rtsp://192.168.1.100:554/openUrl/xxxtoken"
}
}
```
### 获取实时预览播放地址HLS
```bash
curl -X POST http://localhost:8080/api/cameras/preview-url \
-H "Content-Type: application/json" \
-d '{
"cameraIndexCode": "abc123",
"streamType": 0,
"protocol": 3,
"transmode": 1
}'
```
响应:
```json
{
"code": 200,
"data": {
"url": "https://192.168.1.100/openUrl/xxxtoken/index.m3u8"
}
}
```
---
### 获取录像回放播放地址
```bash
curl -X POST http://localhost:8080/api/cameras/playback-url \
-H "Content-Type: application/json" \
-d '{
"cameraIndexCode": "abc123",
"beginTime": "2024-01-01T00:00:00.000+08:00",
"endTime": "2024-01-01T01:00:00.000+08:00",
"protocol": 1,
"recordType": 0
}'
```
---
## 协议类型说明
| protocol值 | 协议 | 说明 |
|------------|------|------|
| 1 | RTSP | 适合 VLC、ffmpeg 等本地播放 |
| 2 | RTMP | 适合 Flash/流媒体服务器转发 |
| 3 | HLS | 适合 Web 页面播放video.js、hls.js |
| 4 | FLV (HTTP-FLV) | 适合 Web 低延时播放flv.js |
---
## 项目结构
```
src/main/java/com/hikvision/video/
├── HikvisionVideoApplication.java # 启动类
├── config/
│ └── HikvisionProperties.java # 配置读取
├── controller/
│ └── VideoController.java # REST接口
├── model/
│ └── HikModels.java # 请求/响应模型
├── service/
│ └── HikvisionVideoService.java # 业务逻辑 & API调用
└── util/
├── HikvisionSignUtil.java # HMAC-SHA256签名
└── HttpUtil.java # HTTP请求工具
```
---
## 签名说明
海康 API 采用 **HMAC-SHA256** 签名鉴权,签名字符串格式:
```
{METHOD}\n
{Accept}\n
{Content-Type}\n
x-ca-key:{AppKey}\n
x-ca-nonce:{随机UUID}\n
x-ca-timestamp:{毫秒时间戳}\n
{请求路径}
```
签名结果 Base64 编码后放入请求头 `X-Ca-Signature`
---
## 常见错误码
| code | 含义 | 解决方案 |
|------|------|---------|
| 0 | 成功 | — |
| 401 | 鉴权失败 | 检查 AppKey/AppSecret 配置 |
| 1001 | 参数错误 | 检查 cameraIndexCode 是否存在 |
| 17004 | 摄像头离线 | 检查设备在线状态 |
| 10001 | 无权限 | 检查应用是否有摄像头访问权限 |