PSIA协议实现多品牌网络摄像头的控制

2020-08-15 13:33王集成
商情 2020年34期

王集成

【摘要】通过PSIA协议,控制不同厂家的网络摄像头运动,实现集中统一控制目的。并用Python语言实现了摄像头运动的相关控制。

【关键词】网络摄像头  HTTP协议  PSIA标准

1、问题提出

很多高校在建设多媒体教室和智慧教室时,一般采取分批次建设方式,造成不同批次的设备来自不同生产厂家,控制设备软件各不相同,信息很难共享,自然形成多个信息孤岛。其次,随着硬件技术不断发展,原有设备落后被淘汰,这类升级同样会造成信息孤岛。网络摄像头是最基础的使用设备,大部分教室前后各配1个摄像头,有些教室根据大小、结构和用途不同,配备4-5个摄像头(如高清录播摄像头),这些摄像头来自不同厂商(比如海康、大华、宇视、华为等),因此形成管控平台互不兼容、信息孤岛等问题需要解决。

2、视频监控行业标准和现状

视频监控行业发展至今,各设备厂商拥有自己核心技术,导致硬件设备和软件平台的异构性,加上客户需求多样性,软件二次开发变得非常复杂。业内逐步认识到行业标准重要性后,国际标准化组织0NVIF(Open Network Video Interface Forum)和PSIA(Physical Security Interoperability Alliance)应运而生,旨在解决视频监控系统中不同厂商设备的互联互通问题,为系统软硬件设备提供标准化网络接口,提高可互操作性和可移植性。

目前国际上有ONVIF、PSIA和HDCCTV三大网络视频监控标准。国内有GB/T28181联网监控标准,由公安部组织制定的国家标准《安全防范视频监控联网系统信息传输、交换、控制技术要求》(GB/T 28181-2011)(以下簡称“国标 28181”),2012年6月1日起正式实行,其核心采用 SIP 协议标准。

PSIA标准采用表象化状态转变(REST)架构,REST只需一个简单的XML解析器,运算过程较为简便,消耗资源少,管理成本低。每条PSIA请求报文清晰可读,拥有报文传输信息量小的优势。本文仅研究PSIA协议控制网络摄像头运动。

3、PSIA协议控制原理

3.1判断摄像头是否支持PSIA协议

PSIA协议是基于HTTP协议作为网络传输协议,继承了HTTP的通用方法(GET、PUT、POST和DELETE),因此通过HTTP协议GET方法,获取网络摄像头的/PSIA/index网络地址的信息,如果支持PSIA协议,则返回XML格式的PSIA协议服务列表信息,包括System、Network、IO、Video、Audio、PTZ等服务,其中PTZ是提供网络摄像头运动服务,否则返回HTTP协议中404错误码。

3.2 PSIA协议控制摄像头运动的命令

使用PSIA协议PUT方法,向网络摄像头的/PSIA/PTZ/channels/1/continuous地址(URL地址)发送20命令信息,控制摄像头运动方向,其中20表示摄像头运动速度,一般取值范围是-100到100之间的整数,正数向正向运动,负数向反向运动,0表示停止运动。上下、左右和近远三类基本运动可任意组合,如:左上运动并拉近,左下运动并推远等组合形式。

向上运动:20

向下运动:-20

向左运动:-20

向右运动:20

拉近运动:20

推远运动:-20

停止运动:000

左上运动并拉近:-202020

3.3 Python语言实现控制网络摄像头运动的部分代码

例程需要使用HTTP协议和Basic认证,因此需要通过import urllib.request和import base64语句加载相关模块。

def gbase64(s):

return str(base64.b64encode(s.encode('utf-8')),'utf-8')

def senddata(method, ip, url, sdata, username, pwd):

req = urllib.request.Request(method = method, url = "http://"+ip+url, data = sdata )

req.add_header("Authorization","Basic %s"%(gbase64(username+":"+pwd))) # username,pwd是登录网络摄像头的用户名和密码

try:

res_data = urllib.request.urlopen(req)

return res_data.read().decode('utf-8')

except urllib.error.URLError as e:

if hasattr(e,"code"):

print("Error: ",e.code)

return  None

def makecmd(l_r,u_d,zi_zo):#l_r,u_d,zi_zo分别是左右、上下和远近运动速度值

rs="%d%d%d"%(l_r,u_d,zi_zo)

return bytes(rs,encoding="utf-8") # HTTP協议要求传输字节串

def PTZup(ip,speed): #向上

senddata("PUT",ip , url, makecmd(0,speed,0), username, pwd)

def PTZdown (ip,speed): #向下

senddata("PUT",ip , url, makecmd(0,-speed,0), username, pwd)

def PTZnear(ip,speed): #拉近

senddata("PUT",ip , url, makecmd(0,0,speed), username, pwd)

def PTZfar(ip,speed): #推远

senddata("PUT",ip , url, makecmd(0,0,-speed), username, pwd)

def PTZstop(ip,speed): #停止

senddata("PUT",ip , url, makecmd(0,0,0),username, pwd)

def PTZleftupzoomin(ip,speed): #左上运动并拉近

senddata("PUT",ip , url, makecmd(-speed,speed,speed), username, pwd)

4、结论

运用PSIA协议实现控制海康威视和大华网络摄像头上下、左右和近远等基本控制功能,很好解决了不同品牌网络摄像头集控问题,有效屏蔽不同品牌网络摄像头的管控命令。

参考文献:

[1]阿奎.Python编程基础与HTTP接口测试[M].北京:电子工业出版社,2018.

[2]周智勇.PSIA标准的发展需要系统集成商积极支持—专访PSIA执行总监Dave Bunzel[J].中国公共安全(综合版),2009(11):25-27.

[3]朱耀麟,李倩,王昊星.ONVIF协议的网络视频监控客户端接口研究[J].西北大学学报(自然科学版),2014,44(03):392-396.

[4]郝继辉.HDcctv高清监控系统的应用[J].中国安防,2012(05):48-51.