|
@@ -265,10 +265,12 @@ class KVSView(View):
|
|
return self.update_data_retention(request_dict, response)
|
|
return self.update_data_retention(request_dict, response)
|
|
elif operation == 'get-sts-token': # 获取临时token
|
|
elif operation == 'get-sts-token': # 获取临时token
|
|
return self.get_sts_token(request_dict, response)
|
|
return self.get_sts_token(request_dict, response)
|
|
- elif operation == 'create-signaling-channel': # 新增通道
|
|
|
|
- return self.create_signaling_channel(request_dict, response)
|
|
|
|
|
|
+ elif operation == 'createSignalChannel': # 创建通道
|
|
|
|
+ return self.create_signal_channel(request_dict, response)
|
|
elif operation == 'SendAlexaOfferToMaster': # 发送Alexa offer
|
|
elif operation == 'SendAlexaOfferToMaster': # 发送Alexa offer
|
|
return self.send_alexa_offer_to_master(request_dict, response)
|
|
return self.send_alexa_offer_to_master(request_dict, response)
|
|
|
|
+ elif operation == 'deleteSignalChannel': # 删除通道
|
|
|
|
+ return self.delete_signal_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:
|
|
@@ -520,27 +522,31 @@ class KVSView(View):
|
|
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
|
|
@staticmethod
|
|
- def create_signaling_channel(request_dict, response):
|
|
|
|
|
|
+ def create_signal_channel(request_dict, response):
|
|
"""
|
|
"""
|
|
- 获取临时token
|
|
|
|
|
|
+ 创建信号通道
|
|
@param request_dict: 请求参数
|
|
@param request_dict: 请求参数
|
|
- @request_dict uid: 设备uid
|
|
|
|
|
|
+ @request_dict serial: 序列号
|
|
@param response: 响应对象
|
|
@param response: 响应对象
|
|
@return: response
|
|
@return: response
|
|
"""
|
|
"""
|
|
- uid = request_dict.get('uid', None)
|
|
|
|
- if not all([uid]):
|
|
|
|
|
|
+ serial = request_dict.get('serial', None)
|
|
|
|
+ if not all([serial]):
|
|
return response.json(444)
|
|
return response.json(444)
|
|
try:
|
|
try:
|
|
- sts_client_conn = AmazonKinesisVideoObject(
|
|
|
|
|
|
+ kinesis_video_obj = AmazonKinesisVideoObject(
|
|
aws_access_key_id=ACCESS_KEY_ID,
|
|
aws_access_key_id=ACCESS_KEY_ID,
|
|
secret_access_key=SECRET_ACCESS_KEY,
|
|
secret_access_key=SECRET_ACCESS_KEY,
|
|
region_name=KVS_REGION
|
|
region_name=KVS_REGION
|
|
)
|
|
)
|
|
- sts_client_conn.create_signaling_channel(channel_name=uid)
|
|
|
|
|
|
+ channel_arn = kinesis_video_obj.create_signaling_channel(channel_name=serial)
|
|
|
|
+ now_time = int(time.time())
|
|
|
|
+ KVS.objects.create(
|
|
|
|
+ channel_name=serial, channel_arn=channel_arn, channel_ttl=60,
|
|
|
|
+ created_time=now_time, updated_time=now_time
|
|
|
|
+ )
|
|
return response.json(0)
|
|
return response.json(0)
|
|
except Exception as e:
|
|
except Exception as 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)))
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
@@ -565,22 +571,12 @@ class KVSView(View):
|
|
return response.json(173)
|
|
return response.json(173)
|
|
channel_arn = kvs_qs[0]['channel_arn']
|
|
channel_arn = kvs_qs[0]['channel_arn']
|
|
|
|
|
|
- client = boto3.client(
|
|
|
|
- 'kinesisvideo',
|
|
|
|
|
|
+ kinesis_video_obj = AmazonKinesisVideoObject(
|
|
aws_access_key_id=ACCESS_KEY_ID,
|
|
aws_access_key_id=ACCESS_KEY_ID,
|
|
- aws_secret_access_key=SECRET_ACCESS_KEY,
|
|
|
|
- config=botocore.client.Config(signature_version='s3v4'),
|
|
|
|
|
|
+ secret_access_key=SECRET_ACCESS_KEY,
|
|
region_name=KVS_REGION
|
|
region_name=KVS_REGION
|
|
)
|
|
)
|
|
- res = client.get_signaling_channel_endpoint(
|
|
|
|
- ChannelARN=channel_arn,
|
|
|
|
- SingleMasterChannelEndpointConfiguration={
|
|
|
|
- 'Protocols': ['HTTPS'],
|
|
|
|
- 'Role': 'MASTER'
|
|
|
|
- }
|
|
|
|
- )
|
|
|
|
- print(res)
|
|
|
|
- endpoint = res['ResourceEndpointList'][0]['ResourceEndpoint']
|
|
|
|
|
|
+ endpoint = kinesis_video_obj.get_signaling_channel_endpoint(channel_arn)
|
|
url = '{}/v1/send-alexa-offer-to-master'.format(endpoint)
|
|
url = '{}/v1/send-alexa-offer-to-master'.format(endpoint)
|
|
# 构造请求 body
|
|
# 构造请求 body
|
|
client_id = hashlib.md5((str(uuid.uuid1()) + str(int(time.time()))).encode('utf-8')).hexdigest()
|
|
client_id = hashlib.md5((str(uuid.uuid1()) + str(int(time.time()))).encode('utf-8')).hexdigest()
|
|
@@ -637,3 +633,31 @@ class KVSView(View):
|
|
def base64_to_dict(encoded_str: str) -> dict:
|
|
def base64_to_dict(encoded_str: str) -> dict:
|
|
decoded_bytes = base64.b64decode(encoded_str)
|
|
decoded_bytes = base64.b64decode(encoded_str)
|
|
return json.loads(decoded_bytes.decode('utf-8'))
|
|
return json.loads(decoded_bytes.decode('utf-8'))
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def delete_signal_channel(request_dict, response):
|
|
|
|
+ """
|
|
|
|
+ 删除信号通道
|
|
|
|
+ @param request_dict: 请求参数
|
|
|
|
+ @request_dict serial: 序列号
|
|
|
|
+ @param response: 响应对象
|
|
|
|
+ @return: response
|
|
|
|
+ """
|
|
|
|
+ serial = request_dict.get('serial', None)
|
|
|
|
+ if not all([serial]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ try:
|
|
|
|
+ kvs = KVS.objects.filter(channel_name=serial).first()
|
|
|
|
+ if not kvs:
|
|
|
|
+ return response.json(173)
|
|
|
|
+ channel_arn = kvs.channel_arn
|
|
|
|
+ kinesis_video_obj = AmazonKinesisVideoObject(
|
|
|
|
+ aws_access_key_id=ACCESS_KEY_ID,
|
|
|
|
+ secret_access_key=SECRET_ACCESS_KEY,
|
|
|
|
+ region_name=KVS_REGION
|
|
|
|
+ )
|
|
|
|
+ kinesis_video_obj.delete_signaling_channel(channel_arn=channel_arn)
|
|
|
|
+ kvs.delete()
|
|
|
|
+ return response.json(0)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|