龙空技术网

从零开始精通Onvif之录像存储

希望睿智 48

前言:

此刻你们对“动态存储技术包括哪些内容”大体比较关心,兄弟们都需要剖析一些“动态存储技术包括哪些内容”的相关文章。那么小编也在网络上汇集了一些关于“动态存储技术包括哪些内容””的相关内容,希望同学们能喜欢,同学们快快来了解一下吧!

概述

Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作,为录像的存储、检索和播放提供了标准化的接口。

Media服务:负责视频流的配置和传输,包括实时流和录像流。一般来说,实时流对应子码流,录像流对应主码流。Media服务定义了如何配置录像参数(包括:编码格式、分辨率、帧率、码率等),以及如何申请主子码流。

Recording服务:负责录像的管理,允许客户端创建、修改和删除录像配置文件,查询可用的录像,以及管理录像存储策略等。用户还可以设定录像计划、存储位置、录像触发条件等。

Replay服务: 负责录像的检索和回放,用户可以根据时间段、事件类型、录像ID等多种条件检索录像片段,并请求回放指定的录像数据。

工作机制

针对录像存储,Onvif协议内嵌了一系列服务和消息交互流程,涵盖配置、存储、检索到回放的全过程。

1、录像配置。

通过Onvif的Recording服务,客户端可以灵活配置录像的各项参数。这不仅包括设定录像计划、指定存储目的地,还包括设置录像的质量参数(比如:分辨率、帧率、码率等)、保存天数等。

2、录像检索。

客户端根据需要构建录像检索参数,包括开始时间、结束时间、通道ID、事件类型等。利用构建好的检索参数,客户端通过FindRecordings操作向设备发送请求,开始录像搜索。该操作可能会立即返回搜索结果,也可能先返回一个搜索令牌。

如果返回的是搜索令牌,客户端需要使用GetRecordingSearchResults操作,并传递该令牌来获取实际的录像检索结果。对于每一个检索到的录像条目,我们可以进一步使用GetRecordingInformation获取详细的录像信息。

3、录像回放。

针对选定的录像条目,我们可以使用GetReplayUri操作请求一个回放的URI。这个URI指向录像的实际音视频数据,既可以用于播放,也可以用于下载。播放和下载,可以使用RTSP协议,通过回放URI建立到设备的流媒体会话,进而传输音视频流。

录像配置

录像存储首先需要配置录像计划,这包括设定录像的触发条件(时间计划、运动检测等)、存储位置(本地存储、网络存储等)、录像质量(分辨率、帧率、码率等)。比如:可以设定工作日的办公时间自动开启高清录像,非工作时间则降低画质以节省存储空间。

在Onvif中,可以通过ModifyRecordingSettings操作来更新录像计划。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。

<ns:RecordingToken>:表示要修改的录像配置的唯一标识符。

<ns:TimeRangeList>:表示录像计划,可以包含多个时间范围。

<ns:TimeRange>:定义了录像开始和结束的具体时间。

<soapenv:Envelope     xmlns:soapenv=";     xmlns:wsa=";     xmlns:ns=";>   <soapenv:Header>      <wsa:Action>;/wsa:Action>      <wsa:To>http://[IP]:[Port]/onvif/media_service</wsa:To>   </soapenv:Header>   <soapenv:Body>      <ns:ModifyRecordingSettings>         <ns:RecordingToken>[Recording_Token]</ns:RecordingToken>         <ns:Schedule>            <!-- 定义录像计划 -->            <ns:TimeRangeList>               <ns:TimeRange>                  <ns:From>2024-06-10T08:00:00Z</ns:From>                  <ns:To>2024-06-10T18:00:00Z</ns:To>               </ns:TimeRange>               <!-- 可添加多个TimeRange,以定义更复杂的计划 -->            </ns:TimeRangeList>         </ns:Schedule>      </ns:ModifyRecordingSettings>   </soapenv:Body></soapenv:Envelope>

录像检索

Onvif协议支持动态存储策略,比如:循环覆盖、事件优先等。当存储空间达到阈值时,旧的录像数据会被自动覆盖,保证最新数据始终可用。另外,基于报警事件(比如:移动侦测)的录像可以被标记为不可覆盖,确保关键数据的长期储存。

Onvif协议中检索录像主要通过FindRecordings操作来实现,可以参考下面的示例报文。

<ns:SourceToken>:标识录像资源的字符串,通常对应于摄像头通道,或其他录像源的唯一标识符。比如:Channel1代表第一个摄像头的录像资源。

<ns:Begin>:表示录像检索的开始时间,按照ISO 8601标准格式表示。比如:2024-06-10T00:00:00Z代表2024年6月10日午夜零点整(UTC时间)。

<ns:End>:表示录像检索的结束时间,同样遵循ISO 8601标准格式。

<ns:EventFilter>:如果录像与特定事件(比如:移动侦测、视频遮挡等)关联,可以通过此元素指定事件类型来过滤录像。

<ns:StateFilter>:用于过滤录像的状态(比如:只检索已完成的录像,或正在进行的录像)。

