ONVIF-Core event [4][Event Notifications]

9.4 Event Notifications
通知会回答以下问题:
• 什么时候发生的?
• 谁产生了此事件?
• 发生了什么?

通过在NotificationMessage的Message元素中添加时间属性来回答“何时”问题。符合ONVIF的设备应包括Message元素的时间属性。

“谁”问题分为两个部分。 一部分是WS-Endpoint,它标识已生成通知的设备或设备中的服务。 因此,应在NotificationMessage的ProducerReference元素内指定WS-Endpoint。 第二部分是WS端点内组件的标识,该组件负责生成通知。 根据组件的不同,唯一标识组件可能需要单个参数,多个参数,或者一个都不需要。 这些参数作为项目放置在消息容器(container)的Source元素内。

“什么”问题分两个步骤回答。首先,NotificationMessage的Topic元素用于对事件进行分类。其次,将项目添加到消息容器的Data元素,以描述事件的详细信息。 ONVIF使用[WS-BaseNotification]中的NotificationMessage类型来保存一个或多个tt:Message类型的通知消息:
<xs:complexType name=“NotificationMessageHolderType” >
xs:sequence
<xs:element ref=“wsnt:SubscriptionReference” minOccurs=“0” />
<xs:element ref=“wsnt:Topic” minOccurs=“0” />
<xs:element ref=“wsnt:ProducerReference” minOccurs=“0” />
<xs:element name=“Message”>
xs:complexType
xs:sequence
<tt:element name=“Message” type=“tt:Message” maxOccurs=“unbounded”/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
第9.4.1节提供了消息有效负载的详细格式,而第9.4.3节介绍了消息有效负载的描述语言。 第9.4.4节定义了订阅中使用的语法,用于按其消息内容过滤通知。

9.4.1 Notification Message Format
通知消息的主要信息元素是:
•UtcTime表示消息描述的事件发生的时间。
•主题(topic)和来源项目(Source items)唯一地标识事件的来源
•数据包含一个或多个描述事件的值
•可选的密钥(Key)项可能会扩展源标识符(Source identifier)

源,数据和密钥被构造为项目列表。每个项目都可以容纳任意数量的SimpleItem或ElementItem类型的项目。每个项目都有一个名称和一个值。对于ElementItem,该值由ElementItem元素内的一个XML元素表示。对于SimpleItem,该值应由value属性指定。在此消息的任何组(group)中包含的所有项目中,所有项目的名称应唯一。

SourceItem和Key元素中不应使用ElementItem。

供应商特定的扩展应将SimpleItem和ElementItem Name属性表示为QName。这样可以避免在特定于供应商的扩展名和将来的ONVIF扩展名之间发生潜在的名称冲突。

建议在适用的情况下使用SimpleItems代替ElementItems,因为SimpleItems便于将消息集成到通用客户端中。可以从TopicSet中提取Simple和ElementItem的确切类型信息(请参见9.6节),其中可以通过对消息有效负载的描述来扩展每个主题。

下例演示了通知的不同部分:
wsnt:NotificationMessage

<wsnt:Topic Dialect="…Concrete">
tns1:PTZController/PTZPreset/Reached
</wsnt:Topic>
wsnt:Message
<tt:Message UtcTime="…">
tt:Source
<tt:SimpleItem Name=“PTZConfigurationToken” Value=“PTZConfig1”/>
</tt:Source>
tt:Data
<tt:SimpleItem Name=“PresetToken” Value=“Preset5”/>
<tt:SimpleItem Name=“PresetName” Value=“ParkingLot”/>
</tt:Data>
</tt:Message>
</wsnt:Message>
</wsnt:NotificationMessage>

