我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python调用海康视频汇聚平台API,获得所有摄像头设备编号、实时播放rtsp地址、回放rtsp地址

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python调用海康视频汇聚平台API,获得所有摄像头设备编号、实时播放rtsp地址、回放rtsp地址

目录

1. 需求

海康视频汇聚平台(综合安防管理平台(iSecure Center)V2.1.0)的openAPI的demo均为c++/java代码,官方没有python代码。

需通过汇聚平台获得所有摄像头的设备编号,利用设备编号获得摄像头IP地址和rtsp地址。

2. 思路

根据海康开放平台官方文档《资源中心>综合安防管理平台(iSecure Center)>开发前准备》,通过平台获得摄像头信息,需遵循以下步骤:

  1. 确保服务器上安装视频汇聚平台(iSecure Center);
  2. 查看API网关是否安装成功;
  3. 分配身份认证信息AK/SK;
  4. 利用认证信息,撰写python demo

3. 实现

3.1. 确保服务器上安装视频汇聚平台(iSecure Center)

对接前需要先部署海康威视综合安防管理平台 iSecure Center
V1.5.100或更高版本的产品。

产品的安装过程请参考产品的《iSecure Center
综合安防管理平台 安装部署指南》,该文档可以在产品安装光盘中获取。

3.2. 查看API网关是否安装成功

  1. 登入运管中心,如下
    在这里插入图片描述

  2. 进入“状态监控”页面,如下
    在这里插入图片描述

  3. 左侧菜单搜索API网关,如下
    在这里插入图片描述

  4. 在API网关的监控详情选项卡中查看服务的运行状态,如下
    在这里插入图片描述

  5. 运行状态显示“正在运行”表示API网关安装成功,如下
    在这里插入图片描述

3.3. 分配身份认证信息AK/SK

开发前需要先获取对接的身份认证信息,AK/SK——平台会通过AK/SK认证方式来验证请求发送者的身份。

获取接口调用权限,资源操作权限——平台会判断某个请求者是否有某个接口的调用权限,以及资源的操作权限。

在平台的OpenAPI管理中心新增合作方来生成AK/SK并分配权限。

  1. 进入运行管理中心,点击“状态监控”选项卡,搜索API网关,点击“API管理”,如下

在这里插入图片描述
2. 进入OpenAPI管理中心,点击“合作方管理”菜单,如下
在这里插入图片描述
3. 点击“创建合作方”,如下
在这里插入图片描述
4. 输入合作方名称和描述,如下
在这里插入图片描述
5. 配置合作方的参数,配置userId的值,userId的值对应平台内部的一个用户;如果使用admin的话,默认所有资源权限都有,如下
在这里插入图片描述
6. 配置合作方的参数,配置domainId的值,domainId对应对接平台所在的网域,如下
在这里插入图片描述
7. 配置合作方的参数,配置tagId的值,为保证接口兼容性,tagId的值请配为frs,如下

在这里插入图片描述
8. 配置完上述信息后,点击创建按钮,如下

在这里插入图片描述
9. 创建完新的合作方,进入合作方管理列表,选择其中一个合作方点击授权,如下
在这里插入图片描述
10. 对接口进行授权,如下
在这里插入图片描述
11. 接口授权完成后,到合作方列表,点击合作方进入详情页,如下
在这里插入图片描述
12. 在合作方详情页面获取AK/SK,合作方Key就是AK,合作方Secret就是SK,如下
在这里插入图片描述

3.4. 利用认证信息,python demo开发

  1. 获得artemis网关服务器ip端口 ,即API网关的ip地址,端口默认为443,如下
    在这里插入图片描述
  2. 获得秘钥appkey和秘钥appSecret ,如下
    在这里插入图片描述
  3. 获得设备编号的openAPI获取方式,需确定请求方式和Body内容,如下
    在这里插入图片描述
    在这里插入图片描述
请求:/api/irds/v2/deviceResource/resourcesBody示例(这里为摄像头camera):{    "pageNo": 1,    "pageSize": 100,    "resourceType": "camera"}
  1. 获得指定设备编号的回放url的openAPI获取方式,需确定请求方式和Body内容,如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

请求:/api/video/v2/cameras/playbackURLsBody示例:{    "cameraIndexCode": "90ad77d8057c43dab140b77361606927",    "recordLocation": "0",    "protocol": "rtsp",    "transmode": 0,    "beginTime": "2017-06-15T00:00:00.000+08:00",    "endTime": "2017-06-18T00:00:00.000+08:00",    "uuid": "",    "expand": "streamform=rtp",    "streamform": "ps",    "lockType": 0}
  1. python demo

主要参考博客《海康综合安防管理平台python版sdk》和《利用Python调用海康威视综合管理平台openAPI接口

