组件 & 定制#

适配器架构#

Adaptor architecture

适配器架构具有 2 个接口。两个接口都可以使用适配器加载器加载。

1) 设备发现接口#

此适配器接口用于发现设备,例如,ONVIF 协议或 UPnP 协议

  • 新的设备发现适配器应实现 IDeviceDiscoveryInterface 类(请参阅 VST 容器中的 include/device_discovery_adaptor.h 头文件)

  • 实现以下方法以创建和销毁适配器对象

    typedef IDeviceDiscoveryInterface* createDiscoveryObject();
    typedef void destroyDiscoveryObject ( IDeviceDiscoveryInterface* object );
    

2) 设备控制接口#

此适配器接口控制设备,例如,ONVIF 控制协议

  • 新的设备控制适配器应实现 IDeviceControlInterface 类(请参阅 VST 容器中的 include/device_control_adaptor.h 头文件)

  • 实现以下方法以创建和销毁适配器对象

    typedef IDeviceControlInterface* createObject();
    typedef void destroyObject( IDeviceControlInterface* object );
    

应用程序开发#

  • 本节帮助开发人员了解 VST API。

  • VST 为客户端应用程序提供了一组 REST API,使开发人员能够访问 VST 的所有功能。

  • VST API 符合 OpenAPI 标准,因此开发人员能够通过 HTTP GET/POST 请求与 VST 交互。

  1. 获取所有设备的详细信息

    GET *api/v1/sensor/list*

    • 请求类型:GET

    • 示例请求 URL

      https://IP_ADDRESS:PORT_NUMBER/api/v1/sensor/list
      
    • 成功时的示例响应,否则为空响应

      [
                {
                        "firmwareVersion": "string",
                        "hardware": "string",
                        "hardwareId": "string",
                        "sensorId": "string",
                        "sensorIp": "string",
                        "location": "string",
                        "manufacturer": "string",
                        "name": "string",
                        "position": {
                        "depth": "string",
                        "direction": "string",
                        "fieldOfView": "string",
                        "coordinates": {
                                "x": "string",
                                "y": "string"
                        },
                        "geoLocation": {
                                "latitude": "string",
                                "longitude": "string"
                        },
                        "origin": {
                                "latitude": "string",
                                "longitude": "string"
                        }
                        },
                        "serialNumber": "string",
                        "state": "online",
                        "tags": "string"
                }
      ]
      
  2. 获取传感器流信息列表 (RTSP URL)

    GET *api/v1/sensor/streams*

    • 请求类型:GET

    • 示例请求 URL

      https://IP_ADDRESS:PORT_NUMBER/api/v1/sensor/streams
      
    • 成功时的示例响应,否则为 NULL

       [
                  {
                          "7927cbbc-cba6-4f22-b65d-46f7382f5f65": [
                          {
                                  "streamId": "7927cbbc-cba6-4f22-b65d-46f7382f5f65",
                                  "isMain": true,
                                  "url": "rtsp://10.41.18.147:8554/live/7927cbbc-cba6-4f22-b65d-46f7382f5f65",
                                  "name": "HIKVISION%20DS-2CD2T43G0-I5",
                                  "metadata": {
                                  "bitrate": "8000",
                                  "codec": "H264",
                                  "framerate": "30",
                                  "govlength": "60",
                                  "resolution": "1920x1080"
                                  }
                          }
                          ]
                  }
      ]
      
  3. 获取设备状态

    GET *api/v1/sensor/status*

    • 请求类型:GET

    • 示例请求 URL

      https://IP_ADDRESS:PORT_NUMBER/api/v1/sensor/status
      
    • 成功时的示例响应,否则为 NULL

      {
            "Amcrest" :
           {
                  "error_code" : "NoError",
                 "error_message" : "No Error",
                 "name" : "Amcrest",
                 "state" : "online"
            }
       }
      
  4. 添加新设备(适用于 1) 设备发现接口

    POST *api/v1/sensor/add*

    此 API 用于通过 IP 地址或 RTSP URL 添加设备。使用 IP 地址添加设备: 可以省略 url 字段。使用 RTSP URL 添加设备: 可以省略 sensorIp、username 和 password 字段。

    • 请求类型:POST

    • 请求正文

      {
                 "sensorIp": "string",
                 "name": "string",
                 "location": "string",
                 "hardware": "string",
                 "username": "string",
                 "password": "string",
                 "manufacturer": "string",
                 "serialNumber": "string",
                 "firmwareVersion": "string",
                 "hardwareId": "string",
                 "tags": "string"
         }
      
    • 成功时的示例响应,否则为 错误

      {
                  "sensorId": "string"
          }
      
  5. 验证设备身份(适用于 1) 设备发现接口

    POST *api/v1/sensor/{sensor-id}/credentials*

    • 请求类型:POST

    • sensor-id:使用 api/v1/sensor/list 检索的传感器 ID

    • 请求正文

      {
            "password": "string",
            "username": "string"
      }
      
    • 成功时的示例响应,否则为 错误

      true
      
  6. 开始录制设备流

    POST api/v1/record/{stream-id}/start

    • 请求类型:POST

    • sensor-id:使用 api/v1/sensor/list 检索的传感器 ID

    • 请求正文

      {
            "streamId": "{stream-id}"
       }
      
    • 成功时的示例响应,否则为 错误

      true
      
  7. 停止录制设备流

    POST api/v1/record/{stream-id}/stop

    • 请求类型:POST

    • sensor-id:使用 api/v1/sensor/list 检索的传感器 ID

    • 请求正文

      {
             "streamId": "{stream-id}"
      }
      
    • 成功时的示例响应,否则为 错误

      true
      
  8. 启动子网中新设备的扫描,适用于 1) 设备发现接口

    POST api/v1/sensor/scan

    • 请求类型:GET

    • 示例请求

      https://IP_ADDRESS:PORT_NUMBER/api/v1/sensor/scan
      
    • 成功时的示例响应,否则为 NULL

      true
      

请参阅 API 部分,其中提供了有关所有受支持的 RESTful API 的详细信息。

错误#

错误#

名称

类型

描述

必需

error_code

字符串

_示例:_ “VSTInternalError”

error_message

字符串

_示例:_ “VST 内部处理错误”

VST 错误

VST 错误#

HTTP 代码

错误代码

错误消息

0

NoError

无错误

403

DeviceUnauthorizedError

设备未授权

401

ClientUnauthorizedError

客户端未授权

400

InvalidParameterError

参数无效或超出范围

404

DeviceNotFoundError

未找到设备或设备 ID 无效

405

MethodNotAllowedError

不允许的方法

408

DeviceRequestTimeoutError

请求超时

500

CommunicationError

设备通信错误

500

VSTInternalError

VST 内部处理错误

501

VSTNotSupportedError

不支持的操作/动作

507

VSTInsufficientStorage

存储空间不足