The Item “PTZConfigurationToken” uniquely identifies the component, which is responsible for the detection of the Event. In this example, the component is a PTZ Node referenced by the PTZ Configuration “PTZConfig1”.
The event tns1:PTZController/PTZPreset/Reached indicates that the PTZ unit has arrived at a preset. The data block contains information about the preset that has been reached. The Preset is identified by a PresetToken “Preset5” which is named “PresetName”.
“ PTZConfigurationToken”项唯一标识负责检测事件的组件。 在此示例中,组件是由PTZ配置“ PTZConfig1”引用的PTZ节点。
事件tns1:PTZController / PTZPreset / Reached表示PTZ单元已达到预设(preset)。 数据块包含有关已达到的预设的信息。 预设由名为“ PresetName”的PresetToken“ Preset5”标识。

9.4.2 Property Events
本规范引入了属性事件的概念,允许观察属性的状态变化。 与其他事件一样,属性由其主题和来源(Topic and Source)唯一标识。 属性的状态由其数据项的值反映出来。
每个属性在订阅中都有一个单独的生命周期,如图7所示。
在这里插入图片描述

当客户端订阅代表某些属性的主题时,设备应提供通知,通知客户端所有 具有所请求属性且在订阅时仍处于活动状态 的对象。报告所有现有对象后,设备应在属性更改,删除或创建新属性时发送通知。客户端还可以通过请求同步点(synchronization point)来随时请求客户端已订阅的所有当前活动属性的值(请参阅第9.5节)。

属性事件的通知消息应包含PropertyOperation属性。操作模式“已初始化(Initialized)”将用于通知客户有关property的创建的信息。当请求同步点时,也应使用“Initialized”操作模式。

在此标准中定义了属性接口,以便将所有与属性相关的事件组合在一起,并统一呈现给客户端。建议在适用的地方使用属性接口。 9.4节详细说明了事件和属性的结构。

9.4.2.1 Property Example
【感觉就是入侵检测啊】
以下视频分析示例演示了属性的动态行为:视频分析检测器的规则引擎界面可以定义字段。这样的检测器区域(field)由像平面(image plane)中的多边形(polygon)描述。对于场景中的每个对象,规则引擎确定哪些对象在多边形内。客户端可以通过订阅检测器字段的相应ObjectsInside属性来访问此信息。每当对象出现在场景中时,都会创建一个新的ObjectsInside属性。客户端会收到相应的“属性创建”通知,该通知指示对象是出现在多边形内部还是外部。每当对象进入或离开多边形时,都会生成“属性更改”通知,指示该对象的ObjectsInside属性已更改。当某个对象离开场景时,将删除相应的ObjectsInside属性,并通过“属性删除”通知来通知客户端。

本节中的示例演示了关键项的应用。规则引擎可以包含FieldDetector规则。这些规则为场景中的每个对象定义一个ObjectsInside属性。当新对象出现在某个区域外时,将产生以下通知:
wsnt:NotificationMessage

<wsnt:Topic Dialect="…Concrete">
tns1:RuleEngine/FieldDetector/ObjectsInside
</wsnt:Topic>
wsnt:Message
<tt:Message UtcTime="…" PropertyOperation=“Initialized”>
tt:Source
<tt:SimpleItem Name=“VideoSourceConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“VideoAnalyticsConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“Rule” Value=“myImportantField”/>
</tt:Source>
tt:Key
<tt:SimpleItem Name=“ObjectId” Value=“5”/>
</tt:Key>
tt:Data
<tt:SimpleItem Name=“IsInside” Value=“false”/>
</tt:Data>
</tt:Message>
</wsnt:Message>
</wsnt:NotificationMessage>

源项目描述产生通知的规则。 当场景中有多个对象时,这些对象中的每个对象都有其自己的ObjectsInside属性。 因此,对象ID用作附加键项(Key Item),以使属性唯一。 IsInside项是一个布尔值,指示对象是在Field的内部还是外部。
当对象进入Field时,规则将产生“属性已更改”消息,类似于以下内容

wsnt:NotificationMessage