# coding=gb2312import osimport base64import jsonimport timeimport uuidimport hmac  # hex-based message authentication code 哈希消息认证码import hashlib  # 提供了很多加密的算法import requestsimport cv2  class OpenApiISC: # 调用视频汇聚平台的openAPI    def __init__(self, gatewayIp, appKey, appSecret):        self.gatewayIp = gatewayIp # API网关IP        self.appKey = appKey # 合作方key        self.appSecret = appSecret # 合作方秘钥        self.base_url = "https://{}:443".format(self.gatewayIp) # api网关ip和端口号        self.http_method = "POST"        self.ARTEMIS_PATH = "/artemis"                self.cameraDataDict = {} # 最后输出的摄像头数据字典            def init(self, api_get_address_url): # 每次执行操作,都要初始化        appKey = self.appKey        appSecret = self.appSecret        x_ca_nonce = str(uuid.uuid4())        x_ca_timestamp = str(int(round(time.time()) * 1000))        signature = self.generateSignature( appKey, appSecret, x_ca_nonce, x_ca_timestamp, api_get_address_url)                self.headers = {            "Accept": "**\napplication/json" + "\nx-ca-key:" + appKey + "\nx-ca-nonce:" + \                   x_ca_nonce + "\nx-ca-timestamp:" + x_ca_timestamp + "\n" + \                   api_get_address_url        signature = self.sign(appSecret, sign_str)        print("[INFO] 获取到的签名值为:", signature)        return signature        def getDeviceIndexCodeListOperation(self): # 获取设备列表,可获得设备编码和名称        api_get_address_url = "{}{}".format(self.ARTEMIS_PATH, "/api/irds/v2/deviceResource/resources") #         self.init(api_get_address_url) # 获得设备编码的操作前的初始化            body = {            "pageNo": 1,            "pageSize": 100,            "resourceType": "camera"        }                url = self.base_url + api_get_address_url        results = requests.post(url, data=json.dumps(body), headers=self.headers,  verify=False)        print(results.json())                for i in range(len(results.json()['data']['list'])): # 遍历所有设备            data = results.json()['data']['list'][i]            if data['resourceType'] != 'camera': continue # 仅考虑摄像头                        cameradata = {} # 单个摄像头数据            cameradata.setdefault('indexCode', data['indexCode']) # 摄像头的设备编码            cameradata.setdefault('name', data['name']) # 摄像头的名称            cameradata.setdefault('regionIndexCode', data['regionIndexCode']) # 摄像头所属区域的编码            cameradata.setdefault('regionName', data['regionName']) # 摄像头所属区域的名称                        self.cameraDataDict.setdefault(i, cameradata)                print("获取设备编码和名称:", self.cameraDataDict)                def getSingleRealtimeURL(self, indexCode): # 根据设备编码indexCode,获取摄像头的实时播放url        api_get_address_url = "{}{}".format(self.ARTEMIS_PATH, "/api/video/v2/cameras/previewURLs")        self.init(api_get_address_url) # 获得设备实时播放url的操作前的初始化                body = {            "cameraIndexCode": indexCode,            "streamType": 0,            "protocol": "rtsp",        }                url = self.base_url + api_get_address_url        results = requests.post(url, data=json.dumps(body), headers=self.headers,  verify=False)        #print("根据设备编码{},获得实时播放url:{}".format(indexCode, results.json()['data']['url']))                return results.json()['data']['url']                def getSinglePlaybackURL(self, indexCode, beginTime, endTime,  name): # 根据设备编码indexCode, 获取摄像头给定时间段内的回放播放url        if 'NVR' not in name: return '' # 只有nvr设备才有回放            api_get_address_url = "{}{}".format(self.ARTEMIS_PATH, "/api/video/v2/cameras/playbackURLs")        self.init(api_get_address_url) # 获得设备实时播放url的操作前的初始化                body = {                  "cameraIndexCode": indexCode,                  "recordLocation": "1",                  "protocol": "rtsp",                  "transmode": 0,                  "beginTime": beginTime,                  "endTime": endTime,                  "expand": "streamform=rtp"              }                url = self.base_url + api_get_address_url        results = requests.post(url, data=json.dumps(body), headers=self.headers,  verify=False)        print("根据设备编码{}和时间段,获得回放播放url:{}".format(indexCode, results.json()['data']))                return results.json()['data']['url']            def getCameraDataDictOperation(self, beginTime, endTime): # 根据设备编码,获得摄像头的实时播放url        for key, camerainfo in self.cameraDataDict.items(): # 遍历摄像头            indexCode = camerainfo['indexCode'] # 设备编码            name = camerainfo['name'] # 设备名称            url = self.getSingleRealtimeURL(indexCode) # 实时播放url            playback_url = self.getSinglePlaybackURL(indexCode, beginTime, endTime, name) # 回放信息        self.cameraDataDict[key].setdefault('url', url) # 添加url数据            self.cameraDataDict[key].setdefault('playback', {'beginTime': beginTime, 'endTime': endTime, 'url': playback_url}) # 添加回放url                print("根据设备编码列表,获得摄像头数据:", self.cameraDataDict)                      if __name__ == '__main__':         gatewayIp = '' # 请填写自己的    appKey = "" # 请填写自己的    appSecret = "" # 请填写自己的               openAPIs = OpenApiISC(gatewayIp, appKey, appSecret)    openAPIs.getDeviceIndexCodeListOperation()         beginTime = "2023-05-23T13:44:04.000+08:00"    endTime = "2023-05-23T15:44:04.000+08:00"    openAPIs.getCameraDataDictOperation(beginTime, endTime) 

来源地址:https://blog.csdn.net/qq_30841655/article/details/130833388

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python调用海康视频汇聚平台API,获得所有摄像头设备编号、实时播放rtsp地址、回放rtsp地址

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录