更新时间:2023-08-09 09:25:02下载pdf
ONVIF 来自 Open Network Video Interface Forum(开放网络视频接口论坛)的首字母缩写,是一种在安防领域广泛应用的网络协议。ONVIF 官方 发布了很多协议规范,本文以 Profile S 规范为例,讲述 ONVIF 服务端和客户端的相关信息。
ONVIF 是典型的客户端和服务端模型,在 同一局域网 内,服务端用于 IPC 产品,客户端用于 NVR 产品。
IPC 一般作为 Server,接收来自 Client 端的请求。
对于集成 ONVIF 功能的 IPC 设备,支持在 NVR 上通过 ONVIF 协议添加 IPC 设备,实现视频预览功能。
NVR 或者其他后端设备作为 Client,主动发起连接和控制请求。
对于集成 ONVIF 功能的 NVR 设备,可添加支持 ONVIF 协议的 IPC 设备,获取 IPC 设备的视频流。
以下主要讲述 Server 端的功能。
本小节从最基本功能开始描述 ONVIF 的基本工作过程。
启动 ONVIF Server
启动后,IPC 设备可以被 ONVIF Client 端发现,连接后可以进行拉流、获取事件等动作。
考虑到嵌入式设备资源有限,当前实现的 ONVIF Server 仅支持以下接口:
设备管理类 | 媒体类 | PTZ 控制类 |
---|---|---|
GetCapabilities | GetProfile | GetConfiguration |
GetDeviceInformation | GetProfiles | GetConfigurations |
GetServices | GetAudioSources | GetNode |
GetServiceCapabilities | GetAudioSourceConfiguration | GetNodes |
- | GetAudioSourceConfigurations | ContinuousMove |
- | GetAudioEncoderConfiguration | Stop |
- | GetAudioEncoderConfigurations | GetStatus |
- | GetVideoSources | AbsoluteMove |
- | GetVideoSourceConfiguration | RelativeMove |
- | GetVideoSourceConfigurations | GetPresets |
- | GetVideoEncoderConfiguration | SetPreset |
- | GetVideoEncoderConfigurations | RemovePreset |
- | GetVideoEncoderConfigurationOptions | GotoPreset |
- | SetVideoEncoderConfiguration | - |
- | GetStreamUri | - |
以上功能详细描述,请访问 ONVIF 官方文档 查看详情。
关闭 ONVIF Server
关闭 ONVIF Server 与 Client 连接,此时 Server 端所有功能将会停用,设备将不会被发现。
app_user_event
app_user_onvif
IPC SDK
在 ability.config
配置文件中,将以下配置使能:
ENV_TUYA_ONVIF_ENABLE=1
ENV_TY_SYS_ONVIF_SERVER_ENABLE=1
ENV_FIRMNAME=\"xxxxx\" # 将用于设备被发现时所显示的名称
后续可通过可视化配置工具更改该配置项。
以下主要介绍 app_user_onvif
中相关数据结构。
typedef enum {
ONVIF_EVENT_TYPE_CELL_MOTION_DETECTION = 1, // 移动侦测
ONVIF_EVENT_TYPE_TRIGGER_DIGITAL_INPUT, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_TRIGGER_RELAY, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_VIDEO_SIGNAL_LOSS, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_DETECTED_SOUND, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_PTZPRESETS_INVOKED, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_PTZPRESETS_REACHED, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_PTZPRESETS_ABORTED, // 暂时未用,后续扩展
ONVIF_EVENT_TYPE_PTZPRESETS_LEFT, // 暂时未用,后续扩展
} ONVIF_EVENT_TYPE_T; // 事件类型
typedef struct {
int channel; // 事件发生的通道号
int state; // 事件发生状态
} ONVIF_EVENT_CELL_MOTION_DETECTION_T; // 移动侦测信息
typedef struct {
int input_channel;
int logical_state;
} ONVIF_EVENT_TRIGGER_DIGITAL_INPUT_T; // 暂时未用,后续扩展
typedef struct
{
ONVIF_EVENT_TYPE_T event_type; // 事件类型
union {
ONVIF_EVENT_CELL_MOTION_DETECTION_T cell_motion_detection;
ONVIF_EVENT_TRIGGER_DIGITAL_INPUT_T digital_input;
} event; // 事件详情
uint64_t event_timestamp_ms; // 事件时间戳
char* snapshot_buf; // 事件抓图 buff(暂不支持)
unsigned int snapshot_size; // 事件抓图大小(暂不支持)
} ONVIF_EVENT_T;
以下主要介绍 app_user_onvif
Server 端相关 API。
执行后,IPC 设备将被同局域网内的 NVR 等设备发现。该 API 会立即返回,具体 ONVIF 业务响应步骤将异步执行。
/**
* @ start ONVIF Server
*
* @return int 0 表示成功,非 0 异常
* @warning:
*/
int ty_user_onvif_server_start(void);
停止 Server 端服务后,该 API 返回。
/**
* @ stop ONVIF Server
*
* @return int 0 表示成功,非 0 异常
* @warning:
*/
int ty_user_onvif_server_stop(void);
用于 App 端下发 ONVIF 相关命令后的响应。
该 API 会立即返回,具体响应步骤将异步执行。
/**
* @ start receiving internal messages
*
* @return int 0 表示成功,非 0 异常
* @warning:
*/
int ty_user_onvif_msg_start(void);
该 API 会立即返回,具体响应步骤将异步执行。
/**
* @ Reporting an Event
*
* @param[in] ONVIF_EVENT_T: event info
* @return int 0 表示成功,非 0 异常
* @warning:
*/
int ty_user_onvif_server_event_handling(ONVIF_EVENT_T *event)
ability.config
配置文件中的 ONVIF 使能项。请确认 NVR 等后端设备的鉴权方式,非 http digest 方式鉴权,后端设备会存在持续鉴权等问题,多消耗 IPC 的 CPU 和带宽资源,导致其他功能响应缓慢。
可能超过 IPC ONVIF 和 RTSP 协议最大连接能力。目前可通过联系开发人员修改。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