|
@@ -7,12 +7,14 @@
|
|
import hashlib
|
|
import hashlib
|
|
import time
|
|
import time
|
|
import uuid
|
|
import uuid
|
|
|
|
+import datetime
|
|
|
|
+
|
|
|
|
+import pytz
|
|
from django.views import View
|
|
from django.views import View
|
|
|
|
|
|
-from Model.models import KVS, Device_User
|
|
|
|
|
|
+from Model.models import KVS, Device_User, Device_Info
|
|
from Object.AWS.AmazonKVSUtil import AmazonKVSObject
|
|
from Object.AWS.AmazonKVSUtil import AmazonKVSObject
|
|
-from Object.AWS.AmazonKVAMUtil import AmazonKVAMObject
|
|
|
|
-from Object.AWS.AmazonKinesisVideoUtil import AmazonKinesisVideoObject
|
|
|
|
|
|
+from Object.AWS.AmazonKinesisVideoUtil import AmazonKinesisVideoObject, AmazonKVAMObject
|
|
from Object.RedisObject import RedisObject
|
|
from Object.RedisObject import RedisObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, SERVER_DOMAIN
|
|
from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, SERVER_DOMAIN
|
|
@@ -40,7 +42,17 @@ class UserRelatedView(View):
|
|
elif operation == 'confirm-login': # app确认登录
|
|
elif operation == 'confirm-login': # app确认登录
|
|
return self.confirm_login(request_dict, response)
|
|
return self.confirm_login(request_dict, response)
|
|
else:
|
|
else:
|
|
- return response.json(404)
|
|
|
|
|
|
+ tko = TokenObject(
|
|
|
|
+ request.META.get('HTTP_AUTHORIZATION'),
|
|
|
|
+ returntpye='pc')
|
|
|
|
+ if tko.code != 0:
|
|
|
|
+ return response.json(tko.code)
|
|
|
|
+ response.lang = tko.lang
|
|
|
|
+ user_id = tko.userID
|
|
|
|
+ if operation == 'get-device': # 获取设备列表
|
|
|
|
+ return self.get_device(request_dict, response, user_id)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(404)
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
def generate_qr_code(request_dict, response):
|
|
def generate_qr_code(request_dict, response):
|
|
@@ -89,7 +101,8 @@ class UserRelatedView(View):
|
|
if tko.code != 0:
|
|
if tko.code != 0:
|
|
return response.json(tko.code)
|
|
return response.json(tko.code)
|
|
user_id = tko.userID
|
|
user_id = tko.userID
|
|
- device_user_qs = Device_User.objects.filter(userID=user_id).values('NickName', 'userIconPath', 'userIconUrl')
|
|
|
|
|
|
+ device_user_qs = Device_User.objects.filter(userID=user_id).values('NickName', 'userIconPath',
|
|
|
|
+ 'userIconUrl')
|
|
if not device_user_qs.exists():
|
|
if not device_user_qs.exists():
|
|
user_icon_url = ''
|
|
user_icon_url = ''
|
|
nick_name = ''
|
|
nick_name = ''
|
|
@@ -133,6 +146,22 @@ class UserRelatedView(View):
|
|
print(e)
|
|
print(e)
|
|
return response.json(500)
|
|
return response.json(500)
|
|
|
|
|
|
|
|
+ @staticmethod
|
|
|
|
+ def get_device(request_dict, response, user_id):
|
|
|
|
+ """
|
|
|
|
+ 获取设备列表
|
|
|
|
+ @param request_dict: 请求参数
|
|
|
|
+ @param response: 响应对象
|
|
|
|
+ @param user_id: 用户id
|
|
|
|
+ @return: response
|
|
|
|
+ """
|
|
|
|
+ try:
|
|
|
|
+ device_qs = Device_Info.objects.filter(userID=user_id).values('serial_number', 'NickName')
|
|
|
|
+ return response.json(0, list(device_qs))
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500)
|
|
|
|
+
|
|
|
|
|
|
class KVSView(View):
|
|
class KVSView(View):
|
|
def get(self, request, *args, **kwargs):
|
|
def get(self, request, *args, **kwargs):
|
|
@@ -154,7 +183,17 @@ class KVSView(View):
|
|
elif operation == 'get-hls-midea': # 修改视频流数据保留时间
|
|
elif operation == 'get-hls-midea': # 修改视频流数据保留时间
|
|
return self.get_hls_midea_url(request_dict, response)
|
|
return self.get_hls_midea_url(request_dict, response)
|
|
else:
|
|
else:
|
|
- return response.json(404)
|
|
|
|
|
|
+ tko = TokenObject(
|
|
|
|
+ request.META.get('HTTP_AUTHORIZATION'),
|
|
|
|
+ returntpye='pc')
|
|
|
|
+ if tko.code != 0:
|
|
|
|
+ return response.json(tko.code)
|
|
|
|
+ response.lang = tko.lang
|
|
|
|
+ user_id = tko.userID
|
|
|
|
+ if operation == 'get-device-midea_list': # 获取设备列表
|
|
|
|
+ return self.get_device_midea_list(request_dict, response)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(404)
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
def create_media(request_dict, response):
|
|
def create_media(request_dict, response):
|
|
@@ -224,7 +263,22 @@ class KVSView(View):
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
def get_hls_midea_url(request_dict, response):
|
|
def get_hls_midea_url(request_dict, response):
|
|
|
|
+ """
|
|
|
|
+ 获取视频播放地址
|
|
|
|
+ @param request_dict: 请求参数
|
|
|
|
+ @request_dict serial_number: 序列号
|
|
|
|
+ @request_dict startTime: 开始时间
|
|
|
|
+ @request_dict endTime: 结束时间
|
|
|
|
+ @param response: 响应对象
|
|
|
|
+ @return: response
|
|
|
|
+ """
|
|
serial_number = request_dict.get('serial_number', None)
|
|
serial_number = request_dict.get('serial_number', None)
|
|
|
|
+ start_time = request_dict.get('startTime', None)
|
|
|
|
+ end_time = request_dict.get('endTime', None)
|
|
|
|
+ if not all([serial_number, start_time, end_time]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ start_time = datetime.datetime.fromtimestamp(int(start_time)).astimezone(pytz.utc)
|
|
|
|
+ end_time = datetime.datetime.fromtimestamp(int(end_time)).astimezone(pytz.utc)
|
|
try:
|
|
try:
|
|
# kvs_qs = KVS.objects.filter(stream_name=serial_number)
|
|
# kvs_qs = KVS.objects.filter(stream_name=serial_number)
|
|
# if not kvs_qs.exists():
|
|
# if not kvs_qs.exists():
|
|
@@ -236,8 +290,62 @@ class KVSView(View):
|
|
stream_name=serial_number,
|
|
stream_name=serial_number,
|
|
api_name='GET_HLS_STREAMING_SESSION_URL'
|
|
api_name='GET_HLS_STREAMING_SESSION_URL'
|
|
)
|
|
)
|
|
- hls_streaming_session_url = kinesis_video_obj.get_hls_streaming_session_url(serial_number)
|
|
|
|
|
|
+ hls_streaming_session_url = kinesis_video_obj.get_hls_streaming_session_url(serial_number, start_time,
|
|
|
|
+ end_time)
|
|
return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
|
|
return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(e)
|
|
print(e)
|
|
return response.json(500, repr(e))
|
|
return response.json(500, repr(e))
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def get_device_midea_list(request_dict, response):
|
|
|
|
+ """
|
|
|
|
+ 获取视频播放列表
|
|
|
|
+ @param request_dict: 请求参数
|
|
|
|
+ @request_dict serial_number: 序列号
|
|
|
|
+ @request_dict startTime: 开始时间
|
|
|
|
+ @request_dict endTime: 结束时间
|
|
|
|
+ @param response: 响应对象
|
|
|
|
+ @return: response
|
|
|
|
+ """
|
|
|
|
+ serial_number = request_dict.get('serial_number', None)
|
|
|
|
+ start_time = request_dict.get('startTime', None)
|
|
|
|
+ end_time = request_dict.get('endTime', None)
|
|
|
|
+ page = request_dict.get('page', None)
|
|
|
|
+ size = request_dict.get('size', None)
|
|
|
|
+ if not all([serial_number, start_time, end_time, page, size]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ page = int(page)
|
|
|
|
+ size = int(size)
|
|
|
|
+ start_time = datetime.datetime.fromtimestamp(int(start_time)).astimezone(pytz.utc)
|
|
|
|
+ end_time = datetime.datetime.fromtimestamp(int(end_time)).astimezone(pytz.utc)
|
|
|
|
+ try:
|
|
|
|
+ # kvs_qs = KVS.objects.filter(stream_name=serial_number)
|
|
|
|
+ # if not kvs_qs.exists():
|
|
|
|
+ # return response.json(174)
|
|
|
|
+ kinesis_fragments_obj = AmazonKVAMObject(
|
|
|
|
+ aws_access_key_id='AKIA2E67UIMD45Y3HL53',
|
|
|
|
+ secret_access_key='ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw',
|
|
|
|
+ region_name='us-east-1',
|
|
|
|
+ stream_name=serial_number,
|
|
|
|
+ api_name='LIST_FRAGMENTS'
|
|
|
|
+ )
|
|
|
|
+ kinesis_images_obj = AmazonKVAMObject(
|
|
|
|
+ aws_access_key_id='AKIA2E67UIMD45Y3HL53',
|
|
|
|
+ secret_access_key='ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw',
|
|
|
|
+ region_name='us-east-1',
|
|
|
|
+ stream_name=serial_number,
|
|
|
|
+ api_name='GET_IMAGES'
|
|
|
|
+ )
|
|
|
|
+ stream_list = kinesis_fragments_obj.get_list_fragments(serial_number, start_time, end_time)[
|
|
|
|
+ (page - 1) * size:page * size]
|
|
|
|
+ for item in stream_list:
|
|
|
|
+ temp_start_time = item['startTime'].astimezone(pytz.utc)
|
|
|
|
+ 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['startTime'] = int(time.mktime(item['startTime'].timetuple()))
|
|
|
|
+ item['endTime'] = int(time.mktime(item['endTime'].timetuple()))
|
|
|
|
+ return response.json(0, stream_list)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500, repr(e))
|