监控-海康威视摄像头更改OSD通道,一键更改,批量更改
监控-海康威视摄像头更改OSD通道,一键更改,只能一次更改一个,支持循环
# coding=utf-8
#监控-海康威视摄像头更改OSD通道,一键更改,批量更改
import os
import time
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
import xml.etree.ElementTree as ET
#和监控摄像头通讯需要一个双方认可的密钥,可以随机生成
def generate_key():
# 生成一个16字节的随机字节数组,16字节对应128位
random_bytes = os.urandom(16)
# 将字节数组转换成十六进制字符串
hex_key = random_bytes.hex()
return hex_key
#格式数据,给摄像头输出
xml_data1 ="""
<?xml version: "1.0" encoding="utf-8"?>
<VideoOverlay>
<normalizedScreenSize>
<normalizedScreenWidth>704</normalizedScreenWidth>
<normalizedScreenHeight>576</normalizedScreenHeight>
</normalizedScreenSize>
<attribute>
<transparent>false</transparent>
<flashing>false</flashing></attribute>
<fontSize>adaptive</fontSize>
<frontColorMode>auto</frontColorMode>
<alignment>customize</alignment>
<TextOverlayList>
<TextOverlay>
<id>1</id><enabled>false</enabled><alignment>0</alignment><positionX>0</positionX><positionY>576</positionY><displayText>111</displayText></TextOverlay><TextOverlay>
<id>2</id><enabled>false</enabled><alignment>0</alignment><positionX>0</positionX><positionY>576</positionY><displayText>11</displayText></TextOverlay><TextOverlay>
<id>3</id><enabled>false</enabled><alignment>0</alignment><positionX>0</positionX><positionY>576</positionY><displayText/></TextOverlay><TextOverlay>
<id>4</id><enabled>false</enabled><alignment>0</alignment><positionX>0</positionX><positionY>576</positionY><displayText/></TextOverlay></TextOverlayList>
<DateTimeOverlay><enabled>true</enabled>
<positionY>544</positionY><positionX>0</positionX>
<dateStyle>CHR-YYYY-MM-DD</dateStyle>
<timeStyle>12hour</timeStyle>
<displayWeek>true</displayWeek></DateTimeOverlay>
<channelNameOverlay>
<enabled>true</enabled>
<positionY>48</positionY>
<positionX>336</positionX>
<videoFormat>PAL</videoFormat>
</channelNameOverlay>
</VideoOverlay>
"""
def fun_GetOSD_Name(url):
# 尝试使用Basic Auth登录
session = requests.Session()
session.auth = HTTPBasicAuth(USERNAME, PASSWORD)
try:
# 发送GET请求
response = session.get(url)
# 检查状态码,如果为401则尝试Digest Auth
#print(f'response.status_code:{response.status_code}')
if response.status_code == 401:
session.auth = HTTPDigestAuth(USERNAME, PASSWORD)
response = session.get(url,timeout=5)
#print(response.text)
# 解析XML
osd_config = ET.fromstring(response.text)
elif response.status_code == 200:
# 解析XML响应以获取OSD通道名称
osd_config = ET.fromstring(response.text)
#print("OSD Configuration:", osd_config)
else:
print("Failed to retrieve OSD configuration. Status code:", response.status_code)
# 找到并打印摄像头的OSD-name元素的文本
name_element = osd_config.find('{http://www.hikvision.com/ver20/XMLSchema}name')
if name_element is not None:
osd_name = name_element.text
return osd_name
else:
print("Name element not found")
return '没找