# 摄像头管理 API 使用说明 本文档说明如何使用摄像头管理相关的 REST API 接口。 ## 基础配置 ### 服务器地址 ``` http://localhost:8083 # 默认地址,根据实际配置调整 ``` ### 认证 如果启用了 HTTP 认证,需要在请求头中添加 Basic Auth: ``` Authorization: Basic ``` ## API 接口列表 ### 1. 获取所有摄像头列表 **请求方式:** `GET` **请求路径:** `/cameras` **描述:** 获取所有未删除的摄像头列表 **响应示例:** ```json { "cameras": [ { "camera_id": 1, "ip": "192.168.1.100", "port": 554, "username": "admin", "password": "password", "url": "rtsp://admin:password@192.168.1.100:554/stream1", "camera_produce": "海康威视", "camera_name": "前门摄像头", "device_type": "网络摄像头", "unit_code": "UNIT001", "nvr_produce": "海康威视", "nvr_path": "/stream1", "play_back": "支持", "del_flag": "0", "create_by": "admin", "create_time": "2024-01-01T10:00:00Z", "update_by": "admin", "update_time": "2024-01-01T10:00:00Z", "user_id": 1, "dept_id": 1, "stream_status": "online" } ], "total": 1 } ``` ### 2. 根据单位代码获取摄像头列表 **请求方式:** `GET` **请求路径:** `/cameras/unit/{unitcode}` **描述:** 根据单位代码获取对应的摄像头列表 **路径参数:** - `unitcode`: 单位代码(必填) **响应示例:** ```json { "cameras": [ { "camera_id": 1, "ip": "192.168.1.100", "port": 554, "username": "admin", "password": "password", "url": "rtsp://admin:password@192.168.1.100:554/stream1", "camera_produce": "海康威视", "camera_name": "前门摄像头", "device_type": "网络摄像头", "unit_code": "UNIT001", "nvr_produce": "海康威视", "nvr_path": "/stream1", "play_back": "支持", "del_flag": "0", "create_by": "admin", "create_time": "2024-01-01T10:00:00Z", "update_by": "admin", "update_time": "2024-01-01T10:00:00Z", "user_id": 1, "dept_id": 1, "stream_status": "online" } ], "total": 1, "unit_code": "UNIT001" } ``` ### 3. 其他摄像头管理接口 - `POST /camera/add` - 添加摄像头 - `GET /camera/{uuid}` - 获取单个摄像头信息 - `PUT /camera/{uuid}` - 更新摄像头信息 - `DELETE /camera/{uuid}` - 删除摄像头 - `POST /cameras/refresh` - 刷新摄像头列表 - `GET /database/status` - 获取数据库状态 ## 前端调用示例 ### JavaScript (原生) ```javascript // 获取所有摄像头 async function getAllCameras() { try { const response = await fetch('http://localhost:8083/cameras', { method: 'GET', headers: { 'Content-Type': 'application/json', // 如果需要认证,添加以下头部 // 'Authorization': 'Basic ' + btoa('username:password') } }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); console.log('所有摄像头:', data.cameras); return data; } catch (error) { console.error('获取摄像头列表失败:', error); } } // 根据单位代码获取摄像头 async function getCamerasByUnitCode(unitCode) { try { const response = await fetch(`http://localhost:8083/cameras/unit/${unitCode}`, { method: 'GET', headers: { 'Content-Type': 'application/json', // 如果需要认证,添加以下头部 // 'Authorization': 'Basic ' + btoa('username:password') } }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); console.log(`单位 ${unitCode} 的摄像头:`, data.cameras); return data; } catch (error) { console.error('获取摄像头列表失败:', error); } } // 使用示例 getAllCameras(); getCamerasByUnitCode('UNIT001'); ``` ### jQuery ```javascript // 获取所有摄像头 function getAllCameras() { $.ajax({ url: 'http://localhost:8083/cameras', type: 'GET', dataType: 'json', // 如果需要认证 // beforeSend: function(xhr) { // xhr.setRequestHeader('Authorization', 'Basic ' + btoa('username:password')); // }, success: function(data) { console.log('所有摄像头:', data.cameras); // 处理数据 }, error: function(xhr, status, error) { console.error('获取摄像头列表失败:', error); } }); } // 根据单位代码获取摄像头 function getCamerasByUnitCode(unitCode) { $.ajax({ url: `http://localhost:8083/cameras/unit/${unitCode}`, type: 'GET', dataType: 'json', // 如果需要认证 // beforeSend: function(xhr) { // xhr.setRequestHeader('Authorization', 'Basic ' + btoa('username:password')); // }, success: function(data) { console.log(`单位 ${unitCode} 的摄像头:`, data.cameras); // 处理数据 }, error: function(xhr, status, error) { console.error('获取摄像头列表失败:', error); } }); } ``` ### Axios ```javascript import axios from 'axios'; // 配置基础URL和认证 const api = axios.create({ baseURL: 'http://localhost:8083', headers: { 'Content-Type': 'application/json', // 如果需要认证 // 'Authorization': 'Basic ' + btoa('username:password') } }); // 获取所有摄像头 export const getAllCameras = async () => { try { const response = await api.get('/cameras'); return response.data; } catch (error) { console.error('获取摄像头列表失败:', error); throw error; } }; // 根据单位代码获取摄像头 export const getCamerasByUnitCode = async (unitCode) => { try { const response = await api.get(`/cameras/unit/${unitCode}`); return response.data; } catch (error) { console.error('获取摄像头列表失败:', error); throw error; } }; ``` ### Vue.js 组件示例 ```vue ``` ## 错误处理 ### 常见错误码 - `400 Bad Request` - 请求参数错误 - `401 Unauthorized` - 认证失败 - `500 Internal Server Error` - 服务器内部错误 - `503 Service Unavailable` - 数据库未启用 ### 错误响应格式 ```json { "error": "错误描述信息" } ``` ## 注意事项 1. **数据库配置**:确保在 `config.json` 中正确配置了数据库连接信息 2. **认证**:如果启用了 HTTP 认证,所有请求都需要包含认证头部 3. **CORS**:如果前端和后端不在同一域名下,需要处理跨域问题 4. **流状态**:`stream_status` 字段表示摄像头的实时流状态(online/offline) 5. **单位代码**:`unit_code` 字段用于按组织单位过滤摄像头 6. **删除标记**:只返回 `del_flag != '1'` 的摄像头(未删除的摄像头)