onvif协议控制摄像头转动

您所在的位置:网站首页 摄像头控制灯开关在哪个位置 onvif协议控制摄像头转动

onvif协议控制摄像头转动

2024-07-16 23:29| 来源: 网络整理| 查看: 265

一  大华官方SDK demo测试连接摄像头 下载SDK

从大华官网(https://www.dahuatech.com/)找到服务支持--->SDK开发--->设备网络SDK_Python_Linux64_V3.052.0000002.0.R.201103(自己电脑环境对应版本)

demo测试连接

利用RealPlayDemo.py测试摄像头连接,修改配置该文件中的摄像头信息

二 利用onvif协议控制摄像头转动 onvif协议

2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共同成立一个国际开放型网络视频产品标准网络接口开发论坛,取名为ONVIF(Open Network Video Interface Forum,开放型网络视频接口论坛)并以公开、开放的原则共同制定开放性行业标准。ONVIF标准将为网络视频设备之间的信息交换定义通用协议,包括装置搜寻、实时视频、音频、元数据和控制信息等。

    ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供,设备作为服务提供者为服务端。ONVIF规范涵盖了完全的基于XML及WSDL的定义。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。服务端与客户端的数据交互采用SOAP协议。ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行 。

Web Services

Web Service是基于网络的、分布式的模块化组件,执行特定的任务。Web Service 主要利用HTTP 和SOAP 协议使数据在Web 上传输。Web 用户能够使用 SOAP 和 HTTP通过Web 调用的方法来调用远程对象。 

Web Service是基于XML和HTTPS的一种服务,其通信协议主要基于SOAP。服务端、客户端以传递符合XML的SOAP消息实现服务的请求与回应。

客户端根据 WSDL 描述文档,会生成一个 SOAP 请求消息,该请求会被嵌入在一个HTTP POST请求中,发送到Web Services 所在的Web 服务器。Web Services 请求处理器解析收到的 SOAP 请求,调用相应的 Web Services。然后再生成相应的SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。

控制摄像头转动

(下面为部分引用测试代码)

from time import sleep from onvif import ONVIFCamera import zeep XMAX = 1 XMIN = -1 YMAX = 1 YMIN = -1 def zeep_pythonvalue(self, xmlvalue): return xmlvalue def perform_move(ptz, request, timeout): # Start continuous move ptz.ContinuousMove(request) # Wait a certain time sleep(timeout) # Stop continuous move ptz.Stop({'ProfileToken': request.ProfileToken}) def move_up(ptz, request, timeout=1): print('move up...') request.Velocity.PanTilt.x = 0 request.Velocity.PanTilt.y = YMAX perform_move(ptz, request, timeout) def move_down(ptz, request, timeout=1): print('move down...') request.Velocity.PanTilt.x = 0 request.Velocity.PanTilt.y = YMIN perform_move(ptz, request, timeout) def move_right(ptz, request, timeout=1): print('move right...') request.Velocity.PanTilt.x = XMAX request.Velocity.PanTilt.y = 0 perform_move(ptz, request, timeout) def move_left(ptz, request, timeout=1): print('move left...') request.Velocity.PanTilt.x = XMIN request.Velocity.PanTilt.y = 0 perform_move(ptz, request, timeout) def continuous_move(): mycam = ONVIFCamera('192.168.170.**', 80, 'admin', '**') # Create media service object media = mycam.create_media_service() # Create ptz service object ptz = mycam.create_ptz_service() # Get target profile zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue media_profile = media.GetProfiles()[0] # Get PTZ configuration options for getting continuous move range request = ptz.create_type('GetConfigurationOptions') request.ConfigurationToken = media_profile.PTZConfiguration.token ptz_configuration_options = ptz.GetConfigurationOptions(request) request = ptz.create_type('ContinuousMove') request.ProfileToken = media_profile.token ptz.Stop({'ProfileToken': media_profile.token}) if request.Velocity is None: request.Velocity = ptz.GetStatus({'ProfileToken': media_profile.token}).Position request.Velocity = ptz.GetStatus({'ProfileToken': media_profile.token}).Position request.Velocity.PanTilt.space = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].URI request.Velocity.Zoom.space = ptz_configuration_options.Spaces.ContinuousZoomVelocitySpace[0].URI # Get range of pan and tilt # NOTE: X and Y are velocity vector global XMAX, XMIN, YMAX, YMIN XMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Max XMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Min YMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Max YMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Min # move right move_right(ptz, request) # move left move_left(ptz, request) # Move up move_up(ptz, request) # move down move_down(ptz, request) if __name__ == '__main__': continuous_move() 注:以上为测试代码,部分参考引用信息部分非原创,后期加上添加预置位和回调预置位。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3