ONVIF交互过程

当NVC和IPC完成设备探索过程后,就可以进行NVC与IPC的交互沟通,如下所示。
1)获取系统信息
GetNetworkInterfaces(没有账号密码,可能失败)
GetSystemDateAndTime
GetNetworkInterfaces
GetNetworkDefaultGateway
GetDeviceInformation
GetCapabilities(询问设备支持哪些功能,如Imaging,Media)

2)获取Media信息
GetProfiles(获取设备的Profile,涉及音视频源和编码信息)
GetVideoEncoderConfigurationOptions
GetVideoEncoderConfigurations
GetVideoSourceConfigurations
GetVideoSources
GetGuaranteedNumberOfVideoEncoderInstances
GetAudioEncoderConfigurationOptions
GetAudioSources
GetAudioSourceConfigurations
GetAudioEncoderConfigurations

3)获取PTZ云台信息
GetProfilesGetConfigurations
GetConfiguration
GetNode
GetPresets
GetOptions
GetMoveOptions
GetOptions

4)配置Video/Audio,一般是Get和Set配对调用
GetVideoSourceConfigurations
SetVideoSourceConfigurations
GetAudioSourceConfigurations
SetVideoSourceConfigurations

5)获取流媒体服务器地址
GetStreamUri(通过此接口获取到的URI,以RTSP协议传输视频流)

至此,一台支持ONVIF标准的IPC加入工作网络后与其他NVC客户端交互的初始过程基本结束。由于ONVIF接口调用具有先后的因果顺序,如果某个接口的调用不成功或者返回的数据不正确,NVC应当重复调用失败的接口,直到返回结果成功为止。

在实现以上接口的过程中,每个接口都是非阻塞工作方式,所以每个接口使用的局部资源应该是动态申请,交由gSOAP工具包自动释放。gSOAP工具提供soap_malloc(soap, type_size, count)接口动态申请缓存资源,使用这个接口开辟的缓存会保存在soap结构体中,当服务调用结束的时候,soap会释放所有动态开辟的空间,从而保证没有内存泄漏导致系统崩溃。

ONVIF变量基本都是以结构体对内置数据类型进行封装,而且结构体成员大多采用指针形式,指针结构体之中又嵌套着指针。在使用这些ONVIF变量时,应该初始化变量为零。否则系统程序会因为调用野指针(没有开辟空间的指针)而崩溃。最致命的是这些嵌套的指针相当隐蔽,开发者很难快速查找出问题指针是哪个,严重影响项目开发进度。

摘自《基于ONVIF标准的高清网络摄像机的设计与开发》

发表评论

电子邮件地址不会被公开。 必填项已用*标注