<wsnt:Topic Dialect="…Concrete">
tns1:RuleEngine/FieldDetector/ObjectsInside
</wsnt:Topic>
wsnt:Message
<tt:Message UtcTime="…" PropertyOperation=“Changed”>
tt:Source
<tt:SimpleItem Name=“VideoSourceConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“VideoAnalyticsConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“Rule” Value=“myImportantField”/>
</tt:Source>
tt:Key
<tt:SimpleItem Name=“ObjectId” Value=“5”/>
</tt:Key>
tt:Data
<tt:SimpleItem Name=“IsInside” Value=“true”/>
</tt:Data>
</tt:Message>
</wsnt:Message>
</wsnt:NotificationMessage>

最后,当对象离开场景时,会产生“属性已删除(property deleted)”消息:

wsnt:NotificationMessage

<wsnt:Topic Dialect="…Concrete">
tns1:RuleEngine/FieldDetector/ObjectsInside
</wsnt:Topic>
wsnt:Message
<tt:Message UtcTime="…" PropertyOperation=“Deleted”>
tt:Source
<tt:SimpleItem Name=“VideoSourceConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“VideoAnalyticsConfigurationToken” Value=“1”/>
<tt:SimpleItem Name=“Rule” Value=“myImportantField”/>
</tt:Source>
tt:Key
<tt:SimpleItem Name=“ObjectId” Value=“5”/>
</tt:Key>
</tt:Message>
</wsnt:Message>
</wsnt:NotificationMessage>

在这种情况下,可以省略数据项,因为该对象及其对应的属性不再存在。

9.4.3 Message Description Language
消息有效负载的结构已在上一节中介绍。 该结构包含三组:源,密钥和数据(Source, Key, and Data)。 每个组包含一组Simple和ElementItems。 对于每个主题,设备可以使用消息描述语言描述哪个项目将成为该主题产生的通知的一部分。 以下描述语言描述了必填消息项(请注意,此处包含的架构仅供参考。 [ONVIF Schema]包含规范架构定义):

<xs:complexType name=“MessageDescription”>
xs:sequence
<xs:element name=“Source” type=“tt:ItemListDescription”
minOccurs=“0”/>
<xs:element name=“Key” type=“tt:ItemListDescription” minOccurs=“0”/>
<xs:element name=“Data” type=“tt:ItemListDescription” minOccurs=“0”/>

</xs:sequence>
<xs:attribute name=“IsProperty” type=“xs:boolean”/>
</xs:complexType>
<xs:complexType name=“ItemListDescription”>
xs:sequence
<xs:element name=“SimpleItemDescription”
minOccurs=“0” maxOccurs=“unbounded”>
xs:complexType
<xs:attribute name=“Name” type=“xs:string” use=“required”/>
<xs:attribute name=“Type” type=“xs:QName” use=“required”/>
</xs:complexType>
</xs:element>
<xs:element name=“ElementItemDescription”
minOccurs=“0” maxOccurs=“unbounded”>
xs:complexType
<xs:attribute name=“Name” type=“xs:string” use=“required”/>
<xs:attribute name=“Type” type=“xs:QName” use=“required”/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>

一个项目的名称属性在所有与其所属的组(源,密钥,数据)无关的所有项目中应是唯一的。 当所描述的消息与属性有关时,IsProperty属性应设置为true。 但是,如果消息与某个属性无关,则密钥组将不存在。 SimpleItemDescriptor的Type属性应使用XML模式(内置于简单类型中(built in simple types)),ONVIF模式(schemas)或供应商模式中定义的简单类型。 类似地,ElementItemDescriptor的Type属性应匹配XML模式的全局元素声明。

消息描述语言不要求“源”,“键”和“数据”类别中的项目顺序。 此外,消息中不需要提供ONVIF事件定义记录为可选的项目(Additionally Items documented as optional by an ONVIF Event definition are not required to be present to in a message)。 这也适用于相关MessageDescription中描述的可选项目。

9.7节的GetEventPropertiesResponse消息中列出了用于描述消息有效负载的所有架构文件的位置。

9.4.3.1 Message Description Example
以下代码是与9.4.2.1节的Property示例相对应的Message Description示例:

