python获取海康威视所有摄像头的OSD通道名称
-
读取IP地址的txt文档
-
根据IP地址获取监控摄像头的OSD通道名称
# coding=utf-8
import os
import time
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
import xml.etree.ElementTree as ET
#注意:和ip.txt放在一个文件夹,会生成ip_name.txt文件
#根据ip地址清单,获取摄像头的信息
#和监控摄像头通讯需要一个双方认可的密钥,可以随机生成
def generate_key():
# 生成一个16字节的随机字节数组,16字节对应128位
random_bytes = os.urandom(16)
# 将字节数组转换成十六进制字符串
hex_key = random_bytes.hex()
return hex_key
def fun_GetOSD_Name(url):
# 尝试使用Basic Auth登录
session = requests.Session()
session.auth = HTTPDigestAuth(USERNAME, PASSWORD)
try:
# 发送GET请求
response = session.get(url)
if 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 '没找到通道名称'
except Exception as e:
print("An error occurred:", e)
def get_ip_list():
#从txt中获得ip列表,根据列表获得摄像头信息并,存入txt中
# 文件路径
file_path =f'{os.getcwd()}/ip.txt'
# 创建一个空列表来存储每一行的数据
data_list = []
try:
# 打开文件
with open(file_path, 'r', encoding='utf-8') as file:
# 逐行读取文件内容
for line in file:
# 去除行尾的换行符(\n 或 \r\n),然后添加到列表中
data_list.append(line.strip())
except FileNotFoundError:
print(f"Error: The file {file_path} does not exist.")
except Exception as e:
print(f"An error occurred: {e}")
# 打印列表,验证是否正确读取了文件内容
print(data_list)
return data_list
if __name__=='__main__':
USERNAME = 'admin'
PASSWORD = 'qlyy1234'
ip_list=[]
ip_list=get_ip_list()
#跳转1:
ip_name_list=[]
for ip in ip_list:
HOST=ip
asekey=generate_key()
#url1:输出格式的地址;url2:输出OSD名字的地址,后边的密钥可以是任意值
url1=f'http://{HOST}/ISAPI/System/Video/inputs/channels/1/overlays'
url2=f'http://{HOST}/ISAPI/System/Video/inputs/channels/1/?security=1&iv={asekey}'
#获取通道名称
Name=fun_GetOSD_Name(url2)
ip_name=f'{ip}\t{Name}'
ip_name_list.append(ip_name)
print(ip_name)
time.sleep(0.2)
#写入文本
# 文件路径
file_path =f'{os.getcwd()}/ip_name.txt'
# 如果文件存在,则先重命名
if os.path.exists(file_path):
new_file_path = file_path + '.bak'
os.rename(file_path, new_file_path)
try:
# 打开文件,如果不存在则会被创建
with open(file_path, 'w', encoding='utf-8') as file:
# 写入列表中的每个元素,每行一个
for ip in ip_name:
file.write(ip + '\n')
except IOError as e:
print(f"An error occurred while writing to the file: {e}")
else:
print(f"Successfully wrote data to {file_path}")
# 如果之前重命名了文件,可以在这里做进一步处理,例如删除旧文件或记录日志
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/779592.html
如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!