<ns:MaxMatches>:用于限制返回的最大录像数,有助于分页处理大量结果。

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope    xmlns:soapenv=";     xmlns:wsa=";     xmlns:ns=";>   <soapenv:Body>      <ns:FindRecordings>         <!-- 搜索过滤条件 -->         <ns:SearchCriteria>            <ns:Source>               <!-- 录像来源,比如:通道ID -->               <ns:SourceToken>Channel1</ns:SourceToken>            </ns:Source>            <ns:TimeRange>               <ns:Begin>2024-06-01T00:00:00Z</ns:Begin>               <ns:End>2024-06-30T23:59:59Z</ns:End>            </ns:TimeRange>            <!-- 可以添加更多过滤条件,比如:事件类型过滤等 -->         </ns:SearchCriteria>         <!-- 其他可选参数 -->      </ns:FindRecordings>   </soapenv:Body></soapenv:Envelope>

当客户端发起录像检索请求后,设备通常会以SOAP报文的形式返回检索结果,这些结果包含找到的录像段信息。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。

<ns:RecordingInformationList>:表示一个或多个录像信息条目。

<ns:RecordingInformation>:表示每个录像的信息。

<ns:RecordingToken>:表示录像的唯一标识符,每个录像文件的Token是不同的。

<ns:Source>:表示录像的来源信息(比如:通道或者源设备)。

<ns:StartTime/StopTime>:表示录像的起止时间。

<ns:Duration>:表示录像的持续时间。

<ns:Content>:表示录像的内容描述,可能包含录像的大小、数据范围等。

<ns:TrackInformationList>:可选参数,如果有多个轨道(比如:视频、音频、文本等),会列出每个轨道的详细信息。

<soapenv:Envelope ...>   <soapenv:Body>      <ns:FindRecordingsResponse>         <ns:RecordingInformationList>            <ns:RecordingInformation>               <ns:RecordingToken>[RecordingToken_1]</ns:RecordingToken>               <ns:Source>                  <ns:SourceToken>[SourceToken_1]</ns:SourceToken>               </ns:Source>               <ns:StartTime>2024-06-10T12:00:00Z</ns:StartTime>               <ns:StopTime>2024-06-10T13:00:00Z</ns:StopTime>               <ns:Duration>3600</ns:Duration>               <ns:Recurrence>...</ns:Recurrence>               <ns:Content>                  <ns:Description>...</ns:Description>                  <ns:TotalBytes>...</ns:TotalBytes>                  <ns:DataFrom>...</ns:DataFrom>                  <ns:DataTo>...</ns:DataTo>               </ns:Content>            </ns:RecordingInformation>            <!-- 可能有多个RecordingInformation元素 -->         </ns:RecordingInformationList>      </ns:FindRecordingsResponse>   </soapenv:Body></soapenv:Envelope>

录像回放

在Onvif中,回放时的音视频数据并不是通过SOAP报文传输的,但需要先通过SOAP请求获取到录像片段的回放URI,然后使用该URI进行媒体流的播放。GetReplayUri操作允许客户端请求获取一个录像片段的回放URI,其SOAP报文可以参考下面的示例报文。

<ns:RecordingToken>:指定录像的唯一标识符,用于表示要回放的具体录像的Token。

<ns:TrackToken>:可选参数,如果录像有多个轨道,可以用此参数指定要回放的特定轨道的Token。

<ns:Protocol>:可选参数,指定期望的流媒体传输协议,比如RTSP、HTTP等。

<ns:StreamingTransport>:可选参数,指定流媒体传输的底层传输协议,比如UDP、TCP等。

<soapenv:Envelope     xmlns:soapenv=";    xmlns:wsa=";    xmlns:ns=";>   <soapenv:Body>      <ns:GetReplayUri>         <ns:RecordingToken>[RecordingToken]</ns:RecordingToken>         <!-- 可选参数 -->         <ns:TrackToken>[TrackToken]</ns:TrackToken>         <ns:Protocol>RTSP</ns:Protocol>         <ns:StreamingTransport>UDP</ns:StreamingTransport>      </ns:GetReplayUri>   </soapenv:Body></soapenv:Envelope>

设备收到GetReplayUri请求后,将返回一个包含录像回放URI的SOAP响应,具体可参考下面的示例报文。

<ns:Uri>: 表示回放的URI,客户端可以直接使用此URI进行流媒体播放。

<ns:InvalidAfterDateTime>: 表示该URI的有效期,超过此时间后,URI将不再可用。

<s:Envelope ...>   <s:Body>      <ns:GetReplayUriResponse>         <ns:MediaUri>            <ns:Uri>rtsp://[IP]:554/onvif-media/[StreamPath]</ns:Uri>            <ns:InvalidAfterDateTime>2024-06-15T10:00:00Z</ns:InvalidAfterDateTime>         </ns:MediaUri>      </ns:GetReplayUriResponse>   </s:Body></s:Envelope>

如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

标签: #动态存储技术包括哪些内容