<tt:MessageDescription IsProperty=“true”>
tt:Source
<tt:SimpleItemDescription Name=“VideoSourceConfigurationToken”
Type=“tt:ReferenceToken”/>
<tt:SimpleItemDescriptionD Name=“VideoAnalyticsConfigurationToken”
Type=“tt:ReferenceToken”/>
<tt:SimpleItemDescription Name=“Rule”
Type=“xs:string”/>
</tt:Source>
tt:Key
<tt:SimpleItemDescription Name=“ObjectId”
Type=“xs:integer”/>
</tt:Key>
tt:Data
<tt:SimpleItemDescription Name=“IsInside”
Type=“xs:boolean”/>
</tt:Data>
</tt:MessageDescription>

9.4.4 Message Content Filter
在Subscription请求中,客户端可以按TopicExpression(请参阅第9.6.3节)和MessageContent过滤通知。 对于后者,[WS-BaseNotification]提出了XPath 1.0 dialect。 由于此规范要求特定的消息结构,因此该规范需要XPath 1.0语法的子集。 可以使用以下URI引用相应的 dialect:

Dialect= http://www.onvif.org/ver10/tev/messageContentFilter/ItemFilter

优先顺序和关联性:
“和”运算的优先级高于“或”运算。 “和”和“或”操作都保持关联。

在以下语法定义中,“与”和“或”运算的优先级和关联性与XPath 1.0规范相同。

表达式的结构如下:

[1] Expression ::= BoolExpr | Expression ‘and’ Expression | Expression ‘or’ Expression | ‘(‘ Expression ‘)’ | ‘not’ ‘(‘ Expression ‘)’
[2] BoolExpr ::= ‘boolean’ ‘(‘ PathExpr ‘)’
[3] PathExpr ::= [‘//’Prefix?’SimpleItem‘ | ’//’Prefix?’ElementItem‘ ] NodeTest
[4] Prefix::= NamespacePrefix’:’ | ‘’
[5] NodeTest ::= ‘[‘ AttrExpr ‘]’
[6] AttrExpr ::= AttrComp | AttrExpr ‘and’ AttrExpr | AttrExpr ‘or‘ AttrExpr | ‘(‘ AttrExpr ‘)‘ | ‘not’ ‘(‘ AttrExpr ‘)‘
[7] AttrComp ::= Attribute ‘=’ ‘”’ String ‘”’
[8] Attribute ::= ‘@Name’ | ‘@Value’

该语法允许测试Simple或ElementItem的存在,而与它们所属的组(源,键或数据)无关。 此外,可以检查SimpleItems的值。 SimpleItem和ElementItem前缀命名空间应对应于“ http://www.onvif.org/ver10/schema。

最后,这些测试的任意布尔组合都是可能的。 可以表达以下表达式:

仅返回包含对VideoSourceConfiguration“ 1”的引用的通知
boolean(//tt:SimpleItem[@Name=”VideoSourceConfigurationToken” and
@Value=”1”] )

仅返回不包含对VideoAnalyticsConfiguration的引用的通知
not( boolean(//tt:SimpleItem[@Name=”VideoAnalyticsConfigurationToken
”] ) )

仅返回与 在VideoSourceConfiguration“ 1”上运行的VideoAnalyticsConfiguration“ 2” 相关的通知boolean(//tt:SimpleItem[@Name=”VideoAnalyticsConfigurationToken” and @Value=”2”] )
and
boolean(//tt:SimpleItem[@Name=”VideoSourceConfigurationToken” and @Value=”1”] )

仅返回与VideoSourceConfiguration“ 1”相关但与VideoAnalyticsConfigurations不相关的通知
boolean(//tt:SimpleItem[@Name=”VideoSourceConfigurationToken” and @Value=”1”] )
and
not(boolean(//tt:SimpleItem[@Name=”VideoAnalyticsConfigurationToken”
] ))

仅当对象进入或出现在“ myImportantField”中时,返回通知
boolean(//tt:SimpleItem[@Name=”IsInside” and @Value=”true”] )
and
boolean(//tt:SimpleItem[@Name=”Rule” and @Value=”myImportantField”] )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值