王集成
【摘要】通过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地址)发送
向上运动:
向下运动:
向左运动:
向右运动:
拉近运动:
推远运动:
停止运动:
左上运动并拉近:
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="
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.