Przeglądaj źródła

新增通道和获取临时token

peng 1 rok temu
rodzic
commit
0554fc1a3b

+ 64 - 2
Controller/AWS/KVSController.py

@@ -9,6 +9,7 @@ import time
 import uuid
 import uuid
 import datetime
 import datetime
 
 
+import boto3
 from django.http import HttpResponse
 from django.http import HttpResponse
 from django.views import View
 from django.views import View
 
 
@@ -253,6 +254,10 @@ class KVSView(View):
             return self.create_media(request_dict, response)
             return self.create_media(request_dict, response)
         elif operation == 'update-data-retention':  # 修改视频流数据保留时间
         elif operation == 'update-data-retention':  # 修改视频流数据保留时间
             return self.update_data_retention(request_dict, response)
             return self.update_data_retention(request_dict, response)
+        elif operation == 'get-sts-token':  # 获取临时token
+            return self.get_sts_token(request_dict, response)
+        elif operation == 'create-signaling-channel':  # 新增通道
+            return self.create_signaling_channel(request_dict, response)
         else:
         else:
             # tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
             # tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
             # if tko.code != 0:
             # if tko.code != 0:
@@ -418,7 +423,8 @@ class KVSView(View):
             total_page = len(stream_list)
             total_page = len(stream_list)
             stream_list = stream_list[(page - 1) * size:page * size]
             stream_list = stream_list[(page - 1) * size:page * size]
             for item in stream_list:
             for item in stream_list:
-                temp_start_time = (item['startTime'] - datetime.timedelta(hours=8)).replace(tzinfo=datetime.timezone.utc)
+                temp_start_time = (item['startTime'] - datetime.timedelta(hours=8)).replace(
+                    tzinfo=datetime.timezone.utc)
                 temp_end_time = temp_start_time + datetime.timedelta(seconds=300)
                 temp_end_time = temp_start_time + datetime.timedelta(seconds=300)
                 item['image'] = kinesis_images_obj.get_images(serial_number, temp_start_time, temp_end_time)
                 item['image'] = kinesis_images_obj.get_images(serial_number, temp_start_time, temp_end_time)
                 item['startTime'] = int(item['startTime'].timestamp())
                 item['startTime'] = int(item['startTime'].timestamp())
@@ -469,4 +475,60 @@ class KVSView(View):
             return res
             return res
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def get_sts_token(request_dict, response):
+        """
+        获取临时token
+        @param request_dict: 请求参数
+        @request_dict uid: 设备uid
+        @param response: 响应对象
+        @return: response
+        """
+        uid = request_dict.get('uid', None)
+        # if not all([]):
+        #     return response.json(444)
+        try:
+            sts_client_conn = boto3.client(
+                'sts',
+                aws_access_key_id=ACCESS_KEY_ID,
+                aws_secret_access_key=SECRET_ACCESS_KEY,
+                region_name=REGION_NAME
+            )
+            sts_obj = sts_client_conn.get_session_token(DurationSeconds=3600)
+            res = {
+                'AccessKeyId': sts_obj['Credentials']['AccessKeyId'],
+                'AccessKeySecret': sts_obj['Credentials']['SecretAccessKey'],
+                'SessionToken': sts_obj['Credentials']['SessionToken'],
+                'Expiration': str(sts_obj['Credentials']['Expiration'])
+            }
+            return response.json(0, res)
+        except Exception as e:
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+
+    @staticmethod
+    def create_signaling_channel(request_dict, response):
+        """
+        获取临时token
+        @param request_dict: 请求参数
+        @request_dict uid: 设备uid
+        @param response: 响应对象
+        @return: response
+        """
+        uid = request_dict.get('uid', None)
+        if not all([uid]):
+            return response.json(444)
+        try:
+            sts_client_conn = AmazonKinesisVideoObject(
+                aws_access_key_id=ACCESS_KEY_ID,
+                secret_access_key=SECRET_ACCESS_KEY,
+                region_name=REGION_NAME
+            )
+            sts_client_conn.create_signaling_channel(channel_name=uid)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 8 - 0
Object/AWS/AmazonKinesisVideoUtil.py

@@ -74,6 +74,14 @@ class AmazonKinesisVideoObject:
         """
         """
         return self.client_conn.get_data_endpoint(StreamName=stream_name, APIName=api_name)['DataEndpoint']
         return self.client_conn.get_data_endpoint(StreamName=stream_name, APIName=api_name)['DataEndpoint']
 
 
+    def create_signaling_channel(self, channel_name):
+        """
+        创建通道
+        @param channel_name: 通道名称
+        @return stream_info: 视频流信息数据
+        """
+        return self.client_conn.create_signaling_channel(ChannelName=channel_name)
+
 
 
 class AmazonKVAMObject:
 class AmazonKVAMObject:
     def __init__(self, aws_access_key_id, secret_access_key, region_name, stream_name, api_name):
     def __init__(self, aws_access_key_id, secret_access_key, region_name, stream_name, api_name):