# 海康威视 ISAPI PTZ 云台控制协议 > 基于实际抓包分析整理,适用于海康威视网络摄像头 ## 1. 概述 ### 1.1 ISAPI 简介 ISAPI(IP Surveillance API)是海康威视设备的标准 HTTP API 接口,用于设备配置、实时预览、PTZ 控制等功能。 ### 1.2 PTZ 功能 PTZ(Pan-Tilt-Zoom)云台控制,支持: - **Pan**:水平转动(左右) - **Tilt**:垂直转动(上下) - **Zoom**:变焦(放大缩小) --- ## 2. 认证机制 ### 2.1 Session 认证(Web 界面使用) 海康摄像头 Web 界面使用 **Session 认证**,而非 Basic Auth。 认证流程: 1. 访问摄像头 Web 界面:`http://{ip}/doc/page/preview.asp` 2. 输入用户名密码登录 3. 登录成功后获取: - **Cookie**: `WebSession_{id}={token}` - **SessionTag**: 用于请求验证的 hash 值 ### 2.2 认证 Header | Header | 格式 | 说明 | |--------|------|------| | Cookie | `WebSession_{id}={token}` | Session Token | | SessionTag | `{hash}` | 请求验证标识 | ### 2.3 获取认证信息 登录后,可以从浏览器开发者工具中获取: 1. 打开摄像头 Web 界面并登录 2. F12 打开开发者工具 3. 在 Network 标签中找到任意请求 4. 复制 `Cookie` 和 `SessionTag` Header --- ## 3. PTZ 控制 API ### 3.1 连续移动(Continuous) 持续向某个方向移动,直到发送停止命令。 **端点** ``` PUT /ISAPI/PTZCtrl/channels/{channel}/continuous ``` **参数** - `channel`: 通道号,通常为 `1` **请求头** ```http Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: WebSession_{id}={token} SessionTag: {hash} X-Requested-With: XMLHttpRequest If-Modified-Since: 0 ``` **请求体(XML)** ```xml {pan_value} {tilt_value} ``` --- ## 4. 参数说明 ### 4.1 PTZ 参数范围 | 参数 | 范围 | 说明 | |------|------|------| | pan | -100 ~ 100 | 水平转动速度,负值向左,正值向右 | | tilt | -100 ~ 100 | 垂直转动速度,负值向下,正值向上 | | zoom | -100 ~ 100 | 变焦速度,负值缩小,正值放大 | ### 4.2 方向控制对照表 | 方向 | pan | tilt | 说明 | |------|-----|------|------| | 上 | 0 | 60 | 向上转动 | | 下 | 0 | -60 | 向下转动 | | 左 | -60 | 0 | 向左转动 | | 右 | 60 | 0 | 向右转动 | | 左上 | -60 | 60 | 斜向左上 | | 右上 | 60 | 60 | 斜向右上 | | 左下 | -60 | -60 | 斜向左下 | | 右下 | 60 | -60 | 斜向右下 | | **停止** | 0 | 0 | 停止移动 | > 注:数值 60 是推荐的移动速度,可根据需要调整(1-100) --- ## 5. curl 示例 ### 5.1 向右转动 ```bash curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \ -X 'PUT' \ -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \ -H 'Cookie: WebSession_8febb54dd5=1ca674cedc0b6ffddacf1eb4ecfa3016127c90104527f1ecf8ef88ca09bd2ef1' \ -H 'SessionTag: 7615ce65f40480305568ed02726ac67e89452590e58244976c836b22daeff522' \ -H 'X-Requested-With: XMLHttpRequest' \ -H 'If-Modified-Since: 0' \ --data-raw '600' ``` ### 5.2 向上转动 ```bash curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \ -X 'PUT' \ -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \ -H 'Cookie: WebSession_xxx=xxx' \ -H 'SessionTag: xxx' \ --data-raw '060' ``` ### 5.3 停止移动 ```bash curl 'http://192.168.0.64/ISAPI/PTZCtrl/channels/1/continuous' \ -X 'PUT' \ -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \ -H 'Cookie: WebSession_xxx=xxx' \ -H 'SessionTag: xxx' \ --data-raw '00' ``` --- ## 6. 完整请求头参考 基于实际抓包的完整请求头: ```http PUT /ISAPI/PTZCtrl/channels/1/continuous HTTP/1.1 Host: 192.168.0.64 Accept: */* Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cache-Control: no-cache Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: language=en; WebSession_8febb54dd5=1ca674cedc0b6ffddacf1eb4ecfa3016127c90104527f1ecf8ef88ca09bd2ef1 If-Modified-Since: 0 Origin: http://192.168.0.64 Pragma: no-cache Referer: http://192.168.0.64/doc/page/preview.asp SessionTag: 7615ce65f40480305568ed02726ac67e89452590e58244976c836b22daeff522 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 X-Requested-With: XMLHttpRequest 600 ``` --- ## 7. 注意事项 ### 7.1 认证问题 - **Session 过期**:登录 Session 会过期,需要重新登录获取新的 Cookie 和 SessionTag - **401 错误**:如果返回 401 Unauthorized,说明认证信息无效或已过期 - **Basic Auth 无效**:直接使用 Basic Auth 认证无法控制 PTZ ### 7.2 CORS 问题 浏览器前端直接请求摄像头会遇到跨域问题(CORS),解决方案: 1. **开发环境**:使用 Vite/Webpack 代理 2. **生产环境**:通过后端 API 转发请求 ### 7.3 网络环境 - 摄像头通常在内网,外网无法直接访问 - 生产环境需要通过后端服务代理 ### 7.4 速度控制 - pan/tilt 值越大,移动速度越快 - 推荐使用 50-60 作为默认速度 - 停止命令必须发送 `pan=0, tilt=0` --- ## 8. 相关资源 - 摄像头 Web 界面:`http://{ip}/doc/page/preview.asp` - 海康 ISAPI 官方文档:联系海康技术支持获取 --- ## 更新日志 | 日期 | 内容 | |------|------| | 2026-01-09 | 初始版本,基于实际抓包整理 |