diff --git a/apps/third/dahua.py b/apps/third/dahua.py index 9b027b27..f720b3eb 100644 --- a/apps/third/dahua.py +++ b/apps/third/dahua.py @@ -46,7 +46,8 @@ class DhClient: 'client_id': self.client_id, 'client_secret': self.client_secret } - is_ok, res = self.request(**dhapis['token_login'], params=params, raise_exception=False, timeout=10) + is_ok, res = self.request( + **dhapis['token_login'], params=params, raise_exception=False, timeout=10) if is_ok == 'success': cache.set('dh_token', res['access_token'], timeout=None) self.isGetingToken = False @@ -78,7 +79,8 @@ class DhClient: detail = '大华错误:' + \ '{}|{}{}{}'.format(str(ret['code']), ret.get('errMsg', ''), ret.get('desc', ''), str(ret.get('data', ''))) - err_detail = dict(detail=detail, code='dh_'+str(ret['code'])) + err_detail = dict( + detail=detail, code='dh_'+str(ret['code'])) self.handle_log(result='fail', response=ret) if raise_exception: raise ParseError(**err_detail) @@ -134,7 +136,8 @@ class DhClient: num = d_code_list[-1] json_data['deviceCode'] = d_code json_data['params'] = '{\"method\":\"dev.snap\",\"id\":123,\"params\":{\"DevID\":\"' + \ - str(d_code) + '\",\"DevChannel\":' + str(num) + ',\"PicNum\":1,\"SnapType\":1,\"CmdSrc\":0}}' + str(d_code) + '\",\"DevChannel\":' + str(num) + \ + ',\"PicNum\":1,\"SnapType\":1,\"CmdSrc\":0}}' is_ok, res = self.request(**dhapis['dev_snap'], json=json_data) if is_ok == 'success': res = json.loads(res) @@ -286,5 +289,22 @@ class DhClient: } self.request(**dhapis['face_deploy'], json=json_data) + def get_rtsp(self, code: str): + """获取rtsp流 + + Args: + code (str): 通道编号 + """ + is_ok, res = self.request(**dhapis['video_rtsp'], json={"data": {"channelId": code,"dataType": "1","streamType": "1"}}) + if is_ok == 'success': + if '|' in res['url']: + urls = res['url'].split('|') + for i in urls: + if settings.DAHUA_HOST in i: + return f"{i}?token={res['token']}" + else: + return f"{res['url']}?token={res['token']}" + return None + dhClient = DhClient() diff --git a/apps/third/views.py b/apps/third/views.py index 1db089bd..e32c45db 100755 --- a/apps/third/views.py +++ b/apps/third/views.py @@ -34,7 +34,8 @@ class DahuaTestView(MyLoggingMixin, APIView): def get(self, request, *args, **kwargs): # res = dhClient.face_search(path='/media/2022/07/13/three.jpg') - res = dhClient.snap(code='1000038$1$0$31') + # res = dhClient.snap(code='1000163$1$0$0') + res = dhClient.get_rtsp(code='1000163$1$0$0') return Response(res) @@ -266,7 +267,12 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet): 获取token """ - return Response({'token': cache.get('dh_token', '')}) + ret = { + "current": cache.get('dh_token', ''), + } + dhClient._get_token() + ret["new"] = cache.get('dh_token', '') + return Response(ret) @action(methods=['post'], detail=False, permission_classes=[IsAuthenticated], diff --git a/server/settings.py b/server/settings.py index 4de84fb9..00bc5c46 100755 --- a/server/settings.py +++ b/server/settings.py @@ -357,6 +357,7 @@ BASE_URL_OUT = conf.BASE_URL_OUT # 大华ICC平台 DAHUA_ENABLED = conf.DAHUA_ENABLED DAHUA_BASE_URL = conf.DAHUA_BASE_URL +DAHUA_HOST = conf.DAHUA_BASE_URL.replace('https://', '').replace('http://', '') DAHUA_USERNAME = conf.DAHUA_USERNAME DAHUA_PASSWORD = conf.DAHUA_PASSWORD DAHUA_CLIENTID = conf.DAHUA_CLIENTID